@cleocode/cleo 2026.3.2 → 2026.3.6
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/README.md +1 -3
- package/dist/cli/index.js +7381 -3507
- package/dist/cli/index.js.map +4 -4
- package/dist/mcp/index.js +5792 -2097
- package/dist/mcp/index.js.map +4 -4
- package/package.json +4 -4
- package/packages/ct-skills/index.js +1 -1
- package/packages/ct-skills/package.json +0 -2
- package/packages/ct-skills/profiles/core.json +1 -1
- package/packages/ct-skills/profiles/full.json +4 -5
- package/packages/ct-skills/profiles/minimal.json +3 -3
- package/packages/ct-skills/profiles/recommended.json +2 -2
- package/packages/ct-skills/provider-skills-map.json +97 -0
- package/packages/ct-skills/skills/_shared/skill-chaining-patterns.md +23 -26
- package/packages/ct-skills/skills/_shared/testing-framework-config.md +9 -9
- package/packages/ct-skills/skills/ct-cleo/SKILL.md +21 -1
- package/packages/ct-skills/skills/ct-dev-workflow/SKILL.md +1 -1
- package/packages/ct-skills/skills/ct-documentor/SKILL.md +1 -1
- package/packages/ct-skills/skills/ct-epic-architect/SKILL.md +1 -1
- package/packages/ct-skills/skills/ct-grade/SKILL.md +214 -0
- package/packages/ct-skills/skills/ct-orchestrator/SKILL.md +119 -43
- package/packages/ct-skills/skills/ct-orchestrator/orchestrator-prompt.txt +17 -0
- package/packages/ct-skills/skills/ct-orchestrator/references/orchestrator-patterns.md +1 -1
- package/packages/ct-skills/skills/ct-research-agent/SKILL.md +1 -1
- package/packages/ct-skills/skills/ct-spec-writer/SKILL.md +1 -1
- package/packages/ct-skills/skills/ct-task-executor/SKILL.md +1 -1
- package/packages/ct-skills/skills/ct-validator/SKILL.md +1 -1
- package/packages/ct-skills/skills/manifest.json +217 -947
- package/packages/ct-skills/skills.json +244 -3
- package/templates/CLEO-INJECTION.md +37 -0
- package/templates/README.md +4 -4
- package/templates/cleo-gitignore +3 -11
- package/templates/git-hooks/pre-commit +1 -1
- package/packages/ct-skills/protocols/agent-protocol.md +0 -260
- package/packages/ct-skills/protocols/artifact-publish.md +0 -587
- package/packages/ct-skills/protocols/consensus.md +0 -309
- package/packages/ct-skills/protocols/contribution.md +0 -375
- package/packages/ct-skills/protocols/decomposition.md +0 -352
- package/packages/ct-skills/protocols/implementation.md +0 -344
- package/packages/ct-skills/protocols/provenance.md +0 -600
- package/packages/ct-skills/protocols/release.md +0 -635
- package/packages/ct-skills/protocols/research.md +0 -248
- package/packages/ct-skills/protocols/specification.md +0 -287
- package/packages/ct-skills/protocols/testing.md +0 -346
- package/packages/ct-skills/protocols/validation.md +0 -229
- package/packages/ct-skills/skills/ct-gitbook/SKILL.md +0 -516
- package/packages/ct-skills/skills/ct-gitbook/assets/SUMMARY.md +0 -28
- package/packages/ct-skills/skills/ct-gitbook/assets/gitbook.yaml +0 -14
- package/packages/ct-skills/skills/ct-gitbook/references/api-sdk.md +0 -318
- package/packages/ct-skills/skills/ct-gitbook/references/auth-sso.md +0 -208
- package/packages/ct-skills/skills/ct-gitbook/references/change-requests.md +0 -169
- package/packages/ct-skills/skills/ct-gitbook/references/content-blocks.md +0 -230
- package/packages/ct-skills/skills/ct-gitbook/references/docs-sites.md +0 -202
- package/packages/ct-skills/skills/ct-gitbook/references/git-sync.md +0 -175
- package/packages/ct-skills/skills/ct-gitbook/references/llm-ready.md +0 -178
- package/packages/ct-skills/skills/ct-gitbook/references/migration.md +0 -263
- package/packages/ct-skills/skills/ct-library-implementer-bash/SKILL.md +0 -316
- package/packages/ct-skills/skills/ct-skill-lookup/SKILL.md +0 -179
- package/packages/ct-skills/skills/ct-test-writer-bats/SKILL.md +0 -347
- package/packages/ct-skills/skills/railway-platform/SKILL.md +0 -506
- package/packages/ct-skills/skills/railway-platform/_shared/scripts/railway-api.sh +0 -180
- package/packages/ct-skills/skills/railway-platform/_shared/scripts/railway-common.sh +0 -262
- package/packages/ct-skills/skills/railway-platform/references/01-getting-started.md +0 -149
- package/packages/ct-skills/skills/railway-platform/references/02-projects.md +0 -116
- package/packages/ct-skills/skills/railway-platform/references/03-services.md +0 -147
- package/packages/ct-skills/skills/railway-platform/references/04-deployments.md +0 -210
- package/packages/ct-skills/skills/railway-platform/references/05-databases.md +0 -142
- package/packages/ct-skills/skills/railway-platform/references/06-environments.md +0 -261
- package/packages/ct-skills/skills/railway-platform/references/07-domains.md +0 -139
- package/packages/ct-skills/skills/railway-platform/references/08-volumes.md +0 -533
- package/packages/ct-skills/skills/railway-platform/references/09-networking.md +0 -592
- package/packages/ct-skills/skills/railway-platform/references/10-cron.md +0 -488
- package/packages/ct-skills/skills/railway-platform/references/11-functions.md +0 -170
- package/packages/ct-skills/skills/railway-platform/references/12-monorepo.md +0 -294
- package/packages/ct-skills/skills/railway-platform/references/13-troubleshooting.md +0 -335
- package/packages/ct-skills/skills/railway-platform/references/14-railway-metal.md +0 -197
|
@@ -1,635 +0,0 @@
|
|
|
1
|
-
# Release Protocol
|
|
2
|
-
|
|
3
|
-
**Provenance**: @task T3155, @epic T3147
|
|
4
|
-
**Version**: 2.1.0
|
|
5
|
-
**Type**: Conditional Protocol
|
|
6
|
-
**Max Active**: 3 protocols (including base)
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Trigger Conditions
|
|
11
|
-
|
|
12
|
-
This protocol activates when the task involves:
|
|
13
|
-
|
|
14
|
-
| Trigger | Keywords | Context |
|
|
15
|
-
|---------|----------|---------|
|
|
16
|
-
| Version | "release", "version", "v1.x.x" | Version management |
|
|
17
|
-
| Publish | "publish", "deploy", "ship" | Distribution |
|
|
18
|
-
| Changelog | "changelog", "release notes" | Documentation |
|
|
19
|
-
| Tag | "tag", "milestone", "GA" | Version marking |
|
|
20
|
-
|
|
21
|
-
**Explicit Override**: `--protocol release` flag on task creation.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Requirements (RFC 2119)
|
|
26
|
-
|
|
27
|
-
### MUST
|
|
28
|
-
|
|
29
|
-
| Requirement | Description |
|
|
30
|
-
|-------------|-------------|
|
|
31
|
-
| RLSE-001 | MUST follow semantic versioning (semver) |
|
|
32
|
-
| RLSE-002 | MUST update changelog with all changes |
|
|
33
|
-
| RLSE-003 | MUST pass all validation gates before release |
|
|
34
|
-
| RLSE-004 | MUST tag release in version control |
|
|
35
|
-
| RLSE-005 | MUST document breaking changes with migration path |
|
|
36
|
-
| RLSE-006 | MUST verify version consistency across files |
|
|
37
|
-
| RLSE-007 | MUST set `agent_type: "documentation"` in manifest |
|
|
38
|
-
|
|
39
|
-
### SHOULD
|
|
40
|
-
|
|
41
|
-
| Requirement | Description |
|
|
42
|
-
|-------------|-------------|
|
|
43
|
-
| RLSE-010 | SHOULD include upgrade instructions |
|
|
44
|
-
| RLSE-011 | SHOULD verify documentation is current |
|
|
45
|
-
| RLSE-012 | SHOULD test installation process |
|
|
46
|
-
| RLSE-013 | SHOULD create backup before release |
|
|
47
|
-
| RLSE-014 | SHOULD run test suite for major/minor releases (use `--run-tests`) |
|
|
48
|
-
| RLSE-015 | SHOULD verify tests pass before tagging (opt-in to avoid timeout) |
|
|
49
|
-
|
|
50
|
-
### MAY
|
|
51
|
-
|
|
52
|
-
| Requirement | Description |
|
|
53
|
-
|-------------|-------------|
|
|
54
|
-
| RLSE-020 | MAY include performance benchmarks |
|
|
55
|
-
| RLSE-021 | MAY announce on communication channels |
|
|
56
|
-
| RLSE-022 | MAY batch minor fixes into single release |
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## State Machine
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
create → planned → active → released (immutable)
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
| Transition | Trigger | Condition |
|
|
67
|
-
|------------|---------|-----------|
|
|
68
|
-
| (none) → planned | `cleo release create <version>` | User action |
|
|
69
|
-
| planned → active | `cleo release ship <version>` (automatic) | Ship begins execution |
|
|
70
|
-
| active → released | `cleo release ship <version>` (automatic) | All steps complete |
|
|
71
|
-
|
|
72
|
-
The `active` state is automatic and transitional -- it is set internally during `ship` execution. Agents interact with `create` (→ planned) and `ship` (→ released). The `plan` command works on releases in `planned` or `active` status. Once `released`, the entry is **immutable** -- no task additions, no metadata changes.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Release Schema
|
|
77
|
-
|
|
78
|
-
Releases are stored as an array in `todo.json` under `project.releases`:
|
|
79
|
-
|
|
80
|
-
```json
|
|
81
|
-
{
|
|
82
|
-
"releaseDefinition": {
|
|
83
|
-
"required": ["version", "status", "createdAt"],
|
|
84
|
-
"properties": {
|
|
85
|
-
"version": { "type": "string", "pattern": "^v\\d+\\.\\d+\\.\\d+(-[a-z0-9.-]+)?$" },
|
|
86
|
-
"status": { "enum": ["planned", "active", "released"] },
|
|
87
|
-
"name": { "type": ["string", "null"], "maxLength": 100 },
|
|
88
|
-
"description": { "type": ["string", "null"], "maxLength": 500 },
|
|
89
|
-
"tasks": { "type": "array", "items": { "pattern": "^T\\d{3,}$" } },
|
|
90
|
-
"createdAt": { "format": "date-time" },
|
|
91
|
-
"targetDate": { "format": "date" },
|
|
92
|
-
"releasedAt": { "format": "date-time" },
|
|
93
|
-
"gitTag": { "type": ["string", "null"] },
|
|
94
|
-
"changelog": { "type": ["string", "null"] },
|
|
95
|
-
"notes": { "type": "array", "items": { "maxLength": 500 } }
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## CLI Commands (8 subcommands)
|
|
104
|
-
|
|
105
|
-
### `create`
|
|
106
|
-
|
|
107
|
-
Create a new planned release.
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
cleo release create <version> [--target-date DATE] [--tasks T001,T002] [--notes "text"]
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
| Flag | Type | Default | Description |
|
|
114
|
-
|------|------|---------|-------------|
|
|
115
|
-
| `--target-date` | DATE (YYYY-MM-DD) | null | Target release date |
|
|
116
|
-
| `--tasks` | string (comma-separated) | [] | Tasks to include |
|
|
117
|
-
| `--notes` | string | null | Release notes |
|
|
118
|
-
|
|
119
|
-
**Exit codes**: 0 (success), 51 (`E_RELEASE_EXISTS`), 53 (`E_INVALID_VERSION`)
|
|
120
|
-
|
|
121
|
-
**Behavior**: Creates a new release entry with status `planned`. Validates version is valid semver and doesn't already exist. Tasks are stored as an array; target date and notes are optional metadata.
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
### `plan`
|
|
126
|
-
|
|
127
|
-
Add or remove tasks from a release.
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
cleo release plan <version> [--tasks T001,T002] [--remove T003] [--notes "text"]
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
| Flag | Type | Default | Description |
|
|
134
|
-
|------|------|---------|-------------|
|
|
135
|
-
| `--tasks` | string (comma-separated) | — | Tasks to add (appends, deduplicates) |
|
|
136
|
-
| `--remove` | string | — | Task to remove |
|
|
137
|
-
| `--notes` | string | — | Update release notes |
|
|
138
|
-
|
|
139
|
-
**Exit codes**: 0 (success), 50 (`E_RELEASE_NOT_FOUND`), 52 (`E_RELEASE_LOCKED`)
|
|
140
|
-
|
|
141
|
-
**Behavior**: Modifies an existing release in `planned` or `active` status. The `--tasks` flag appends to existing tasks and deduplicates automatically. Calling `plan --tasks T001` then `plan --tasks T002` results in both tasks being included. Released entries are immutable and reject modification.
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
### `ship`
|
|
146
|
-
|
|
147
|
-
Mark a release as released. This is the primary release workflow command.
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
cleo release ship <version> [FLAGS]
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
| Flag | Type | Default | Description |
|
|
154
|
-
|------|------|---------|-------------|
|
|
155
|
-
| `--bump-version` | boolean | false | Bump VERSION file via `dev/bump-version.sh` |
|
|
156
|
-
| `--create-tag` | boolean | false | Create annotated git tag |
|
|
157
|
-
| `--force-tag` | boolean | false | Overwrite existing git tag (requires `--create-tag`) |
|
|
158
|
-
| `--push` | boolean | false | Push commits and tag to remote |
|
|
159
|
-
| `--no-changelog` | boolean | false | Skip changelog generation |
|
|
160
|
-
| `--no-commit` | boolean | false | Skip git commit (update files only) |
|
|
161
|
-
| `--run-tests` | boolean | false | Run test suite during validation (opt-in, slow) |
|
|
162
|
-
| `--skip-validation` | boolean | false | Skip all validation gates (emergency releases) |
|
|
163
|
-
| `--dry-run` | boolean | false | Preview what would happen without making changes |
|
|
164
|
-
| `--notes` | string | "" | Release notes |
|
|
165
|
-
| `--output` | string | CHANGELOG.md | Changelog output file |
|
|
166
|
-
|
|
167
|
-
**Exit codes**: 0 (success), 50 (`E_RELEASE_NOT_FOUND`), 52 (`E_RELEASE_LOCKED`), 54 (`E_VALIDATION_FAILED`), 55 (`E_VERSION_BUMP_FAILED`), 56 (`E_TAG_CREATION_FAILED`), 57 (`E_CHANGELOG_GENERATION_FAILED`), 58 (`E_TAG_EXISTS`)
|
|
168
|
-
|
|
169
|
-
**Ship Workflow** (10 steps):
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
1. Auto-populate release tasks (date window + label matching from todo.json)
|
|
173
|
-
2. Bump version (if --bump-version)
|
|
174
|
-
3. Ensure [Unreleased] section exists in CHANGELOG.md (creates if missing)
|
|
175
|
-
4. Generate changelog from task metadata via lib/changelog.sh (unless --no-changelog)
|
|
176
|
-
5. Validate changelog content is not empty (unless --no-changelog)
|
|
177
|
-
6. Append to CHANGELOG.md + generate platform-specific outputs (if configured)
|
|
178
|
-
7. Run validation gates (tests opt-in, schema, version, changelog)
|
|
179
|
-
8. Create release commit staging VERSION, README, CHANGELOG.md, platform docs, todo.json (unless --no-commit)
|
|
180
|
-
9. Create annotated tag with changelog/commit/description fallback (if --create-tag)
|
|
181
|
-
10. Push to remote (if --push)
|
|
182
|
-
11. Update release status to "released" in todo.json with releasedAt timestamp
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Steps 2-6 are conditional on flags. Step 7 is skippable with `--skip-validation`. The `--dry-run` flag previews all steps without executing.
|
|
186
|
-
|
|
187
|
-
**`changelog` vs `ship`**: The `changelog` subcommand generates and previews changelog content without modifying release state. The `ship` subcommand performs the full release workflow including changelog generation, git operations, and status transition.
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
### `changelog`
|
|
192
|
-
|
|
193
|
-
Generate changelog from release tasks without shipping.
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
cleo release changelog <version> [--output FILE]
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
| Flag | Type | Default | Description |
|
|
200
|
-
|------|------|---------|-------------|
|
|
201
|
-
| `--output` | string | — | Write changelog to file |
|
|
202
|
-
|
|
203
|
-
**Exit codes**: 0 (success), 50 (`E_RELEASE_NOT_FOUND`), 53 (`E_INVALID_VERSION`)
|
|
204
|
-
|
|
205
|
-
**Behavior**: Generates changelog content from task metadata (title, description, labels) for the specified release. Outputs to stdout by default. Use `--output` to write to a file. Does not modify release status. Useful for previewing changelog before shipping.
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
### `list`
|
|
210
|
-
|
|
211
|
-
List all releases.
|
|
212
|
-
|
|
213
|
-
```bash
|
|
214
|
-
cleo release list [--status STATUS] [--format FORMAT]
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
| Flag | Type | Default | Description |
|
|
218
|
-
|------|------|---------|-------------|
|
|
219
|
-
| `--status` | string | — | Filter by status (planned, active, released) |
|
|
220
|
-
| `--format` | text\|json | auto | Output format |
|
|
221
|
-
|
|
222
|
-
**Exit codes**: 0 (success)
|
|
223
|
-
|
|
224
|
-
**Behavior**: Lists all releases with version, status, target date, task count, and released timestamp. Supports JSON and text output. Color-coded by status: yellow=planned, cyan=active, green=released.
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
### `show`
|
|
229
|
-
|
|
230
|
-
Show details of a specific release.
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
cleo release show <version> [--format FORMAT]
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
| Flag | Type | Default | Description |
|
|
237
|
-
|------|------|---------|-------------|
|
|
238
|
-
| `--format` | text\|json | auto | Output format |
|
|
239
|
-
|
|
240
|
-
**Exit codes**: 0 (success), 50 (`E_RELEASE_NOT_FOUND`), 53 (`E_INVALID_VERSION`)
|
|
241
|
-
|
|
242
|
-
**Behavior**: Displays full details for a release including version, status, dates, tasks, notes, git tag, and changelog content.
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
### `init-ci`
|
|
247
|
-
|
|
248
|
-
Initialize CI/CD workflow configuration for automated releases.
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
cleo release init-ci [--platform PLATFORM] [--force] [--dry-run]
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
| Flag | Type | Default | Description |
|
|
255
|
-
|------|------|---------|-------------|
|
|
256
|
-
| `--platform` | string | from config | CI platform: `github-actions`, `gitlab-ci`, `circleci` |
|
|
257
|
-
| `--force` | boolean | false | Overwrite existing CI config file |
|
|
258
|
-
| `--dry-run` | boolean | false | Preview without writing files |
|
|
259
|
-
|
|
260
|
-
**Exit codes**: 0 (success), 72 (`E_CI_INIT_FAILED`)
|
|
261
|
-
|
|
262
|
-
**Behavior**: Generates CI/CD workflow configuration files from templates in `lib/release-ci.sh`. Platform is auto-detected from config or specified via `--platform`. Use `--force` to overwrite existing configuration files.
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
### `validate`
|
|
267
|
-
|
|
268
|
-
Validate release protocol compliance for a task.
|
|
269
|
-
|
|
270
|
-
```bash
|
|
271
|
-
cleo release validate <task-id> [--strict] [--format FORMAT]
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
| Flag | Type | Default | Description |
|
|
275
|
-
|------|------|---------|-------------|
|
|
276
|
-
| `--strict` | boolean | false | Enable strict validation mode |
|
|
277
|
-
| `--format` | text\|json | auto | Output format |
|
|
278
|
-
|
|
279
|
-
**Exit codes**: 0 (valid), 4 (`E_NOT_FOUND` -- manifest or task not found), 66 (protocol violation in strict mode)
|
|
280
|
-
|
|
281
|
-
**Behavior**: Validates a task's manifest entry against the release protocol. Checks for required fields, correct `agent_type`, semver compliance, and changelog presence. The `--strict` flag enforces stricter checks (e.g., all SHOULD requirements become violations). Outputs validation score (0-100) and violation details.
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
## Task Discovery (6-Filter Pipeline)
|
|
286
|
-
|
|
287
|
-
During `cleo release ship`, tasks are auto-discovered via `populate_release_tasks()`:
|
|
288
|
-
|
|
289
|
-
| Filter | Purpose |
|
|
290
|
-
|--------|---------|
|
|
291
|
-
| 1. `completedAt` | Must have completion timestamp |
|
|
292
|
-
| 2. Date window | Completed between previous and current release |
|
|
293
|
-
| 3. `status == "done"` | Must be done (not pending/active/blocked) |
|
|
294
|
-
| 4. `type != "epic"` | Excludes organizational epics |
|
|
295
|
-
| 5. Label match | Has version label, `changelog`, or `release` label |
|
|
296
|
-
| 6. Version exclusivity | Tasks with explicit version labels aren't claimed by other releases |
|
|
297
|
-
|
|
298
|
-
Tasks are also included if explicitly assigned via `cleo release plan --tasks T001,T002`.
|
|
299
|
-
|
|
300
|
-
---
|
|
301
|
-
|
|
302
|
-
## Validation Gates
|
|
303
|
-
|
|
304
|
-
| Gate | Check | Required | Notes |
|
|
305
|
-
|------|-------|----------|-------|
|
|
306
|
-
| Tests | All tests pass | SHOULD | Opt-in with `--run-tests` flag to avoid timeout |
|
|
307
|
-
| Schema | All schemas valid | MUST | Always enforced via `cleo validate` |
|
|
308
|
-
| Version | Version bumped correctly | MUST | If `--bump-version` used |
|
|
309
|
-
| Changelog | Entry for new version | MUST | Unless `--no-changelog` |
|
|
310
|
-
| Docs | Documentation current | SHOULD | Manual verification |
|
|
311
|
-
| Install | Installation works | SHOULD | Manual verification |
|
|
312
|
-
|
|
313
|
-
Use `--skip-validation` to bypass all gates for emergency releases. Use `--run-tests` to opt into running the full test suite (slow, disabled by default to avoid ship timeout).
|
|
314
|
-
|
|
315
|
-
---
|
|
316
|
-
|
|
317
|
-
## Tag Annotation Fallback (v0.83.0+)
|
|
318
|
-
|
|
319
|
-
When `--create-tag` is used, the tag annotation is populated from a fallback chain:
|
|
320
|
-
|
|
321
|
-
1. **CHANGELOG.md section** -- extracted via `extract_changelog_section()`
|
|
322
|
-
2. **Git commit notes** -- generated via `generate_changelog_from_commits()` from previous tag
|
|
323
|
-
3. **Release description** -- from `release.notes` field in todo.json
|
|
324
|
-
|
|
325
|
-
This ensures tags always have meaningful content for GitHub Actions, even when `--no-changelog` skips CHANGELOG.md generation.
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
## Platform Changelog Configuration (v0.84.0+)
|
|
330
|
-
|
|
331
|
-
Platform-specific changelog generation is controlled by `.cleo/config.json`:
|
|
332
|
-
|
|
333
|
-
```json
|
|
334
|
-
{
|
|
335
|
-
"release": {
|
|
336
|
-
"changelog": {
|
|
337
|
-
"outputs": [
|
|
338
|
-
{ "platform": "mintlify", "enabled": true, "path": "docs/changelog/overview.mdx" }
|
|
339
|
-
]
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
Supported platforms: `mintlify`, `docusaurus`, `github`, `gitbook`, `plain`, `custom`.
|
|
346
|
-
Default for fresh installs: no platforms configured (only CHANGELOG.md generated).
|
|
347
|
-
GitHub URLs in generated output are resolved dynamically from `git remote origin`.
|
|
348
|
-
|
|
349
|
-
---
|
|
350
|
-
|
|
351
|
-
## CI/CD Integration
|
|
352
|
-
|
|
353
|
-
| Event | Workflow | Action |
|
|
354
|
-
|-------|----------|--------|
|
|
355
|
-
| Tag push `v*.*.*` | `release.yml` | Build tarball, generate release notes, create GitHub Release |
|
|
356
|
-
| Tag push `v*.*.*` | `npm-publish.yml` | Build, test, and publish `@cleocode/mcp-server` to npm |
|
|
357
|
-
| CHANGELOG.md changed on main | `docs-update.yml` | Safety net: regenerate platform docs if missed by ship flow |
|
|
358
|
-
| docs/** changed on main | `mintlify-deploy.yml` | Validate Mintlify docs (deployment via Mintlify dashboard) |
|
|
359
|
-
|
|
360
|
-
---
|
|
361
|
-
|
|
362
|
-
## MCP Server Publishing
|
|
363
|
-
|
|
364
|
-
The MCP server npm package (`@cleocode/mcp-server`) is automatically published when a release is shipped:
|
|
365
|
-
|
|
366
|
-
1. `cleo release ship` bumps VERSION file via `dev/bump-version.sh`
|
|
367
|
-
2. `dev/sync-mcp-version.sh` is called automatically to sync `mcp-server/package.json` version
|
|
368
|
-
3. Release commit includes the synced `mcp-server/package.json`
|
|
369
|
-
4. Git tag push triggers `.github/workflows/npm-publish.yml`
|
|
370
|
-
5. GitHub Action builds, tests, and publishes to npm
|
|
371
|
-
|
|
372
|
-
### Required Setup
|
|
373
|
-
|
|
374
|
-
- GitHub secret `NPM_TOKEN` must be configured with npm publish access
|
|
375
|
-
- npm package `@cleocode/mcp-server` must exist on the registry
|
|
376
|
-
- The `dev/sync-mcp-version.sh` script must be present in the repository
|
|
377
|
-
|
|
378
|
-
### Version Sync Details
|
|
379
|
-
|
|
380
|
-
The version sync is integrated into `dev/bump-version.sh` as step 6. It runs after all other version updates (VERSION file, README badge, template tags, plugin.json). If the sync script is missing or fails, the bump continues with a warning -- it does not block the release.
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
|
-
## Error Codes (50-59)
|
|
385
|
-
|
|
386
|
-
| Code | Constant | Meaning | Recovery |
|
|
387
|
-
|------|----------|---------|----------|
|
|
388
|
-
| 50 | `E_RELEASE_NOT_FOUND` | Release version not found | `cleo release list` |
|
|
389
|
-
| 51 | `E_RELEASE_EXISTS` | Version already exists | Use different version |
|
|
390
|
-
| 52 | `E_RELEASE_LOCKED` | Released = immutable | Create hotfix version |
|
|
391
|
-
| 53 | `E_INVALID_VERSION` | Bad semver format | Use `v{major}.{minor}.{patch}` |
|
|
392
|
-
| 54 | `E_VALIDATION_FAILED` | Validation gate failed | Fix validation errors |
|
|
393
|
-
| 55 | `E_VERSION_BUMP_FAILED` | bump-version.sh failed | Check VERSION file |
|
|
394
|
-
| 56 | `E_TAG_CREATION_FAILED` | Git tag/commit failed | Check git status, existing tags |
|
|
395
|
-
| 57 | `E_CHANGELOG_GENERATION_FAILED` | Changelog failed | Check lib/changelog.sh |
|
|
396
|
-
| 58 | `E_TAG_EXISTS` | Git tag already exists | Use `--force-tag` to overwrite |
|
|
397
|
-
| 59 | `E_TASKS_INCOMPLETE` | Incomplete tasks | Complete or remove from release |
|
|
398
|
-
|
|
399
|
-
---
|
|
400
|
-
|
|
401
|
-
## Output Format
|
|
402
|
-
|
|
403
|
-
### Semantic Versioning
|
|
404
|
-
|
|
405
|
-
| Version Part | When to Increment | Example |
|
|
406
|
-
|--------------|-------------------|---------|
|
|
407
|
-
| Major (X.0.0) | Breaking changes | 1.0.0 → 2.0.0 |
|
|
408
|
-
| Minor (X.Y.0) | New features, backward compatible | 1.0.0 → 1.1.0 |
|
|
409
|
-
| Patch (X.Y.Z) | Bug fixes, backward compatible | 1.0.0 → 1.0.1 |
|
|
410
|
-
|
|
411
|
-
### Changelog Format
|
|
412
|
-
|
|
413
|
-
```markdown
|
|
414
|
-
# Changelog
|
|
415
|
-
|
|
416
|
-
All notable changes to this project will be documented in this file.
|
|
417
|
-
|
|
418
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
419
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
420
|
-
|
|
421
|
-
## [Unreleased]
|
|
422
|
-
|
|
423
|
-
### Added
|
|
424
|
-
- New features
|
|
425
|
-
|
|
426
|
-
### Changed
|
|
427
|
-
- Changes in existing functionality
|
|
428
|
-
|
|
429
|
-
### Deprecated
|
|
430
|
-
- Soon-to-be removed features
|
|
431
|
-
|
|
432
|
-
### Removed
|
|
433
|
-
- Removed features
|
|
434
|
-
|
|
435
|
-
### Fixed
|
|
436
|
-
- Bug fixes
|
|
437
|
-
|
|
438
|
-
### Security
|
|
439
|
-
- Security fixes
|
|
440
|
-
|
|
441
|
-
## [X.Y.Z] - YYYY-MM-DD
|
|
442
|
-
|
|
443
|
-
### Added
|
|
444
|
-
- {Feature description} (T####)
|
|
445
|
-
|
|
446
|
-
### Fixed
|
|
447
|
-
- {Bug fix description} (T####)
|
|
448
|
-
|
|
449
|
-
### Changed
|
|
450
|
-
- {Change description} (T####)
|
|
451
|
-
|
|
452
|
-
### Breaking Changes
|
|
453
|
-
- {Breaking change with migration path}
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
### Release Checklist
|
|
457
|
-
|
|
458
|
-
```markdown
|
|
459
|
-
## Release Checklist: vX.Y.Z
|
|
460
|
-
|
|
461
|
-
### Pre-Release
|
|
462
|
-
|
|
463
|
-
- [ ] All features complete and merged
|
|
464
|
-
- [ ] Tests passing (recommended: ./tests/run-all-tests.sh)
|
|
465
|
-
- [ ] Version bumped (./dev/bump-version.sh X.Y.Z)
|
|
466
|
-
- [ ] Version consistency verified (./dev/validate-version.sh)
|
|
467
|
-
- [ ] Changelog updated
|
|
468
|
-
- [ ] Documentation current
|
|
469
|
-
- [ ] Breaking changes documented
|
|
470
|
-
- [ ] For major/minor: Run `cleo release ship --run-tests` to validate
|
|
471
|
-
|
|
472
|
-
### Release
|
|
473
|
-
|
|
474
|
-
- [ ] Create release commit
|
|
475
|
-
- [ ] Tag release (git tag vX.Y.Z)
|
|
476
|
-
- [ ] Push to remote (git push && git push --tags)
|
|
477
|
-
- [ ] Create GitHub release (if applicable)
|
|
478
|
-
|
|
479
|
-
### Post-Release
|
|
480
|
-
|
|
481
|
-
- [ ] Verify installation works
|
|
482
|
-
- [ ] Update any dependent projects
|
|
483
|
-
- [ ] Announce release (if applicable)
|
|
484
|
-
- [ ] Archive completed tasks (cleo archive)
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
### File Output
|
|
488
|
-
|
|
489
|
-
```markdown
|
|
490
|
-
# Release: vX.Y.Z
|
|
491
|
-
|
|
492
|
-
**Task**: T####
|
|
493
|
-
**Date**: YYYY-MM-DD
|
|
494
|
-
**Status**: complete|partial|blocked
|
|
495
|
-
**Agent Type**: documentation
|
|
496
|
-
|
|
497
|
-
---
|
|
498
|
-
|
|
499
|
-
## Release Summary
|
|
500
|
-
|
|
501
|
-
{2-3 sentence summary of this release}
|
|
502
|
-
|
|
503
|
-
## Version Information
|
|
504
|
-
|
|
505
|
-
| Field | Value |
|
|
506
|
-
|-------|-------|
|
|
507
|
-
| Version | X.Y.Z |
|
|
508
|
-
| Previous | X.Y.W |
|
|
509
|
-
| Type | Major/Minor/Patch |
|
|
510
|
-
| Tag | vX.Y.Z |
|
|
511
|
-
|
|
512
|
-
## Changes in This Release
|
|
513
|
-
|
|
514
|
-
### Features
|
|
515
|
-
|
|
516
|
-
| Feature | Task | Description |
|
|
517
|
-
|---------|------|-------------|
|
|
518
|
-
| {Name} | T#### | {Description} |
|
|
519
|
-
|
|
520
|
-
### Bug Fixes
|
|
521
|
-
|
|
522
|
-
| Fix | Task | Description |
|
|
523
|
-
|-----|------|-------------|
|
|
524
|
-
| {Name} | T#### | {Description} |
|
|
525
|
-
|
|
526
|
-
### Breaking Changes
|
|
527
|
-
|
|
528
|
-
| Change | Migration |
|
|
529
|
-
|--------|-----------|
|
|
530
|
-
| {Change} | {How to migrate} |
|
|
531
|
-
|
|
532
|
-
## Validation Results
|
|
533
|
-
|
|
534
|
-
| Gate | Status | Notes |
|
|
535
|
-
|------|--------|-------|
|
|
536
|
-
| Tests | PASS | 142 tests, 0 failures |
|
|
537
|
-
| Lint | PASS | No warnings |
|
|
538
|
-
| Version | PASS | Consistent across files |
|
|
539
|
-
| Changelog | PASS | Entry present |
|
|
540
|
-
|
|
541
|
-
## Release Commands
|
|
542
|
-
|
|
543
|
-
```bash
|
|
544
|
-
# Tag and push
|
|
545
|
-
git tag -a vX.Y.Z -m "Release vX.Y.Z"
|
|
546
|
-
git push origin main --tags
|
|
547
|
-
|
|
548
|
-
# Verify
|
|
549
|
-
git describe --tags
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
## Post-Release Tasks
|
|
553
|
-
|
|
554
|
-
- [ ] Verify GitHub release created
|
|
555
|
-
- [ ] Update documentation site
|
|
556
|
-
- [ ] Notify stakeholders
|
|
557
|
-
```
|
|
558
|
-
|
|
559
|
-
### Manifest Entry
|
|
560
|
-
|
|
561
|
-
@skills/_shared/manifest-operations.md
|
|
562
|
-
|
|
563
|
-
Use `cleo research add` to create the manifest entry:
|
|
564
|
-
|
|
565
|
-
```bash
|
|
566
|
-
cleo research add \
|
|
567
|
-
--title "Release: vX.Y.Z" \
|
|
568
|
-
--file "YYYY-MM-DD_release-vXYZ.md" \
|
|
569
|
-
--topics "release,version,changelog" \
|
|
570
|
-
--findings "Version X.Y.Z released,3 features added,2 bugs fixed" \
|
|
571
|
-
--status complete \
|
|
572
|
-
--task T#### \
|
|
573
|
-
--not-actionable \
|
|
574
|
-
--agent-type documentation
|
|
575
|
-
```
|
|
576
|
-
|
|
577
|
-
---
|
|
578
|
-
|
|
579
|
-
## Integration Points
|
|
580
|
-
|
|
581
|
-
### Base Protocol
|
|
582
|
-
|
|
583
|
-
- Inherits task lifecycle (start, execute, complete)
|
|
584
|
-
- Inherits manifest append requirement
|
|
585
|
-
- Inherits error handling patterns
|
|
586
|
-
|
|
587
|
-
### Protocol Interactions
|
|
588
|
-
|
|
589
|
-
| Combined With | Behavior |
|
|
590
|
-
|---------------|----------|
|
|
591
|
-
| contribution | Contributions feed changelog |
|
|
592
|
-
| implementation | Implementation changes tracked |
|
|
593
|
-
| specification | Spec changes documented |
|
|
594
|
-
|
|
595
|
-
---
|
|
596
|
-
|
|
597
|
-
## Example
|
|
598
|
-
|
|
599
|
-
**Task**: Release CLEO v0.70.0
|
|
600
|
-
|
|
601
|
-
**Manifest Entry Command**:
|
|
602
|
-
```bash
|
|
603
|
-
cleo research add \
|
|
604
|
-
--title "Release: v0.70.0" \
|
|
605
|
-
--file "2026-01-26_release-v0700.md" \
|
|
606
|
-
--topics "release,v0.70.0,changelog" \
|
|
607
|
-
--findings "Multi-agent support added,12 new commands,Full test coverage" \
|
|
608
|
-
--status complete \
|
|
609
|
-
--task T2350 \
|
|
610
|
-
--epic T2308 \
|
|
611
|
-
--not-actionable \
|
|
612
|
-
--agent-type documentation
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
**Return Message**:
|
|
616
|
-
```
|
|
617
|
-
Release complete. See MANIFEST.jsonl for summary.
|
|
618
|
-
```
|
|
619
|
-
|
|
620
|
-
---
|
|
621
|
-
|
|
622
|
-
## Anti-Patterns
|
|
623
|
-
|
|
624
|
-
| Pattern | Why Avoid |
|
|
625
|
-
|---------|-----------|
|
|
626
|
-
| Skipping version bump | Version confusion |
|
|
627
|
-
| Missing changelog entry | Lost history |
|
|
628
|
-
| Undocumented breaking changes | User frustration |
|
|
629
|
-
| No release tag | Cannot reference version |
|
|
630
|
-
| Incomplete checklist | Missed steps |
|
|
631
|
-
| Major releases without `--run-tests` | Quality risk for breaking changes |
|
|
632
|
-
|
|
633
|
-
---
|
|
634
|
-
|
|
635
|
-
*Protocol Version 2.1.0 - Canonical release reference (consolidated from RELEASE-MANAGEMENT.mdx)*
|