@howlil/ez-agents 3.4.1 → 3.5.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/LICENSE +21 -21
- package/README.md +84 -20
- package/agents/ez-observer-agent.md +260 -0
- package/agents/ez-release-agent.md +333 -0
- package/agents/ez-requirements-agent.md +377 -0
- package/agents/ez-scrum-master-agent.md +242 -0
- package/agents/ez-tech-lead-agent.md +267 -0
- package/bin/install.js +3221 -3230
- package/commands/ez/arch-review.md +102 -0
- package/commands/ez/execute-phase.md +11 -0
- package/commands/ez/export-session.md +79 -0
- package/commands/ez/gather-requirements.md +117 -0
- package/commands/ez/git-workflow.md +72 -0
- package/commands/ez/hotfix.md +120 -0
- package/commands/ez/import-session.md +82 -0
- package/commands/ez/join-discord.md +18 -18
- package/commands/ez/list-sessions.md +96 -0
- package/commands/ez/package-manager.md +316 -0
- package/commands/ez/plan-phase.md +9 -1
- package/commands/ez/preflight.md +79 -0
- package/commands/ez/progress.md +13 -1
- package/commands/ez/release.md +153 -0
- package/commands/ez/resume.md +107 -0
- package/commands/ez/standup.md +85 -0
- package/ez-agents/bin/ez-tools.cjs +1095 -716
- package/ez-agents/bin/lib/assistant-adapter.cjs +264 -264
- package/ez-agents/bin/lib/audit-exec.cjs +7 -2
- package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
- package/ez-agents/bin/lib/circuit-breaker.cjs +118 -118
- package/ez-agents/bin/lib/config.cjs +190 -190
- package/ez-agents/bin/lib/content-scanner.cjs +238 -0
- package/ez-agents/bin/lib/context-cache.cjs +154 -0
- package/ez-agents/bin/lib/context-errors.cjs +71 -0
- package/ez-agents/bin/lib/context-manager.cjs +220 -0
- package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
- package/ez-agents/bin/lib/file-access.cjs +207 -0
- package/ez-agents/bin/lib/file-lock.cjs +236 -236
- package/ez-agents/bin/lib/frontmatter.cjs +299 -299
- package/ez-agents/bin/lib/fs-utils.cjs +153 -153
- package/ez-agents/bin/lib/git-errors.cjs +83 -0
- package/ez-agents/bin/lib/git-utils.cjs +118 -0
- package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
- package/ez-agents/bin/lib/index.cjs +157 -113
- package/ez-agents/bin/lib/init.cjs +757 -757
- package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
- package/ez-agents/bin/lib/logger.cjs +124 -124
- package/ez-agents/bin/lib/memory-compression.cjs +256 -0
- package/ez-agents/bin/lib/metrics-tracker.cjs +406 -0
- package/ez-agents/bin/lib/milestone.cjs +241 -241
- package/ez-agents/bin/lib/model-provider.cjs +241 -241
- package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
- package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
- package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
- package/ez-agents/bin/lib/phase.cjs +925 -925
- package/ez-agents/bin/lib/planning-write.cjs +107 -107
- package/ez-agents/bin/lib/release-validator.cjs +614 -0
- package/ez-agents/bin/lib/retry.cjs +119 -119
- package/ez-agents/bin/lib/roadmap.cjs +306 -306
- package/ez-agents/bin/lib/safe-exec.cjs +128 -128
- package/ez-agents/bin/lib/safe-path.cjs +130 -130
- package/ez-agents/bin/lib/session-chain.cjs +304 -0
- package/ez-agents/bin/lib/session-errors.cjs +81 -0
- package/ez-agents/bin/lib/session-export.cjs +251 -0
- package/ez-agents/bin/lib/session-import.cjs +262 -0
- package/ez-agents/bin/lib/session-manager.cjs +280 -0
- package/ez-agents/bin/lib/state.cjs +736 -736
- package/ez-agents/bin/lib/temp-file.cjs +239 -239
- package/ez-agents/bin/lib/template.cjs +223 -223
- package/ez-agents/bin/lib/test-file-lock.cjs +112 -112
- package/ez-agents/bin/lib/test-graceful.cjs +93 -93
- package/ez-agents/bin/lib/test-logger.cjs +60 -60
- package/ez-agents/bin/lib/test-safe-exec.cjs +38 -38
- package/ez-agents/bin/lib/test-safe-path.cjs +33 -33
- package/ez-agents/bin/lib/test-temp-file.cjs +125 -125
- package/ez-agents/bin/lib/tier-manager.cjs +428 -0
- package/ez-agents/bin/lib/timeout-exec.cjs +63 -63
- package/ez-agents/bin/lib/url-fetch.cjs +170 -0
- package/ez-agents/bin/lib/verify.cjs +15 -1
- package/ez-agents/references/checkpoints.md +776 -776
- package/ez-agents/references/continuation-format.md +249 -249
- package/ez-agents/references/metrics-schema.md +118 -0
- package/ez-agents/references/planning-config.md +140 -0
- package/ez-agents/references/questioning.md +162 -162
- package/ez-agents/references/tdd.md +263 -263
- package/ez-agents/references/tier-strategy.md +103 -0
- package/ez-agents/templates/bdd-feature.md +173 -0
- package/ez-agents/templates/codebase/concerns.md +310 -310
- package/ez-agents/templates/codebase/conventions.md +307 -307
- package/ez-agents/templates/codebase/integrations.md +280 -280
- package/ez-agents/templates/codebase/stack.md +186 -186
- package/ez-agents/templates/codebase/testing.md +480 -480
- package/ez-agents/templates/config.json +37 -37
- package/ez-agents/templates/continue-here.md +78 -78
- package/ez-agents/templates/discussion.md +68 -0
- package/ez-agents/templates/incident-runbook.md +205 -0
- package/ez-agents/templates/milestone-archive.md +123 -123
- package/ez-agents/templates/milestone.md +115 -115
- package/ez-agents/templates/release-checklist.md +133 -0
- package/ez-agents/templates/requirements.md +231 -231
- package/ez-agents/templates/research-project/ARCHITECTURE.md +204 -204
- package/ez-agents/templates/research-project/FEATURES.md +147 -147
- package/ez-agents/templates/research-project/PITFALLS.md +200 -200
- package/ez-agents/templates/research-project/STACK.md +120 -120
- package/ez-agents/templates/research-project/SUMMARY.md +170 -170
- package/ez-agents/templates/retrospective.md +54 -54
- package/ez-agents/templates/roadmap.md +202 -202
- package/ez-agents/templates/rollback-plan.md +201 -0
- package/ez-agents/templates/summary-minimal.md +41 -41
- package/ez-agents/templates/summary-standard.md +48 -48
- package/ez-agents/templates/summary.md +248 -248
- package/ez-agents/templates/user-setup.md +311 -311
- package/ez-agents/templates/verification-report.md +322 -322
- package/ez-agents/workflows/add-phase.md +112 -112
- package/ez-agents/workflows/add-tests.md +351 -351
- package/ez-agents/workflows/add-todo.md +158 -158
- package/ez-agents/workflows/arch-review.md +54 -0
- package/ez-agents/workflows/audit-milestone.md +332 -332
- package/ez-agents/workflows/autonomous.md +131 -30
- package/ez-agents/workflows/check-todos.md +177 -177
- package/ez-agents/workflows/cleanup.md +152 -152
- package/ez-agents/workflows/complete-milestone.md +766 -766
- package/ez-agents/workflows/diagnose-issues.md +219 -219
- package/ez-agents/workflows/discovery-phase.md +289 -289
- package/ez-agents/workflows/discuss-phase.md +762 -762
- package/ez-agents/workflows/execute-phase.md +513 -468
- package/ez-agents/workflows/execute-plan.md +483 -483
- package/ez-agents/workflows/export-session.md +255 -0
- package/ez-agents/workflows/gather-requirements.md +206 -0
- package/ez-agents/workflows/health.md +159 -159
- package/ez-agents/workflows/help.md +584 -492
- package/ez-agents/workflows/hotfix.md +291 -0
- package/ez-agents/workflows/import-session.md +303 -0
- package/ez-agents/workflows/insert-phase.md +130 -130
- package/ez-agents/workflows/list-phase-assumptions.md +178 -178
- package/ez-agents/workflows/map-codebase.md +316 -316
- package/ez-agents/workflows/new-milestone.md +339 -10
- package/ez-agents/workflows/new-project.md +293 -299
- package/ez-agents/workflows/node-repair.md +92 -92
- package/ez-agents/workflows/pause-work.md +122 -122
- package/ez-agents/workflows/plan-milestone-gaps.md +274 -274
- package/ez-agents/workflows/plan-phase.md +673 -651
- package/ez-agents/workflows/progress.md +372 -382
- package/ez-agents/workflows/quick.md +610 -610
- package/ez-agents/workflows/release.md +253 -0
- package/ez-agents/workflows/remove-phase.md +155 -155
- package/ez-agents/workflows/research-phase.md +74 -74
- package/ez-agents/workflows/resume-project.md +307 -307
- package/ez-agents/workflows/resume-session.md +215 -0
- package/ez-agents/workflows/set-profile.md +81 -81
- package/ez-agents/workflows/settings.md +242 -242
- package/ez-agents/workflows/standup.md +64 -0
- package/ez-agents/workflows/stats.md +57 -57
- package/ez-agents/workflows/transition.md +544 -544
- package/ez-agents/workflows/ui-phase.md +290 -290
- package/ez-agents/workflows/ui-review.md +157 -157
- package/ez-agents/workflows/update.md +320 -320
- package/ez-agents/workflows/validate-phase.md +167 -167
- package/ez-agents/workflows/verify-phase.md +243 -243
- package/ez-agents/workflows/verify-work.md +584 -584
- package/package.json +10 -4
- package/scripts/build-hooks.js +43 -43
- package/scripts/run-tests.cjs +29 -29
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Orchestrate tier-aware production releases. Validates state, runs security gates, evaluates tier checklist, creates release branch, generates changelog, bumps version, writes rollback plan, and tags the release.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<process>
|
|
6
|
+
|
|
7
|
+
<auto_invoke>
|
|
8
|
+
Check for --no-auto in ARGUMENTS. If present, skip this section and proceed to step 1.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
SMART_ORCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get smart_orchestration.enabled 2>/dev/null || echo "true")
|
|
12
|
+
```
|
|
13
|
+
If `SMART_ORCH` is `"false"`: skip, proceed to step 1.
|
|
14
|
+
|
|
15
|
+
**Tier-based pre-flight:**
|
|
16
|
+
Parse the tier argument from ARGUMENTS (mvp / medium / enterprise).
|
|
17
|
+
|
|
18
|
+
- **mvp**: No pre-flight auto-invocations. Proceed directly to step 1.
|
|
19
|
+
- **medium**: Check if a VERIFICATION.md from verify-work already exists for the current phase. If not:
|
|
20
|
+
→ Display: `[auto] Running verify-work before medium release...`
|
|
21
|
+
→ Invoke: Skill(ez:verify-work)
|
|
22
|
+
→ Continue to step 1.
|
|
23
|
+
- **enterprise**: Run in sequence:
|
|
24
|
+
→ Display: `[auto] Running verify-work...`
|
|
25
|
+
→ Invoke: Skill(ez:verify-work)
|
|
26
|
+
→ Display: `[auto] Running audit-milestone...`
|
|
27
|
+
→ Invoke: Skill(ez:audit-milestone)
|
|
28
|
+
→ Display: `[auto] Running arch-review...`
|
|
29
|
+
→ Invoke: Skill(ez:arch-review)
|
|
30
|
+
→ Continue to step 1.
|
|
31
|
+
|
|
32
|
+
All auto-invocations are prefixed with `[auto]` in output. Override with `--no-auto` to skip all pre-invocations.
|
|
33
|
+
</auto_invoke>
|
|
34
|
+
|
|
35
|
+
## 1. Initialize
|
|
36
|
+
|
|
37
|
+
Parse $ARGUMENTS:
|
|
38
|
+
- Command: `release` or `preflight`
|
|
39
|
+
- Tier: `mvp`, `medium`, or `enterprise`
|
|
40
|
+
- Version: semver string (e.g., `1.0.0`)
|
|
41
|
+
|
|
42
|
+
**If missing tier or version (for release command):**
|
|
43
|
+
```
|
|
44
|
+
Usage: /ez:release <tier> <version>
|
|
45
|
+
/ez:release preflight <tier>
|
|
46
|
+
|
|
47
|
+
Examples:
|
|
48
|
+
/ez:release mvp v1.0.0
|
|
49
|
+
/ez:release medium v1.5.0
|
|
50
|
+
/ez:release enterprise v2.0.0
|
|
51
|
+
/ez:release preflight medium
|
|
52
|
+
```
|
|
53
|
+
Exit.
|
|
54
|
+
|
|
55
|
+
**Normalize version:** Strip leading `v` if present (e.g., `v1.0.0` → `1.0.0`).
|
|
56
|
+
|
|
57
|
+
**Load tier config:**
|
|
58
|
+
```bash
|
|
59
|
+
TIER_CONFIG=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" tier-config "${TARGET_TIER}" 2>/dev/null)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Display banner:
|
|
63
|
+
```
|
|
64
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
65
|
+
EZ ► RELEASE v{version} — {TIER} TIER
|
|
66
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 2. Validate Semver
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
echo "${VERSION}" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**If invalid:** Error — "Version must be semver (X.Y.Z). Got: {version}"
|
|
76
|
+
|
|
77
|
+
## 3. Check Current State
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Uncommitted changes
|
|
81
|
+
git status --short
|
|
82
|
+
|
|
83
|
+
# Current branch
|
|
84
|
+
git branch --show-current
|
|
85
|
+
|
|
86
|
+
# Current version
|
|
87
|
+
CURRENT=$(node -e "console.log(require('./package.json').version)" 2>/dev/null || echo "0.0.0")
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**If uncommitted changes:** Error — "Commit or stash all changes before releasing"
|
|
91
|
+
|
|
92
|
+
## 4. Run Security Gates
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
echo "Running security gates..."
|
|
96
|
+
|
|
97
|
+
# Gate 1: No secrets in tracked files
|
|
98
|
+
SECRET_HITS=$(git grep -i -E "(api[_-]?key|password|secret)['\"]?\s*[=:]\s*['\"]?[a-zA-Z0-9+/]{20,}" HEAD 2>/dev/null | \
|
|
99
|
+
grep -v "example\|placeholder\|your-key\|process\.env\|env\.\|config\.\|getenv" | wc -l)
|
|
100
|
+
|
|
101
|
+
# Gate 2: npm audit
|
|
102
|
+
npm audit --audit-level=critical 2>/dev/null
|
|
103
|
+
AUDIT_EXIT=$?
|
|
104
|
+
|
|
105
|
+
# Gate 3: Production TODOs
|
|
106
|
+
PROD_TODOS=$(grep -rn "TODO\|FIXME\|HACK" src/ --include="*.ts" --include="*.js" --include="*.py" 2>/dev/null | \
|
|
107
|
+
grep -v "test\|spec\|__test__\|\.test\." | wc -l)
|
|
108
|
+
|
|
109
|
+
# Gate 4: .env in .gitignore
|
|
110
|
+
grep -q "^\.env" .gitignore 2>/dev/null && ENV_SAFE=true || ENV_SAFE=false
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Security gate results:
|
|
114
|
+
```
|
|
115
|
+
Security Gates:
|
|
116
|
+
✓/✗ No secrets in committed files ({SECRET_HITS} found)
|
|
117
|
+
✓/✗ npm audit clean (exit {AUDIT_EXIT})
|
|
118
|
+
✓/✗ No production TODOs ({PROD_TODOS} found)
|
|
119
|
+
✓/✗ .env in .gitignore
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Hard stop:** If SECRET_HITS > 0 → "BLOCKED: Secrets found in committed files. Remove before releasing."
|
|
123
|
+
**Hard stop:** If AUDIT_EXIT is non-zero → "BLOCKED: Critical vulnerabilities found. Run npm audit fix."
|
|
124
|
+
|
|
125
|
+
## 5. Run Tier Checklist
|
|
126
|
+
|
|
127
|
+
Load checklist template from `~/.claude/ez-agents/templates/release-checklist.md`.
|
|
128
|
+
|
|
129
|
+
Run automated checks for the target tier:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" release check-tier "${TARGET_TIER}"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Display checklist results with pass/fail/skip for each item.
|
|
136
|
+
|
|
137
|
+
**If `preflight` command:** Display checklist results and exit here.
|
|
138
|
+
|
|
139
|
+
## 6. Check Coverage (if test coverage available)
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Try to find coverage report
|
|
143
|
+
COVERAGE=$(cat coverage/coverage-summary.json 2>/dev/null | jq '.total.lines.pct // 0')
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Coverage thresholds by tier:
|
|
147
|
+
- mvp: 60%
|
|
148
|
+
- medium: 80%
|
|
149
|
+
- enterprise: 95%
|
|
150
|
+
|
|
151
|
+
**If below threshold:** Warning (not hard blocker — tests may not be configured).
|
|
152
|
+
|
|
153
|
+
## 7. Spawn Release Agent
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
157
|
+
◆ Spawning release agent...
|
|
158
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Release agent prompt:
|
|
162
|
+
|
|
163
|
+
```markdown
|
|
164
|
+
<objective>
|
|
165
|
+
Create a {TARGET_TIER} tier release v{VERSION}.
|
|
166
|
+
</objective>
|
|
167
|
+
|
|
168
|
+
<release_config>
|
|
169
|
+
Tier: {TARGET_TIER}
|
|
170
|
+
Version: {VERSION}
|
|
171
|
+
Current version: {CURRENT_VERSION}
|
|
172
|
+
</release_config>
|
|
173
|
+
|
|
174
|
+
<files_to_read>
|
|
175
|
+
- package.json (current version and scripts)
|
|
176
|
+
- CHANGELOG.md (if exists — append new entry)
|
|
177
|
+
- .planning/config.json (release tier config)
|
|
178
|
+
- ~/.claude/ez-agents/templates/release-checklist.md (checklist template)
|
|
179
|
+
- ~/.claude/ez-agents/templates/rollback-plan.md (rollback template)
|
|
180
|
+
</files_to_read>
|
|
181
|
+
|
|
182
|
+
<security_gate_results>
|
|
183
|
+
{security gate results from step 4}
|
|
184
|
+
</security_gate_results>
|
|
185
|
+
|
|
186
|
+
<checklist_results>
|
|
187
|
+
{checklist results from step 5}
|
|
188
|
+
</checklist_results>
|
|
189
|
+
|
|
190
|
+
<tasks>
|
|
191
|
+
1. Create release branch (per tier: trunk | github-flow | gitflow)
|
|
192
|
+
2. Generate changelog from git log since last tag
|
|
193
|
+
3. Bump version in package.json to {VERSION}
|
|
194
|
+
4. Create rollback plan in .planning/releases/v{VERSION}-ROLLBACK-PLAN.md
|
|
195
|
+
5. Commit release artifacts
|
|
196
|
+
6. Tag v{VERSION}
|
|
197
|
+
7. Report production readiness score
|
|
198
|
+
</tasks>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
Task(
|
|
203
|
+
prompt=release_prompt,
|
|
204
|
+
subagent_type="ez-release-agent",
|
|
205
|
+
model="{planner_model from init}"
|
|
206
|
+
)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## 8. Handle Agent Return
|
|
210
|
+
|
|
211
|
+
**`## RELEASE COMPLETE`:**
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
215
|
+
EZ ► RELEASE v{version} READY ✓
|
|
216
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
217
|
+
|
|
218
|
+
{agent summary}
|
|
219
|
+
|
|
220
|
+
### To Ship
|
|
221
|
+
git push origin {branch} && git push origin v{version}
|
|
222
|
+
|
|
223
|
+
### Rollback Plan
|
|
224
|
+
.planning/releases/v{version}-ROLLBACK-PLAN.md
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**If blocked:**
|
|
228
|
+
```
|
|
229
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
230
|
+
EZ ► RELEASE BLOCKED
|
|
231
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
232
|
+
|
|
233
|
+
{blocker details}
|
|
234
|
+
|
|
235
|
+
Fix the above issues then re-run: /ez:release {tier} v{version}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
</process>
|
|
239
|
+
|
|
240
|
+
<success_criteria>
|
|
241
|
+
- [ ] Tier and version validated
|
|
242
|
+
- [ ] Uncommitted changes check passed
|
|
243
|
+
- [ ] All security gates run (fail on hard blockers)
|
|
244
|
+
- [ ] Tier checklist evaluated
|
|
245
|
+
- [ ] Coverage checked against tier threshold
|
|
246
|
+
- [ ] ez-release-agent spawned with full context
|
|
247
|
+
- [ ] Release branch created per tier strategy
|
|
248
|
+
- [ ] Changelog updated
|
|
249
|
+
- [ ] Version bumped in package.json
|
|
250
|
+
- [ ] Rollback plan written
|
|
251
|
+
- [ ] Tag created
|
|
252
|
+
- [ ] User sees push instructions and production readiness score
|
|
253
|
+
</success_criteria>
|
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
<purpose>
|
|
2
|
-
Remove an unstarted future phase from the project roadmap, delete its directory, renumber all subsequent phases to maintain a clean linear sequence, and commit the change. The git commit serves as the historical record of removal.
|
|
3
|
-
</purpose>
|
|
4
|
-
|
|
5
|
-
<required_reading>
|
|
6
|
-
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
-
</required_reading>
|
|
8
|
-
|
|
9
|
-
<process>
|
|
10
|
-
|
|
11
|
-
<step name="parse_arguments">
|
|
12
|
-
Parse the command arguments:
|
|
13
|
-
- Argument is the phase number to remove (integer or decimal)
|
|
14
|
-
- Example: `/ez:remove-phase 17` → phase = 17
|
|
15
|
-
- Example: `/ez:remove-phase 16.1` → phase = 16.1
|
|
16
|
-
|
|
17
|
-
If no argument provided:
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
ERROR: Phase number required
|
|
21
|
-
Usage: /ez:remove-phase <phase-number>
|
|
22
|
-
Example: /ez:remove-phase 17
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Exit.
|
|
26
|
-
</step>
|
|
27
|
-
|
|
28
|
-
<step name="init_context">
|
|
29
|
-
Load phase operation context:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init phase-op "${target}")
|
|
33
|
-
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Extract: `phase_found`, `phase_dir`, `phase_number`, `commit_docs`, `roadmap_exists`.
|
|
37
|
-
|
|
38
|
-
Also read STATE.md and ROADMAP.md content for parsing current position.
|
|
39
|
-
</step>
|
|
40
|
-
|
|
41
|
-
<step name="validate_future_phase">
|
|
42
|
-
Verify the phase is a future phase (not started):
|
|
43
|
-
|
|
44
|
-
1. Compare target phase to current phase from STATE.md
|
|
45
|
-
2. Target must be > current phase number
|
|
46
|
-
|
|
47
|
-
If target <= current phase:
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
ERROR: Cannot remove Phase {target}
|
|
51
|
-
|
|
52
|
-
Only future phases can be removed:
|
|
53
|
-
- Current phase: {current}
|
|
54
|
-
- Phase {target} is current or completed
|
|
55
|
-
|
|
56
|
-
To abandon current work, use /ez:pause-work instead.
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Exit.
|
|
60
|
-
</step>
|
|
61
|
-
|
|
62
|
-
<step name="confirm_removal">
|
|
63
|
-
Present removal summary and confirm:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
Removing Phase {target}: {Name}
|
|
67
|
-
|
|
68
|
-
This will:
|
|
69
|
-
- Delete: .planning/phases/{target}-{slug}/
|
|
70
|
-
- Renumber all subsequent phases
|
|
71
|
-
- Update: ROADMAP.md, STATE.md
|
|
72
|
-
|
|
73
|
-
Proceed? (y/n)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Wait for confirmation.
|
|
77
|
-
</step>
|
|
78
|
-
|
|
79
|
-
<step name="execute_removal">
|
|
80
|
-
**Delegate the entire removal operation to ez-tools:**
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
RESULT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase remove "${target}")
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
If the phase has executed plans (SUMMARY.md files), ez-tools will error. Use `--force` only if the user confirms:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
RESULT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase remove "${target}" --force)
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
The CLI handles:
|
|
93
|
-
- Deleting the phase directory
|
|
94
|
-
- Renumbering all subsequent directories (in reverse order to avoid conflicts)
|
|
95
|
-
- Renaming all files inside renumbered directories (PLAN.md, SUMMARY.md, etc.)
|
|
96
|
-
- Updating ROADMAP.md (removing section, renumbering all phase references, updating dependencies)
|
|
97
|
-
- Updating STATE.md (decrementing phase count)
|
|
98
|
-
|
|
99
|
-
Extract from result: `removed`, `directory_deleted`, `renamed_directories`, `renamed_files`, `roadmap_updated`, `state_updated`.
|
|
100
|
-
</step>
|
|
101
|
-
|
|
102
|
-
<step name="commit">
|
|
103
|
-
Stage and commit the removal:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "chore: remove phase {target} ({original-phase-name})" --files .planning/
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
The commit message preserves the historical record of what was removed.
|
|
110
|
-
</step>
|
|
111
|
-
|
|
112
|
-
<step name="completion">
|
|
113
|
-
Present completion summary:
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
Phase {target} ({original-name}) removed.
|
|
117
|
-
|
|
118
|
-
Changes:
|
|
119
|
-
- Deleted: .planning/phases/{target}-{slug}/
|
|
120
|
-
- Renumbered: {N} directories and {M} files
|
|
121
|
-
- Updated: ROADMAP.md, STATE.md
|
|
122
|
-
- Committed: chore: remove phase {target} ({original-name})
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## What's Next
|
|
127
|
-
|
|
128
|
-
Would you like to:
|
|
129
|
-
- `/ez:progress` — see updated roadmap status
|
|
130
|
-
- Continue with current phase
|
|
131
|
-
- Review roadmap
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
```
|
|
135
|
-
</step>
|
|
136
|
-
|
|
137
|
-
</process>
|
|
138
|
-
|
|
139
|
-
<anti_patterns>
|
|
140
|
-
|
|
141
|
-
- Don't remove completed phases (have SUMMARY.md files) without --force
|
|
142
|
-
- Don't remove current or past phases
|
|
143
|
-
- Don't manually renumber — use `ez-tools phase remove` which handles all renumbering
|
|
144
|
-
- Don't add "removed phase" notes to STATE.md — git commit is the record
|
|
145
|
-
- Don't modify completed phase directories
|
|
146
|
-
</anti_patterns>
|
|
147
|
-
|
|
148
|
-
<success_criteria>
|
|
149
|
-
Phase removal is complete when:
|
|
150
|
-
|
|
151
|
-
- [ ] Target phase validated as future/unstarted
|
|
152
|
-
- [ ] `ez-tools phase remove` executed successfully
|
|
153
|
-
- [ ] Changes committed with descriptive message
|
|
154
|
-
- [ ] User informed of changes
|
|
155
|
-
</success_criteria>
|
|
1
|
+
<purpose>
|
|
2
|
+
Remove an unstarted future phase from the project roadmap, delete its directory, renumber all subsequent phases to maintain a clean linear sequence, and commit the change. The git commit serves as the historical record of removal.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="parse_arguments">
|
|
12
|
+
Parse the command arguments:
|
|
13
|
+
- Argument is the phase number to remove (integer or decimal)
|
|
14
|
+
- Example: `/ez:remove-phase 17` → phase = 17
|
|
15
|
+
- Example: `/ez:remove-phase 16.1` → phase = 16.1
|
|
16
|
+
|
|
17
|
+
If no argument provided:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
ERROR: Phase number required
|
|
21
|
+
Usage: /ez:remove-phase <phase-number>
|
|
22
|
+
Example: /ez:remove-phase 17
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Exit.
|
|
26
|
+
</step>
|
|
27
|
+
|
|
28
|
+
<step name="init_context">
|
|
29
|
+
Load phase operation context:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init phase-op "${target}")
|
|
33
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Extract: `phase_found`, `phase_dir`, `phase_number`, `commit_docs`, `roadmap_exists`.
|
|
37
|
+
|
|
38
|
+
Also read STATE.md and ROADMAP.md content for parsing current position.
|
|
39
|
+
</step>
|
|
40
|
+
|
|
41
|
+
<step name="validate_future_phase">
|
|
42
|
+
Verify the phase is a future phase (not started):
|
|
43
|
+
|
|
44
|
+
1. Compare target phase to current phase from STATE.md
|
|
45
|
+
2. Target must be > current phase number
|
|
46
|
+
|
|
47
|
+
If target <= current phase:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
ERROR: Cannot remove Phase {target}
|
|
51
|
+
|
|
52
|
+
Only future phases can be removed:
|
|
53
|
+
- Current phase: {current}
|
|
54
|
+
- Phase {target} is current or completed
|
|
55
|
+
|
|
56
|
+
To abandon current work, use /ez:pause-work instead.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Exit.
|
|
60
|
+
</step>
|
|
61
|
+
|
|
62
|
+
<step name="confirm_removal">
|
|
63
|
+
Present removal summary and confirm:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Removing Phase {target}: {Name}
|
|
67
|
+
|
|
68
|
+
This will:
|
|
69
|
+
- Delete: .planning/phases/{target}-{slug}/
|
|
70
|
+
- Renumber all subsequent phases
|
|
71
|
+
- Update: ROADMAP.md, STATE.md
|
|
72
|
+
|
|
73
|
+
Proceed? (y/n)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Wait for confirmation.
|
|
77
|
+
</step>
|
|
78
|
+
|
|
79
|
+
<step name="execute_removal">
|
|
80
|
+
**Delegate the entire removal operation to ez-tools:**
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
RESULT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase remove "${target}")
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
If the phase has executed plans (SUMMARY.md files), ez-tools will error. Use `--force` only if the user confirms:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
RESULT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phase remove "${target}" --force)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The CLI handles:
|
|
93
|
+
- Deleting the phase directory
|
|
94
|
+
- Renumbering all subsequent directories (in reverse order to avoid conflicts)
|
|
95
|
+
- Renaming all files inside renumbered directories (PLAN.md, SUMMARY.md, etc.)
|
|
96
|
+
- Updating ROADMAP.md (removing section, renumbering all phase references, updating dependencies)
|
|
97
|
+
- Updating STATE.md (decrementing phase count)
|
|
98
|
+
|
|
99
|
+
Extract from result: `removed`, `directory_deleted`, `renamed_directories`, `renamed_files`, `roadmap_updated`, `state_updated`.
|
|
100
|
+
</step>
|
|
101
|
+
|
|
102
|
+
<step name="commit">
|
|
103
|
+
Stage and commit the removal:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "chore: remove phase {target} ({original-phase-name})" --files .planning/
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The commit message preserves the historical record of what was removed.
|
|
110
|
+
</step>
|
|
111
|
+
|
|
112
|
+
<step name="completion">
|
|
113
|
+
Present completion summary:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
Phase {target} ({original-name}) removed.
|
|
117
|
+
|
|
118
|
+
Changes:
|
|
119
|
+
- Deleted: .planning/phases/{target}-{slug}/
|
|
120
|
+
- Renumbered: {N} directories and {M} files
|
|
121
|
+
- Updated: ROADMAP.md, STATE.md
|
|
122
|
+
- Committed: chore: remove phase {target} ({original-name})
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## What's Next
|
|
127
|
+
|
|
128
|
+
Would you like to:
|
|
129
|
+
- `/ez:progress` — see updated roadmap status
|
|
130
|
+
- Continue with current phase
|
|
131
|
+
- Review roadmap
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
```
|
|
135
|
+
</step>
|
|
136
|
+
|
|
137
|
+
</process>
|
|
138
|
+
|
|
139
|
+
<anti_patterns>
|
|
140
|
+
|
|
141
|
+
- Don't remove completed phases (have SUMMARY.md files) without --force
|
|
142
|
+
- Don't remove current or past phases
|
|
143
|
+
- Don't manually renumber — use `ez-tools phase remove` which handles all renumbering
|
|
144
|
+
- Don't add "removed phase" notes to STATE.md — git commit is the record
|
|
145
|
+
- Don't modify completed phase directories
|
|
146
|
+
</anti_patterns>
|
|
147
|
+
|
|
148
|
+
<success_criteria>
|
|
149
|
+
Phase removal is complete when:
|
|
150
|
+
|
|
151
|
+
- [ ] Target phase validated as future/unstarted
|
|
152
|
+
- [ ] `ez-tools phase remove` executed successfully
|
|
153
|
+
- [ ] Changes committed with descriptive message
|
|
154
|
+
- [ ] User informed of changes
|
|
155
|
+
</success_criteria>
|