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.
- package/CHANGELOG.md +40 -0
- package/CLAUDE.md +74 -211
- package/core/agentic/prompt-builder.ts +3 -7
- package/core/command-registry/optional-commands.ts +0 -20
- package/core/infrastructure/command-installer/command-installer.ts +8 -1
- package/core/infrastructure/command-installer/global-config.ts +31 -1
- package/core/infrastructure/command-installer/index.ts +1 -1
- package/core/infrastructure/setup.ts +3 -0
- package/package.json +3 -17
- package/templates/commands/done.md +57 -258
- package/templates/commands/now.md +72 -277
- package/templates/commands/ship.md +55 -261
- package/templates/commands/test.md +328 -21
- package/templates/global/CLAUDE.md +40 -205
- package/templates/global/docs/agents.md +88 -0
- package/templates/global/docs/architecture.md +103 -0
- package/templates/global/docs/commands.md +98 -0
- package/templates/global/docs/validation.md +95 -0
- package/templates/mcp-config.json +36 -0
- package/bin/dev.js +0 -216
- package/bin/serve.js +0 -361
- package/packages/web/README.md +0 -36
- package/packages/web/app/api/claude/sessions/route.ts +0 -44
- package/packages/web/app/api/claude/status/route.ts +0 -34
- package/packages/web/app/api/projects/[id]/icon/route.ts +0 -33
- package/packages/web/app/api/projects/[id]/momentum/route.ts +0 -257
- package/packages/web/app/api/projects/[id]/route.ts +0 -29
- package/packages/web/app/api/projects/[id]/stats/route.ts +0 -41
- package/packages/web/app/api/projects/[id]/status/route.ts +0 -21
- package/packages/web/app/api/projects/route.ts +0 -16
- package/packages/web/app/api/sessions/current/route.ts +0 -132
- package/packages/web/app/api/sessions/history/route.ts +0 -204
- package/packages/web/app/error.tsx +0 -34
- package/packages/web/app/favicon.ico +0 -0
- package/packages/web/app/globals.css +0 -198
- package/packages/web/app/layout.tsx +0 -53
- package/packages/web/app/loading.tsx +0 -7
- package/packages/web/app/not-found.tsx +0 -25
- package/packages/web/app/page.tsx +0 -12
- package/packages/web/app/project/[id]/code/layout.tsx +0 -18
- package/packages/web/app/project/[id]/code/page.tsx +0 -408
- package/packages/web/app/project/[id]/error.tsx +0 -41
- package/packages/web/app/project/[id]/loading.tsx +0 -9
- package/packages/web/app/project/[id]/not-found.tsx +0 -27
- package/packages/web/app/project/[id]/page.tsx +0 -384
- package/packages/web/app/project/[id]/reports/page.tsx +0 -59
- package/packages/web/app/project/[id]/reports/print/page.tsx +0 -58
- package/packages/web/app/sessions/page.tsx +0 -165
- package/packages/web/app/settings/page.tsx +0 -151
- package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +0 -2
- package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +0 -49
- package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +0 -8
- package/packages/web/components/ActivityTimeline/hooks/index.ts +0 -2
- package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +0 -9
- package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +0 -23
- package/packages/web/components/ActivityTimeline/index.ts +0 -2
- package/packages/web/components/AgentsCard/AgentsCard.tsx +0 -93
- package/packages/web/components/AgentsCard/AgentsCard.types.ts +0 -14
- package/packages/web/components/AgentsCard/index.ts +0 -2
- package/packages/web/components/AppSidebar/AppSidebar.tsx +0 -316
- package/packages/web/components/AppSidebar/index.ts +0 -1
- package/packages/web/components/BackLink/BackLink.tsx +0 -18
- package/packages/web/components/BackLink/BackLink.types.ts +0 -5
- package/packages/web/components/BackLink/index.ts +0 -2
- package/packages/web/components/BentoCard/BentoCard.constants.ts +0 -16
- package/packages/web/components/BentoCard/BentoCard.tsx +0 -48
- package/packages/web/components/BentoCard/BentoCard.types.ts +0 -15
- package/packages/web/components/BentoCard/index.ts +0 -2
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +0 -9
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +0 -18
- package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +0 -5
- package/packages/web/components/BentoCardSkeleton/index.ts +0 -2
- package/packages/web/components/BentoGrid/BentoGrid.tsx +0 -18
- package/packages/web/components/BentoGrid/BentoGrid.types.ts +0 -4
- package/packages/web/components/BentoGrid/index.ts +0 -2
- package/packages/web/components/BlockersCard/BlockersCard.tsx +0 -75
- package/packages/web/components/BlockersCard/BlockersCard.types.ts +0 -12
- package/packages/web/components/BlockersCard/index.ts +0 -2
- package/packages/web/components/CommandBar/CommandBar.tsx +0 -67
- package/packages/web/components/CommandBar/index.ts +0 -1
- package/packages/web/components/CommandButton/CommandButton.tsx +0 -46
- package/packages/web/components/CommandButton/index.ts +0 -1
- package/packages/web/components/ConnectionStatus/ConnectionStatus.tsx +0 -29
- package/packages/web/components/ConnectionStatus/index.ts +0 -1
- package/packages/web/components/DashboardContent/DashboardContent.tsx +0 -284
- package/packages/web/components/DashboardContent/index.ts +0 -1
- package/packages/web/components/DateGroup/DateGroup.tsx +0 -18
- package/packages/web/components/DateGroup/DateGroup.types.ts +0 -6
- package/packages/web/components/DateGroup/DateGroup.utils.ts +0 -11
- package/packages/web/components/DateGroup/index.ts +0 -2
- package/packages/web/components/EmptyState/EmptyState.tsx +0 -76
- package/packages/web/components/EmptyState/EmptyState.types.ts +0 -11
- package/packages/web/components/EmptyState/index.ts +0 -2
- package/packages/web/components/EventRow/EventRow.constants.ts +0 -10
- package/packages/web/components/EventRow/EventRow.tsx +0 -49
- package/packages/web/components/EventRow/EventRow.types.ts +0 -7
- package/packages/web/components/EventRow/EventRow.utils.ts +0 -49
- package/packages/web/components/EventRow/index.ts +0 -2
- package/packages/web/components/ExpandButton/ExpandButton.tsx +0 -18
- package/packages/web/components/ExpandButton/ExpandButton.types.ts +0 -6
- package/packages/web/components/ExpandButton/index.ts +0 -2
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +0 -14
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +0 -5
- package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +0 -13
- package/packages/web/components/HealthGradientBackground/index.ts +0 -2
- package/packages/web/components/HeroSection/HeroSection.tsx +0 -92
- package/packages/web/components/HeroSection/HeroSection.types.ts +0 -14
- package/packages/web/components/HeroSection/HeroSection.utils.ts +0 -11
- package/packages/web/components/HeroSection/hooks/index.ts +0 -2
- package/packages/web/components/HeroSection/hooks/useCountUp.ts +0 -45
- package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +0 -18
- package/packages/web/components/HeroSection/index.ts +0 -2
- package/packages/web/components/IdeasCard/IdeasCard.tsx +0 -115
- package/packages/web/components/IdeasCard/IdeasCard.types.ts +0 -10
- package/packages/web/components/IdeasCard/index.ts +0 -2
- package/packages/web/components/InsightMessage/InsightMessage.tsx +0 -9
- package/packages/web/components/InsightMessage/InsightMessage.types.ts +0 -3
- package/packages/web/components/InsightMessage/index.ts +0 -2
- package/packages/web/components/Logo/Logo.tsx +0 -65
- package/packages/web/components/Logo/index.ts +0 -1
- package/packages/web/components/MarkdownContent/MarkdownContent.tsx +0 -123
- package/packages/web/components/MarkdownContent/index.ts +0 -1
- package/packages/web/components/MasonryGrid/MasonryGrid.tsx +0 -18
- package/packages/web/components/MasonryGrid/index.ts +0 -1
- package/packages/web/components/MomentumWidget/MomentumWidget.tsx +0 -119
- package/packages/web/components/MomentumWidget/MomentumWidget.types.ts +0 -16
- package/packages/web/components/MomentumWidget/index.ts +0 -2
- package/packages/web/components/NowCard/NowCard.tsx +0 -118
- package/packages/web/components/NowCard/NowCard.types.ts +0 -16
- package/packages/web/components/NowCard/index.ts +0 -2
- package/packages/web/components/PageHeader/PageHeader.tsx +0 -24
- package/packages/web/components/PageHeader/index.ts +0 -1
- package/packages/web/components/ProgressRing/ProgressRing.constants.ts +0 -20
- package/packages/web/components/ProgressRing/ProgressRing.tsx +0 -51
- package/packages/web/components/ProgressRing/ProgressRing.types.ts +0 -11
- package/packages/web/components/ProgressRing/index.ts +0 -2
- package/packages/web/components/ProjectAvatar/ProjectAvatar.tsx +0 -54
- package/packages/web/components/ProjectAvatar/index.ts +0 -1
- package/packages/web/components/ProjectColorDot/ProjectColorDot.tsx +0 -37
- package/packages/web/components/ProjectColorDot/index.ts +0 -1
- package/packages/web/components/ProjectSelectorModal/ProjectSelectorModal.tsx +0 -104
- package/packages/web/components/ProjectSelectorModal/index.ts +0 -1
- package/packages/web/components/Providers/Providers.tsx +0 -48
- package/packages/web/components/Providers/index.ts +0 -1
- package/packages/web/components/QueueCard/QueueCard.tsx +0 -125
- package/packages/web/components/QueueCard/QueueCard.types.ts +0 -12
- package/packages/web/components/QueueCard/QueueCard.utils.ts +0 -12
- package/packages/web/components/QueueCard/index.ts +0 -2
- package/packages/web/components/RecoverCard/RecoverCard.tsx +0 -72
- package/packages/web/components/RecoverCard/RecoverCard.types.ts +0 -16
- package/packages/web/components/RecoverCard/index.ts +0 -2
- package/packages/web/components/RoadmapCard/RoadmapCard.tsx +0 -145
- package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +0 -16
- package/packages/web/components/RoadmapCard/index.ts +0 -2
- package/packages/web/components/ShipsCard/ShipsCard.tsx +0 -95
- package/packages/web/components/ShipsCard/ShipsCard.types.ts +0 -14
- package/packages/web/components/ShipsCard/ShipsCard.utils.ts +0 -4
- package/packages/web/components/ShipsCard/index.ts +0 -2
- package/packages/web/components/SparklineChart/SparklineChart.tsx +0 -40
- package/packages/web/components/SparklineChart/SparklineChart.types.ts +0 -6
- package/packages/web/components/SparklineChart/index.ts +0 -2
- package/packages/web/components/StatsMasonry/StatsMasonry.tsx +0 -95
- package/packages/web/components/StatsMasonry/index.ts +0 -1
- package/packages/web/components/StreakCard/StreakCard.constants.ts +0 -2
- package/packages/web/components/StreakCard/StreakCard.tsx +0 -55
- package/packages/web/components/StreakCard/StreakCard.types.ts +0 -4
- package/packages/web/components/StreakCard/index.ts +0 -2
- package/packages/web/components/TasksCounter/TasksCounter.tsx +0 -14
- package/packages/web/components/TasksCounter/TasksCounter.types.ts +0 -3
- package/packages/web/components/TasksCounter/index.ts +0 -2
- package/packages/web/components/TechStackBadges/TechStackBadges.tsx +0 -28
- package/packages/web/components/TechStackBadges/index.ts +0 -1
- package/packages/web/components/TerminalDock/DockToggleTab.tsx +0 -29
- package/packages/web/components/TerminalDock/TerminalDock.tsx +0 -386
- package/packages/web/components/TerminalDock/TerminalDockTab.tsx +0 -130
- package/packages/web/components/TerminalDock/TerminalTabBar.tsx +0 -142
- package/packages/web/components/TerminalDock/index.ts +0 -2
- package/packages/web/components/TerminalTabs/TerminalTab.tsx +0 -95
- package/packages/web/components/TerminalTabs/TerminalTabs.tsx +0 -211
- package/packages/web/components/TerminalTabs/index.ts +0 -1
- package/packages/web/components/VelocityBadge/VelocityBadge.tsx +0 -32
- package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +0 -3
- package/packages/web/components/VelocityBadge/index.ts +0 -2
- package/packages/web/components/VelocityCard/VelocityCard.tsx +0 -73
- package/packages/web/components/VelocityCard/VelocityCard.types.ts +0 -7
- package/packages/web/components/VelocityCard/index.ts +0 -2
- package/packages/web/components/WeeklyReports/PrintableReport.tsx +0 -259
- package/packages/web/components/WeeklyReports/ReportPreviewCard.tsx +0 -187
- package/packages/web/components/WeeklyReports/WeekCalendar.tsx +0 -288
- package/packages/web/components/WeeklyReports/WeeklyReports.tsx +0 -149
- package/packages/web/components/WeeklyReports/index.ts +0 -4
- package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +0 -25
- package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +0 -4
- package/packages/web/components/WeeklySparkline/index.ts +0 -2
- package/packages/web/components/charts/SessionsChart.tsx +0 -175
- package/packages/web/components/ui/alert-dialog.tsx +0 -157
- package/packages/web/components/ui/badge.tsx +0 -46
- package/packages/web/components/ui/button.tsx +0 -60
- package/packages/web/components/ui/card.tsx +0 -92
- package/packages/web/components/ui/chart.tsx +0 -385
- package/packages/web/components/ui/dialog.tsx +0 -143
- package/packages/web/components/ui/drawer.tsx +0 -135
- package/packages/web/components/ui/dropdown-menu.tsx +0 -257
- package/packages/web/components/ui/input.tsx +0 -21
- package/packages/web/components/ui/scroll-area.tsx +0 -58
- package/packages/web/components/ui/select.tsx +0 -187
- package/packages/web/components/ui/sheet.tsx +0 -139
- package/packages/web/components/ui/tabs.tsx +0 -66
- package/packages/web/components/ui/tooltip.tsx +0 -61
- package/packages/web/components.json +0 -22
- package/packages/web/context/GlobalTerminalContext.tsx +0 -538
- package/packages/web/context/TerminalContext.tsx +0 -45
- package/packages/web/context/TerminalTabsContext.tsx +0 -181
- package/packages/web/eslint.config.mjs +0 -18
- package/packages/web/hooks/useClaudeTerminal.ts +0 -425
- package/packages/web/hooks/useProjectStats.ts +0 -93
- package/packages/web/hooks/useProjects.ts +0 -73
- package/packages/web/lib/actions/projects.ts +0 -15
- package/packages/web/lib/commands.ts +0 -81
- package/packages/web/lib/format.ts +0 -23
- package/packages/web/lib/generate-week-report.ts +0 -285
- package/packages/web/lib/parse-prjct-files.ts +0 -1123
- package/packages/web/lib/project-colors.ts +0 -58
- package/packages/web/lib/projects.ts +0 -506
- package/packages/web/lib/pty.ts +0 -101
- package/packages/web/lib/query-config.ts +0 -44
- package/packages/web/lib/services/index.ts +0 -9
- package/packages/web/lib/services/projects.server.ts +0 -66
- package/packages/web/lib/services/stats.server.ts +0 -562
- package/packages/web/lib/unified-loader.ts +0 -396
- package/packages/web/lib/utils.ts +0 -6
- package/packages/web/next-env.d.ts +0 -6
- package/packages/web/next.config.ts +0 -7
- package/packages/web/package.json +0 -57
- package/packages/web/postcss.config.mjs +0 -7
- package/packages/web/public/file.svg +0 -1
- package/packages/web/public/globe.svg +0 -1
- package/packages/web/public/next.svg +0 -1
- package/packages/web/public/vercel.svg +0 -1
- package/packages/web/public/window.svg +0 -1
- package/packages/web/server.ts +0 -312
- package/packages/web/tsconfig.json +0 -34
- 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
|
|
6
|
+
# /p:ship - Ship Feature
|
|
13
7
|
|
|
14
|
-
|
|
8
|
+
Ship completed work with quality checks, version bump, and git commit.
|
|
15
9
|
|
|
10
|
+
## Usage
|
|
16
11
|
```
|
|
17
|
-
|
|
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
|
-
|
|
21
|
-
**Claude Context**: `context/shipped.md` (generated)
|
|
22
|
-
**Backend Sync**: `sync/pending.json` (events)
|
|
17
|
+
## Flow
|
|
23
18
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
140
|
-
|
|
58
|
+
"`
|
|
59
|
+
BASH: `git push`
|
|
141
60
|
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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: `{
|
|
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
|
-
|
|
79
|
+
Generate context:
|
|
80
|
+
WRITE: `{globalPath}/context/shipped.md`
|
|
229
81
|
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
85
|
+
Log to memory:
|
|
86
|
+
APPEND to `{globalPath}/memory/events.jsonl`
|
|
236
87
|
|
|
237
|
-
|
|
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: {
|
|
264
|
-
|
|
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 |
|
|
284
|
-
|
|
|
285
|
-
| Push fails |
|
|
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
|
-
|
|
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`
|