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.
- package/CHANGELOG.md +53 -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/agentic/subagent-generation.md +8 -6
- package/templates/commands/done.md +57 -258
- package/templates/commands/now.md +72 -277
- package/templates/commands/ship.md +55 -261
- package/templates/commands/sync.md +7 -7
- 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`
|
|
@@ -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
|
|
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 {
|
|
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: `{
|
|
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: `{
|
|
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: `{
|
|
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 `{
|
|
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
|
-
{
|
|
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
|