@cleocode/skills 2026.5.104 → 2026.5.106

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/skills",
3
- "version": "2026.5.104",
3
+ "version": "v2026.5.106",
4
4
  "description": "CLEO skill definitions - bundled with CLEO monorepo",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -1,143 +1,120 @@
1
1
  ---
2
2
  name: ct-release-orchestrator
3
- description: "Orchestrates the full release pipeline: version bump, then changelog, then commit, then tag, then conditionally forks to artifact-publish and provenance based on release config. Parent protocol that composes ct-artifact-publisher and ct-provenance-keeper as sub-protocols: not every release publishes artifacts (source-only releases skip it), and artifact publishers delegate signing and attestation to provenance. Use when shipping a new version, running cleo release ship, or promoting a completed epic to released status."
3
+ description: "Orchestrates the canonical 4-verb release pipeline introduced by SPEC-T9345: cleo release plan, then cleo release open, then PR + GHA tag workflow, then cleo release reconcile. The deprecated cleo release ship monolith was deleted in T10103 do not invoke it. Use ship-e2e-smoke to validate the full pipeline end-to-end (dry-run by default). The full verb-to-state map is in docs/release/verb-matrix.md. Use when shipping a new version, validating the release pipeline end-to-end, or promoting a completed epic to released status."
4
4
  protocol: release
5
5
  loomStage: release
6
6
  adrRefs:
7
7
  - ADR-053
8
8
  - ADR-063
9
9
  - ADR-065
10
+ metadata:
11
+ version: 3.0.0
12
+ lastReviewed: 2026-05-22
13
+ stability: stable
10
14
  ---
11
15
 
12
16
  # Release Orchestrator
13
17
 
14
18
  ## Overview
15
19
 
16
- Owns the top of the release pipeline: semver bump, changelog, release commit, and git tag. Composes two sub-protocols conditionally ct-artifact-publisher when the release config has enabled artifacts, and ct-provenance-keeper when signing or attestation is required. Source-only releases (docs, spec changes) stop after the tag and skip both sub-protocols.
20
+ Owns the canonical 4-verb release pipeline established by SPEC-T9345 and finalised when T9540 deleted the legacy `start` / `verify` / `publish` verbs (and the 12-step `releaseShip` monolith) plus T10103 deleted the deprecated `ship` shim. The current verb surface is documented in `docs/release/verb-matrix.md` that file is the SSoT for verb-to-state mapping. This skill is the agent-facing entry point and references the matrix instead of redefining it.
17
21
 
18
22
  ## Core Principle
19
23
 
20
- > Release is the parent protocol; artifact-publish and provenance are conditional sub-protocols.
24
+ > Each verb owns exactly one state transition. No verb performs more than one mutation. Multi-step orchestration uses `ship-e2e-smoke` (validator) — never compose the verbs into a custom script.
21
25
 
22
- ## Immutable Constraints
26
+ ## Canonical Pipeline
23
27
 
24
- | ID | Rule | Enforcement |
25
- |----|------|-------------|
26
- | RLSE-001 | Version MUST follow semantic versioning (`v{major}.{minor}.{patch}`). | `validateReleaseProtocol` rejects non-semver strings; exit 53. |
27
- | RLSE-002 | Changelog MUST be updated with all changes before the tag. | `hasChangelog: false` fails validation unless `--no-changelog` is explicit. |
28
- | RLSE-003 | All validation gates MUST pass before the release proceeds. | Ship halts on any gate failure; exit 54. |
29
- | RLSE-004 | Release MUST be tagged in version control. | Missing tag fails validation; exit 56. |
30
- | RLSE-005 | Breaking changes MUST be documented with a migration path. | Required section in the changelog entry. |
31
- | RLSE-006 | Version MUST be consistent across all files listed in `release.versionBump`. | Mismatched files fail validation; exit 55. |
32
- | RLSE-007 | Manifest entry MUST set `agent_type: "documentation"`. | Validator rejects any other value. |
33
- | RLSE-008 | Parent protocol MUST hand off to artifact-publish when `release.artifacts` is non-empty. | Composition invariant from ARTP-005. |
34
- | RLSE-009 | Provenance chain MUST be recorded for every signed release. | Composition invariant from PROV-005. |
28
+ | Step | Verb / Workflow | Owns transition | Notes |
29
+ |-----:|------------------|------------------|-------|
30
+ | 1 | `cleo release plan <ver> --epic <id>` | _(none)_ `planned` | Builds the Release Plan envelope; auto-writes `CHANGELOG.md` (T10105 closes the silent-skip gap) |
31
+ | 2 | `cleo release open <ver>` | `planned` `pr-opened` | Dispatches `release-prepare.yml`; the workflow cuts the branch + opens the PR |
32
+ | 3 | _(GHA)_ `release-prepare.yml` PR merge | `pr-opened` `pr-merged` | Owned by CI; verify via `cleo release pr-status <ver>` |
33
+ | 4 | _(GHA)_ `auto-tag-on-release-merge.yml` (T10104) | `pr-merged` `tag-pushed` | Auto-tag on merge no manual `git tag` needed |
34
+ | 5 | `cleo release reconcile <ver>` | `tag-pushed` `published` | Backfills 11 provenance tables; idempotent |
35
35
 
36
- ## Composition Pipeline
36
+ Optional validators (read-only / dry-run):
37
37
 
38
- The release parent protocol composes with the artifact-publish and provenance sub-protocols via explicit handoffs:
38
+ | Verb | Use |
39
+ |------|-----|
40
+ | `cleo release ship-e2e-smoke <ver> --epic <id>` | One-shot end-to-end smoke. Dry-run by default; `--execute` performs real mutations. T10103. |
41
+ | `cleo release pr-status <ver>` | Poll release PR CI checks while waiting |
42
+ | `cleo release list` / `show <ver>` | Read-only inspection |
39
43
 
40
- ```
41
- Release Protocol Artifact Publish Protocol
42
- --- ---
43
- 1. Version bump
44
- 2. Changelog generation
45
- 3. Validation gates
46
- 4. Git commit + tag
47
- 5. ---- HANDOFF ------------------> 6. Load artifact config
48
- 7. Pre-validate all artifacts
49
- 8. Build all artifacts
50
- 9. ---- HANDOFF ----> Provenance Protocol
51
- 10. Compute digests
52
- 11. Generate in-toto attestation
53
- 12. Sign (sigstore keyless)
54
- 13. Record chain in releases.json
55
- 14. <--- RETURN ----
56
- 15. Publish signed artifacts
57
- 16. Record provenance to releases.json
58
- 17. <--- RETURN ----------------------
59
- 18. Push to remote
60
- 19. Update release status to "released"
61
- ```
62
-
63
- Each handoff uses a distinct exit code:
64
-
65
- | Edge | Exit code | Meaning |
66
- |------|-----------|---------|
67
- | Release → artifact-publish | 65 (`HANDOFF_REQUIRED`) | Parent yields control to the sub-protocol |
68
- | artifact-publish → provenance | 65 (`HANDOFF_REQUIRED`) | Sub-protocol delegates signing |
69
- | provenance → artifact-publish | 0 on success | Return to parent sub-protocol |
70
- | artifact-publish → release | 0 on success, 88 on publish fail | Return to parent with result |
71
- | release → tag push | 0 on success, 56 on tag fail | Final commit |
72
-
73
- Partial-failure rollback semantics are documented in [references/composition.md](references/composition.md).
44
+ ## Immutable Constraints
74
45
 
75
- ## Conditional Trigger Matrix
46
+ | ID | Rule | Enforcement |
47
+ |----|------|-------------|
48
+ | RLSE-001 | Version MUST be CalVer (`YYYY.MM.patch`) per ADR-065 — never SemVer. | `cleo release plan` rejects non-CalVer; exit 53. |
49
+ | RLSE-002 | `CHANGELOG.md` MUST be updated before the tag — always-write is the default behaviour of `cleo release plan` (T9784 deleted the manual changelog verb). | Plan envelope refuses to advance to `pr-opened` if the changeset directory is unparseable (T10105). |
50
+ | RLSE-003 | All per-task evidence gates MUST be recorded via `cleo verify <task> --gate <g> --evidence …` BEFORE `cleo complete`. The legacy `cleo release verify` batch verb was deleted in T9540. | ADR-051 per-task evidence ritual. |
51
+ | RLSE-004 | The release MUST be tagged via the auto-tag GHA workflow — not a manual `git tag`. | T10104 closes the auto-tag gap. |
52
+ | RLSE-005 | Direct pushes to `main` are prohibited. Every release ships via a PR cut by `release-prepare.yml`. | ADR-065 + branch protection (see `docs/release/branch-protection-setup.md`). |
53
+ | RLSE-006 | Version MUST be consistent across all workspace targets resolved by `resolveVersionBumpTargets` (root package.json + every workspace package + Cargo workspace). | Version-bump preflight in `release-prepare.yml`. |
54
+ | RLSE-007 | Provenance reconcile MUST run within the release-publish workflow — never as a manual followup. | Invoked by `release-publish.yml`. |
76
55
 
77
- Not every release needs both sub-protocols. The parent decides based on `release.artifacts` and `release.security.provenance.enabled`:
56
+ ## Integration
78
57
 
79
- | Release type | Needs artifact-publish | Needs provenance |
80
- |--------------|:---------------------:|:----------------:|
81
- | `source-only` (docs, spec changes, code-only merges without a package) | no | no |
82
- | `npm-package` | yes | yes (SLSA L3 via npm `--provenance`) |
83
- | `docker-image` | yes | yes (cosign keyless attestation) |
84
- | `cargo-crate` | yes | yes (GPG or sigstore) |
85
- | `github-tarball` | yes | optional (MAY sign via cosign) |
86
- | `multi-artifact` (npm + docker + tarball combo) | yes | yes |
58
+ Use the explicit two-verb invocation. **Do not** invoke `cleo release ship` — it was deleted in T10103.
87
59
 
88
- The parent skill inspects `.cleo/config.json#release.artifacts[]`. If the array is empty or all entries are disabled, the release is `source-only` and the pipeline stops after the tag.
60
+ ```bash
61
+ # 1. Plan — build the canonical Release Plan envelope.
62
+ cleo release plan v2026.6.0 --epic T10099
89
63
 
90
- ## CI Integration
64
+ # 2. Open — dispatch release-prepare workflow.
65
+ cleo release open v2026.6.0
91
66
 
92
- The existing `.github/workflows/release.yml` uses `npm publish --provenance` with the repository's OIDC trust configuration, producing SLSA L3 keyless attestations automatically. This skill's responsibility is to ensure the resulting chain is recorded in the manifest entry and in `.cleo/releases.json`, not to re-implement the signing step. When CI has already produced an attestation, the skill MUST read its reference from the workflow output and record it verbatim.
67
+ # 3. (Optional) Poll PR + CI status while the workflow runs.
68
+ cleo release pr-status v2026.6.0
93
69
 
94
- ## Integration
70
+ # 4. Reconcile — runs automatically inside release-publish.yml.
71
+ # Run manually only if backfilling a historical release.
72
+ cleo release reconcile v2026.6.0
73
+ ```
95
74
 
96
- Invoke the parent pipeline via `cleo release ship`, then validate with `cleo check protocol`:
75
+ To validate the whole pipeline end-to-end without shipping a real release:
97
76
 
98
77
  ```bash
99
- # Kick off the release pipeline.
100
- cleo release ship v2026.4.5 \
101
- --epic T260 \
102
- --bump-version \
103
- --create-tag \
104
- --push
105
-
106
- # Validate the parent protocol entry.
107
- cleo check protocol \
108
- --protocolType release \
109
- --taskId T4900 \
110
- --version v2026.4.5 \
111
- --hasChangelog true
78
+ # Dry-run preview no side effects.
79
+ cleo release ship-e2e-smoke v2026.6.0 --epic T10099
80
+
81
+ # Execute mode — runs plan + open, then polls for PR merge, tag push,
82
+ # and npm publish (default 30-min wall-clock budget).
83
+ cleo release ship-e2e-smoke v2026.6.0 --epic T10099 --execute
112
84
  ```
113
85
 
114
- Exit code 0 = release complete. Exit code 50 = release not found. Exit code 54 = validation gate failed. Exit code 55 = version bump failed. Exit code 56 = tag creation failed. Exit code 88 = artifact publish failed (bubbled from sub-protocol). Exit code 94 = attestation invalid (bubbled from provenance).
86
+ Exit codes (canonical):
115
87
 
116
- For source-only releases, pass `--no-artifacts` to skip the artifact-publish handoff. Every other release type leaves the default behavior alone.
88
+ - `0` success.
89
+ - `53` — version validation failed (e.g. not CalVer).
90
+ - `54` — release-prepare workflow gate failed.
91
+ - `56` — tag creation failed (auto-tag workflow).
92
+ - `82` — `E_PLAN_NOT_FOUND` (plan envelope missing for the requested version).
93
+ - `83` — `E_IVTR_INCOMPLETE` (per-task IVTR loops not released).
94
+ - `88` — artifact publish failed.
117
95
 
118
96
  ## Anti-Patterns
119
97
 
120
98
  | Pattern | Problem | Solution |
121
99
  |---------|---------|----------|
122
- | Publishing artifacts before running validation gates | Can't roll back a successful publish on a failed build | Follow the pipeline order: gates commit tag publish |
123
- | Pushing the git tag before publishing artifacts | Tag points to a commit whose packages never shipped | Push the tag after artifacts are live, or use the same job |
124
- | Skipping the dry-run phase | Irreversible registry state on first real attempt | ARTP-002 requires dry-run; the parent skill refuses to skip it |
125
- | Source-only releases triggering artifact-publish | Wasted CI time, false SLSA attestations | Check `release.artifacts` before handoff; skip if empty |
126
- | Not recording the provenance chain in releases.json | Canon loses the commit build → artifact → attestation link | Parent MUST record even when CI generated the attestation |
127
- | Overusing `--force` to bypass epic completeness | Ships partial epics without review | Use the guard mode `warn` and address gaps explicitly |
128
- | Mutating a `released` entry after the fact | Canon must be immutable once shipped | Create a new release entry for the hotfix |
129
- | Running ship on a dirty worktree | Commits scoop up unrelated changes | Require a clean worktree before step 1 |
100
+ | Running `cleo release ship` | The verb was deleted in T10103 the command will exit with `Unknown command`. | Use `cleo release plan` + `cleo release open`. |
101
+ | Manually invoking `gh workflow run release-prepare.yml` | Bypasses the plan envelope; `releases.status` stays at `planned`. | Always go through `cleo release open <ver>` it tracks state in the `releases` table. |
102
+ | Manually `git tag v<ver> && git push --tags` | Bypasses the auto-tag workflow (T10104) and skips provenance backfill. | Let `auto-tag-on-release-merge.yml` create the tag on PR merge. |
103
+ | Hand-editing `CHANGELOG.md` for the new version | Drift between the changeset directory and the changelog. | `cleo release plan` always auto-writes the section (T10105). Use `cleo changeset add` to author entries. |
104
+ | Pasting one verb into another's workflow file | Multi-step orchestration belongs in `ship-e2e-smoke`. | Use `cleo release ship-e2e-smoke --execute` for end-to-end validation. |
105
+ | Running the pipeline on a dirty worktree | Release commit scoops up unrelated changes. | The clean-tree gate refuses to advance. |
106
+ | Skipping `cleo release reconcile` after a successful tag push | 11 provenance tables stay empty; canon drift. | `release-publish.yml` runs reconcile automatically verify it ran via `cleo release show <ver>`. |
130
107
 
131
108
  ## Critical Rules Summary
132
109
 
133
- 1. Version MUST be valid semver; the parent skill refuses non-semver strings.
134
- 2. The changelog MUST be updated before the tag no exceptions beyond explicit `--no-changelog`.
135
- 3. All validation gates MUST pass before the commit step.
136
- 4. The pipeline composes with artifact-publish and provenance only when the release config calls for it.
137
- 5. Exit codes bubble up unchanged: 88 from artifact-publish and 94 from provenance surface at the parent.
138
- 6. `released` entries are immutable; hotfixes go into new entries.
139
- 7. Manifest entry MUST set `agent_type: "documentation"` and record the full chain via `record_release()`.
140
- 8. Always validate via `cleo check protocol --protocolType release` before declaring the release done.
110
+ 1. The 4-verb pipeline `plan`, `open`, `reconcile`, `rollback` — is the ONLY way to ship.
111
+ 2. The deprecated `cleo release ship` shim was DELETED in T10103. Do not invoke it.
112
+ 3. CalVer (`YYYY.MM.patch`) is the only valid version scheme.
113
+ 4. `cleo release plan` always writes the CHANGELOG section unless `--no-changelog`.
114
+ 5. The tag is created by `auto-tag-on-release-merge.yml`, not by hand.
115
+ 6. Provenance reconcile is invoked by `release-publish.yml`, not manually (unless backfilling).
116
+ 7. Per-task evidence gates use `cleo verify --gate --evidence` per ADR-051 — not the deleted batch verb.
117
+ 8. Use `cleo release ship-e2e-smoke` to validate the full pipeline before a real ship.
141
118
 
142
119
  ## CI Job Inventory
143
120
 
@@ -155,8 +132,10 @@ Consult the inventory whenever:
155
132
 
156
133
  This skill binds to the **release** LOOM lifecycle stage. Governing ADRs:
157
134
 
158
- - [ADR-053 — project-agnostic release pipeline](../../../../.cleo/adrs/ADR-053-project-agnostic-release-pipeline.md) — defines the language-agnostic version bump → changelog → tag flow.
159
- - [ADR-063 — release pipeline](../../../../.cleo/adrs/ADR-063-release-pipeline.md) — defines the 12-step `cleo release ship` integration with CI.
160
- - [ADR-065 — PR-required release flow](../../../../.cleo/adrs/ADR-065-pr-required-release-flow.md) — defines the PR-gated path; direct pushes to `main` are prohibited.
135
+ - [ADR-053 — project-agnostic release pipeline](../../../../.cleo/adrs/ADR-053-project-agnostic-release-pipeline.md) — language-agnostic version bump → changelog → tag flow.
136
+ - [ADR-063 — release pipeline](../../../../.cleo/adrs/ADR-063-release-pipeline.md) — original 12-step pipeline (historical; superseded by SPEC-T9345 §4).
137
+ - [ADR-065 — PR-required release flow](../../../../.cleo/adrs/ADR-065-pr-required-release-flow.md) — direct pushes to `main` are prohibited.
138
+
139
+ Live verb matrix: [docs/release/verb-matrix.md](../../../../docs/release/verb-matrix.md) — the single source of truth for verb-to-state mapping.
161
140
 
162
141
  LOOM coverage matrix: [docs/skills/loom-coverage-matrix.md](../../../../docs/skills/loom-coverage-matrix.md).