@cleocode/skills 2026.5.113 → 2026.5.120

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.113",
3
+ "version": "2026.5.120",
4
4
  "description": "CLEO skill definitions - bundled with CLEO monorepo",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -115,7 +115,26 @@ cleo docs add T4798 docs/adr/ADR-0042.md \
115
115
  `spec | adr | research | handoff | note | llm-readme`.
116
116
  - `--slug` MUST follow `adr-<NNNN>-<short-topic>`. The numeric segment
117
117
  is the canonical ADR id; the topic segment makes the slug human
118
- readable. Collisions return `E_SLUG_TAKEN` with 3 alternatives.
118
+ readable. Collisions return `E_SLUG_RESERVED` with 3 alternatives
119
+ (legacy `E_SLUG_TAKEN` aliased under `details.aliases` for one release —
120
+ T10386).
121
+ - Near-duplicate slugs trigger `W_SLUG_SIMILAR` (T10361). The CLI
122
+ surfaces the top match and hints `--allow-similar`. Use `--allow-similar`
123
+ only when the new ADR genuinely forks from the existing one (e.g.
124
+ versioned re-issue); every bypass is audited to
125
+ `.cleo/audit/similar-bypass.jsonl`.
126
+ - Unknown flags fail fast with `E_UNKNOWN_FLAG` + did-you-mean
127
+ suggestions (T10359) — `--lbls` becomes "did you mean --labels?".
128
+ - TODO(T10360 · E3.2 pending): when shipped, ADR drafts will accept
129
+ `--title "<human title>"` and CLEO will auto-allocate the next
130
+ `adr-NNN-<kebab-title>` via the E1 slug allocator. Until then,
131
+ you MUST hand-pick the next free `NNNN` by inspecting
132
+ `cleo docs list --type adr --project`. Example future call:
133
+ ```bash
134
+ # FUTURE — DO NOT USE until T10360 ships:
135
+ # cleo docs add T4798 docs/drafts/draft.md --type adr \
136
+ # --title "Adopt Drizzle ORM v1 beta"
137
+ ```
119
138
  - The owner ID is the consensus task whose verdict drives the ADR
120
139
  (`T4798` above). This is how downstream supersession cascades find
121
140
  the chain — never attach an ADR to an arbitrary task.
@@ -2,8 +2,8 @@
2
2
  name: ct-cleo
3
3
  description: CLEO task management protocol - session, task, and workflow guidance. Use when managing tasks, sessions, or multi-agent workflows with the CLEO CLI protocol.
4
4
  metadata:
5
- version: 2.2.0
6
- lastReviewed: 2026-05-23
5
+ version: 2.3.0
6
+ lastReviewed: 2026-05-24
7
7
  stability: stable
8
8
  ---
9
9
 
@@ -198,3 +198,60 @@ If you see `E_PATH_TRAVERSAL`, `E_FILE_ERROR: Cannot read file`, or
198
198
  build that ships the T10389 fix-pack (closes T10353 + T10354 + T10294
199
199
  + T10365). Suppress the routing log with `CLEO_QUIET=1` for clean
200
200
  stderr in automation.
201
+
202
+ ---
203
+
204
+ ## CLI Output Contract (ADR-086 / Epic T9927 / E9 of Saga T9855)
205
+
206
+ `cleo` stdout is now **envelope-only**. NEVER pipe `cleo` output through
207
+ `tail`/`jq`/`python` — every common shape has a first-class flag.
208
+
209
+ | Need | Flag | Example |
210
+ |------|------|---------|
211
+ | Scalar extract (no jq) | `--field <jsonpointer>` | `cleo add 'X' --acceptance "..." --field /data/task/id` |
212
+ | ID-only pipeline | `--output id` | `cleo list --parent EPIC --output id \| while read c; do …; done` |
213
+ | Affected count | `--output count` | `cleo list --parent EPIC --status pending --output count` |
214
+ | TSV (no header) | `--output table` | `cleo list --parent EPIC --output table` |
215
+ | Silent (exit code only) | `--output silent` | `cleo update T123 --status done --output silent` |
216
+ | 1-line per record | `--summary` | `cleo list --parent EPIC --summary` |
217
+ | Suppress stderr noise | `--quiet` | `id=$(cleo add 'X' --acceptance "..." --quiet --field /data/task/id)` |
218
+ | Full record (legacy) | `--full` | `cleo show T123 --full` |
219
+
220
+ ### Defaults
221
+
222
+ - **Read ops** (`show`, `list`, `find`) — return the full LAFS envelope.
223
+ - **Mutate ops** (`add`, `add-batch`, `update`, `complete`) — return a
224
+ minimal envelope `{success, data: {count, ids[]}}` (T9931). Use `--full`
225
+ to opt back into the full record set.
226
+ - **stdout** carries exactly ONE LAFS envelope terminated by a single
227
+ newline. Sub-step logs/progress/warnings route through Pino → stderr.
228
+ This is regression-locked by CI gates `lint-stdout-discipline` (T10135)
229
+ and `lint-stdout-write-allowlist` (T9924).
230
+
231
+ ### Canonical agent patterns
232
+
233
+ ```bash
234
+ # Scalar extract — no jq needed.
235
+ id=$(cleo add 'Title' --type task --parent T9927 --acceptance "..." \
236
+ --field /data/task/id)
237
+
238
+ # ID-only pipeline — no JSON parsing.
239
+ cleo list --parent T9927 --output id | while read child; do
240
+ cleo verify "$child" --gate qaPassed --evidence "tool:lint;tool:typecheck"
241
+ done
242
+
243
+ # Count-only check.
244
+ remaining=$(cleo list --parent T9927 --status pending --output count)
245
+
246
+ # Fully clean pipeline — stdout has IDs, stderr is empty unless error.
247
+ cleo add-batch --file /tmp/batch.json --parent T9927 --quiet --output id
248
+ ```
249
+
250
+ ### Anti-patterns (REJECTED — these are CLI bugs if they appear post-E9)
251
+
252
+ - ❌ `cleo show T123 | tail -1 | jq -r .data.task.id` → use `--field /data/task/id`
253
+ - ❌ `cleo list --parent E1 | jq -r '.data.tasks[].id'` → use `--output id`
254
+ - ❌ `cleo show T123 | python3 -c 'import json,sys; …'` → use `--field`
255
+ - ❌ `cleo add 'X' 2>&1 | grep -oE 'T[0-9]+'` → use `--field /data/task/id`
256
+
257
+ Full contract + RFC 2119 invariants: `cleo docs fetch adr-086-cli-output-contract-e9`.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ct-docs-write
3
3
  description: This skill should be used when creating, editing, or reviewing documentation files (markdown, MDX, README, guides). Use when the user asks to "write docs", "create documentation", "edit the README", "improve doc clarity", "make docs more readable", "follow the style guide", or "write user-facing content". Applies CLEO's conversational, clear, and user-focused writing style.
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  tier: 3
6
6
  core: false
7
7
  category: composition
@@ -193,8 +193,19 @@ cleo docs add T1234 docs/drafts/saml-setup.md \
193
193
  For user-facing prose use `note`; for end-user docs use `note` or `spec`
194
194
  depending on whether the doc carries REQ-XXX requirements.
195
195
  - `--slug` is the human-friendly handle for retrieval. Use kebab-case. If the
196
- slug is already taken the CLI returns `E_SLUG_TAKEN` with 3 alternatives
197
- pick one rather than overwriting silently.
196
+ slug is already taken the CLI returns `E_SLUG_RESERVED` with 3 alternatives
197
+ (legacy `E_SLUG_TAKEN` aliased under `details.aliases` for one release —
198
+ T10386) — pick one rather than overwriting silently.
199
+ - If the slug is too close to an existing one the CLI surfaces a
200
+ `W_SLUG_SIMILAR` warning with the top match + a `--allow-similar` hint
201
+ (T10361). Pass `--allow-similar` to proceed when the fork is intentional;
202
+ every bypass is logged to `.cleo/audit/similar-bypass.jsonl`.
203
+ - Unknown flags (typos, removed options) fail fast with `E_UNKNOWN_FLAG`
204
+ + did-you-mean suggestions (T10359). The legacy "silently absorb as
205
+ positional" behaviour from citty's `parseArgs` is rejected.
206
+ - TODO(T10360 · E3.2 pending): when shipped, `--type adr` will accept a
207
+ `--title <human-title>` flag and auto-allocate `adr-NNN-<kebab-title>`
208
+ via the E1 slug allocator — no more manual ADR-079 numbering.
198
209
  - The owner ID (`T1234` above) auto-classifies the attachment by prefix:
199
210
  `T###` → task, `ses_*` → session, `O-*` → observation.
200
211
 
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: ct-documentor
3
3
  description: Documentation coordinator with CLEO style guide compliance. Routes every canonical-doc write (spec, adr, research, handoff, note, llm-readme) through the docs SSoT via `cleo docs add` / `cleo docs publish` / `cleo docs fetch` — never raw filesystem writes. Coordinates ct-docs-lookup, ct-docs-write, ct-docs-review, ct-spec-writer, and ct-adr-recorder. Use when creating or updating documentation files, consolidating scattered documentation, or validating documentation against style standards. Triggers on documentation tasks, doc update requests, or style guide compliance checks.
4
- version: 3.11.0
4
+ version: 3.14.0
5
5
  tier: 3
6
6
  core: false
7
7
  category: specialist
8
8
  protocol: null
9
9
  metadata:
10
- version: 3.11.0
10
+ version: 3.14.0
11
11
  lastReviewed: 2026-05-24
12
12
  stability: stable
13
13
  dependencies:
@@ -65,7 +65,7 @@ and every owner writes through `cleo docs add` — not raw filesystem writes.
65
65
  | Doc Type | Owner Skill | SSoT Command |
66
66
  |----------|-------------|--------------|
67
67
  | `spec` (REQ-XXX requirements) | `ct-spec-writer` | `cleo docs add <ownerId> <path> --type spec --slug spec-<feature>` |
68
- | `adr` (architecture decisions) | `ct-adr-recorder` | `cleo docs add <ownerId> <path> --type adr --slug adr-<NNN>-<rest>` |
68
+ | `adr` (architecture decisions) | `ct-adr-recorder` | `cleo docs add <ownerId> <path> --type adr --slug adr-<NNN>-<rest>` (TODO T10360 · E3.2 pending: `--title` + auto-`adr-NNN` allocation) |
69
69
  | `research` (multi-source investigation) | `ct-research-agent` | `cleo docs add <ownerId> <path> --type research --slug research-<topic>` |
70
70
  | `handoff` (session/agent transition) | `ct-documentor` (this skill) | `cleo docs add <ownerId> <path> --type handoff --slug handoff-<context>` |
71
71
  | `note` (conversational prose) | `ct-docs-write` | `cleo docs add <ownerId> <path> --type note --slug <kebab-topic>` |
@@ -78,6 +78,51 @@ materializing through `cleo docs add` + (optionally) `cleo docs publish`.
78
78
 
79
79
  ---
80
80
 
81
+ ## Decision: update vs supersede vs create (T10168 · Saga T9855 / E12)
82
+
83
+ Before adding a new doc, ALWAYS ask: is this **a new doc**, **a change to an existing doc**, or **a replacement for an existing doc**?
84
+
85
+ ```
86
+ ┌─────────────────────────────────────────────────────────────────────┐
87
+ │ Question │ Verb │
88
+ ├─────────────────────────────────────────────────────────────────────┤
89
+ │ Same idea, fixing/extending content? │ cleo docs update <slug> │
90
+ │ → typo in ADR-076 │ (T10161 — in-place patch) │
91
+ │ → adding a clarifying paragraph │ │
92
+ │ → refreshing a stale section │ │
93
+ │ │
94
+ │ Replacing the whole canonical model? │ cleo docs supersede │
95
+ │ → "saga model v2" replaces v1 │ <old> <new> (T10162) │
96
+ │ → ADR-080 replaces ADR-073 │ (lifecycle flip + lineage)│
97
+ │ → new architecture supplants old │ │
98
+ │ │
99
+ │ Genuinely new idea? │ cleo docs find --similar │
100
+ │ → drafting a new spec │ <slug> FIRST (T10163) │
101
+ │ → fresh ADR for a new concern │ → if no hit, cleo docs add│
102
+ │ → recording a new investigation │ → if hit, route to update │
103
+ │ │
104
+ │ Tracing the lineage graph? │ cleo docs graph │
105
+ │ → "what does this doc replace?" │ --root <slug> (T10164) │
106
+ │ → "what tasks reference this ADR?" │ │
107
+ └─────────────────────────────────────────────────────────────────────┘
108
+ ```
109
+
110
+ ### Examples
111
+
112
+ - **"Fix a typo in ADR-076 saga-first-class"** → `cleo docs update adr-076-saga-first-class --body /tmp/fixed.md --message "fix typo in §2"`. NOT a new doc. NOT a supersession. Just patch in place; T10161 squashes patches within a 5-minute window so consecutive typo fixes don't bloat the audit log.
113
+
114
+ - **"Replace the entire saga-orchestration model with v2"** → `cleo docs add T9999 v2.md --type adr --slug adr-080-saga-orchestration-v2` followed by `cleo docs supersede adr-073-above-epic-naming adr-080-saga-orchestration-v2 --reason "v2 canonicalizes the SG- prefix + 4-tier hierarchy"`. Both rows survive in the attachments table; readers see `lifecycle_status=superseded` on v1 and `supersedes=adr-073` on v2.
115
+
116
+ - **"Drafting a new spec for the BRAIN recovery pipeline"** → FIRST run `cleo docs find --similar brain-recovery` (T10163). If similarity > 0.85 against an existing draft, ROUTE the request into `cleo docs update` instead — the existing draft is the canonical surface. If no near-match, proceed with `cleo docs add T#### draft.md --type spec --slug spec-brain-recovery-pipeline`.
117
+
118
+ - **"Auditing the supersession chain for ADR-039"** → `cleo docs graph --root adr-039-lafs-envelope-unification --depth 3`. Returns a DocProvenanceGraph envelope (T10166 contract) with nodes + edges, optionally `--format dot` for graphviz visualization.
119
+
120
+ ### Anti-patterns (INSTANT REJECTION)
121
+
122
+ - ❌ Calling `cleo docs add` with a slug that's only a typo-distance away from an existing doc — the auto-warn (T10167) fires `W_SLUG_SIMILAR`; respect it and route to `cleo docs update` instead of bypassing with `--allow-similar`.
123
+ - ❌ Editing a `.cleo/adrs/*.md` file directly with `Write` — bypasses the SSoT writer; T10366 `WriterRegistry` is the chokepoint and the docs SSoT will reconcile auto-emit drift.
124
+ - ❌ Creating a new doc when an existing one needs updating — bloats the attachments table and breaks lineage. The decision tree above resolves this — when in doubt, run `cleo docs find --similar <proposed-slug>` first.
125
+
81
126
  ## Through SDK (preferred)
82
127
 
83
128
  Documentation work flows through the docs SSoT in three steps —
@@ -147,11 +192,12 @@ invoking `attachmentStore.put({ slug })`. The allocator:
147
192
 
148
193
  The `attachmentStore.put` chokepoint enforces this via a runtime assert
149
194
  (`SlugNotReservedByAllocatorError`) when `CLEO_STRICT_SLUG_ALLOCATOR=1`
150
- is set. Strict mode becomes default once `cleo changeset add` (T10388)
151
- finishes wiring through the allocator. `cleo docs add` LIVE as of T10386:
152
- the dispatch layer (`packages/cleo/src/dispatch/domains/docs.ts:add`)
153
- calls `reserveSlug(type, slug)` BEFORE `attachmentStore.put`. Collisions
154
- surface the uniform envelope:
195
+ is set. Strict mode becomes default in the next release after both
196
+ writers are wired. **BOTH writers are LIVE on the allocator as of T10388**:
197
+ `cleo docs add` (T10386 — `packages/cleo/src/dispatch/domains/docs.ts:add`)
198
+ and `cleo changeset add` (T10388 `packages/core/src/changesets/writer.ts:writeChangesetEntry`)
199
+ both call `reserveSlug(kind, slug)` BEFORE any filesystem or DB mutation.
200
+ Collisions surface the uniform envelope:
155
201
 
156
202
  ```json
157
203
  {
@@ -167,10 +213,10 @@ surface the uniform envelope:
167
213
  }
168
214
  ```
169
215
 
170
- `details.aliases` retains the legacy `E_SLUG_TAKEN` code for ONE release of
171
- back-compat downstream consumers grepping for the old code can still match
172
- via the alias array. Removed after T-E1.3 (T10388) lands `cleo changeset add`
173
- on the same chokepoint.
216
+ `details.aliases` retains the legacy `E_SLUG_TAKEN` (docs-add path) /
217
+ `E_SSOT_WRITE_FAILED` (changeset-add path) codes for ONE release of
218
+ back-compat downstream consumers grepping for the old codes can still match
219
+ via the alias array. Removed after E2 (T10290 — DocKind writer dedup) lands.
174
220
 
175
221
  Slugs share a GLOBAL namespace across all DocKinds — `reserveSlug('changeset',
176
222
  'foo')` followed by `reserveSlug('research', 'foo')` collides. The decision
@@ -484,6 +530,46 @@ observation pollutes the FTS index. Use `cleo memory backfill-docs` (AC4
484
530
  of T9976) only to repair attachments that pre-date the auto-emit feature
485
531
  or were written outside the SSoT.
486
532
 
533
+ #### System-managed exemptions (T10368)
534
+
535
+ Not every `.md` write inside `packages/core/src/**` is a DocKind authoring
536
+ path. Release composers, RCASD migration tooling, nexus wiki generators, and
537
+ the publish-mirror copier all emit Markdown bytes from inside `core/` but
538
+ SHOULD NOT route through `WriterRegistry.write` — they are deterministic
539
+ derived artifacts, not user-authored canonical documents.
540
+
541
+ These legitimate bypasses live in `SYSTEM_MANAGED_ENTRIES` inside
542
+ `writer-registry.ts`. Every entry cites an ADR pointer:
543
+
544
+ ```ts
545
+ WriterRegistry.listSystemManaged();
546
+ // → [
547
+ // { id: 'release.plan-json', adrRef: 'ADR-028 ...' },
548
+ // { id: 'release.changelog', adrRef: 'ADR-028 §2.5 ...' },
549
+ // { id: 'lifecycle.rcasd-migration', adrRef: 'ADR-076 ...' },
550
+ // { id: 'lifecycle.stage-artifact', adrRef: 'ADR-076 ...' },
551
+ // { id: 'sessions.handoff-markdown', adrRef: 'ADR-076 ...' },
552
+ // { id: 'nexus.wiki-overview', adrRef: 'ADR-076 ...' },
553
+ // { id: 'docs.publish-mirror', adrRef: 'ADR-076 ...' },
554
+ // ]
555
+
556
+ // Path-based exemption lookup — used by the writer-audit test + T10369 lint:
557
+ const hit = WriterRegistry.isSystemManaged('.cleo/release/v2026.5.103.plan.json');
558
+ // → { id: 'release.plan-json', kind: null, adrRef: 'ADR-028 ...', ... }
559
+ ```
560
+
561
+ When adding a NEW `.md` writer inside `packages/core/src/**`, you MUST
562
+ either:
563
+
564
+ 1. Route through `WriterRegistry.write({kind, slug, payload})` (the
565
+ canonical path for DocKind authoring), OR
566
+ 2. Append a new entry to `SYSTEM_MANAGED_ENTRIES` with an ADR pointer
567
+ ratifying the bypass.
568
+
569
+ The `writer-audit.test.ts` regression test fails when a new `.md` writer
570
+ appears without either path. T10369 (next in the epic) promotes this from a
571
+ unit test to a full CI lint gate.
572
+
487
573
  ### Slug similarity warn (T10361 · closes T10167)
488
574
 
489
575
  `cleo docs add` runs a fuzzy-match check against existing slugs for the
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ct-spec-writer
3
3
  description: Technical specification writing using RFC 2119 language for clear, unambiguous requirements. Creates protocol specifications, technical requirements, API specifications, and architecture documents with testable requirements and compliance criteria. Use when writing specifications, defining protocols, documenting requirements, or creating API contracts. Triggers on specification tasks, protocol definition needs, or requirement documentation.
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  tier: 2
6
6
  core: false
7
7
  category: recommended
@@ -161,8 +161,17 @@ cleo docs add T1234 docs/specs/auth-protocol.md \
161
161
  Other allowed values: `adr | research | handoff | note | llm-readme`.
162
162
  - `--slug` is the kebab-case retrieval handle. Use the spec topic +
163
163
  version (e.g. `auth-protocol-v2`, `release-pipeline-v3`). The CLI
164
- returns `E_SLUG_TAKEN` with 3 alternatives on collision — pick one
165
- rather than silently overwriting.
164
+ returns `E_SLUG_RESERVED` with 3 alternatives on collision (legacy
165
+ `E_SLUG_TAKEN` aliased under `details.aliases` for one release —
166
+ T10386) — pick one rather than silently overwriting.
167
+ - Near-duplicate slugs (e.g. `auth-protocol-v2` vs an existing
168
+ `auth-protocol`) surface a `W_SLUG_SIMILAR` warning with the top
169
+ match (T10361). Pass `--allow-similar` to proceed when the new spec
170
+ intentionally forks; every bypass is audited to
171
+ `.cleo/audit/similar-bypass.jsonl`.
172
+ - Unknown flags fail fast with `E_UNKNOWN_FLAG` + did-you-mean
173
+ suggestions (T10359) — `--titel`/`--lables` become "did you mean
174
+ --type/--labels?". Run `cleo docs add --help` for the canonical surface.
166
175
  - The owner ID (`T1234`) auto-attaches the spec to its parent task so
167
176
  downstream stages (`ct-validator`, decomposition, implementation)
168
177
  can discover the spec via `cleo docs list --task T1234 --type spec`.
@@ -77,6 +77,62 @@ Governance: see **ADR-051** (programmatic gate integrity) which defines the evid
77
77
 
78
78
  ---
79
79
 
80
+ ## Blast-Radius Test Scope (MANDATORY · T9842)
81
+
82
+ When acting as the IVTR Lead in the **Validate** phase (R2), the targeted test
83
+ files named in the task spec are NOT sufficient evidence on their own when the
84
+ Implement phase touched an infrastructure file. Targeted-only test review is
85
+ how cross-package regressions slip past the Lead.
86
+
87
+ ### Precedent — T9814 R2
88
+
89
+ T9814 swapped `BEGIN IMMEDIATE` for SAVEPOINTs in
90
+ `packages/core/src/store/sqlite-data-accessor.ts` to support nested
91
+ transactions for `add-batch`. Every targeted test passed (6/6 add-batch,
92
+ 34/34 add, 9/9 allocate). IVTR Lead R2 approved on the targeted scope. CI
93
+ then surfaced `agent-resolver.test.ts preferTier` failing — the resolver
94
+ depended on the outer `BEGIN IMMEDIATE` semantics that SAVEPOINTs do not
95
+ replicate verbatim. Hotfix commit `baa996d2b` restored the outer-tx case.
96
+ The Lead's targeted-only review missed a regression CI caught seconds later.
97
+
98
+ ### Rule
99
+
100
+ If ANY file in the impl-phase evidence bundle's `filesChanged` matches a
101
+ canonical infrastructure path, the Lead MUST run the full per-package vitest
102
+ suite for every touched package — NOT the targeted files alone.
103
+
104
+ ### Canonical infrastructure paths
105
+
106
+ - `packages/core/src/store/**` — DB chokepoint, transactions, migrations
107
+ - `packages/core/src/orchestration/**` — spawn-prompt, dispatch resolution, IVTR
108
+ - `packages/core/src/dispatch/**` and `packages/cleo/src/dispatch/**` — typed dispatch
109
+ - `packages/contracts/src/**` — cross-package types (every consumer rebuilds)
110
+ - `packages/worktree/src/**` — worktree-create / git-shim integration
111
+ - `packages/core/src/migration/**` — schema bootstrapping
112
+ - any path whose basename contains `transaction`, `pragma`, or `migration`
113
+
114
+ ### Required test commands per touched package
115
+
116
+ ```bash
117
+ pnpm --filter @cleocode/<pkg> run test # for each touched package
118
+ ```
119
+
120
+ Attach the JSON output of each run as evidence
121
+ (`cleo docs add --labels test-output`) and reference the sha256 set in the
122
+ `--next` call. Approving on targeted-only results when infrastructure paths
123
+ are touched is grounds for loop-back with reason `infra-test-scope-violation`.
124
+
125
+ ### Enforcement
126
+
127
+ The IVTR Lead spawn prompt is auto-enriched by `resolvePhasePrompt()` in
128
+ `packages/core/src/lifecycle/ivtr-loop.ts` — when an infrastructure touch is
129
+ detected via `detectInfrastructureTouch()` (`packages/core/src/lifecycle/infra-touch.ts`),
130
+ a `### Blast-Radius Test Scope — MANDATORY (T9842)` block is appended to
131
+ the Validate-phase Lead prompt, listing the touched packages and the exact
132
+ `pnpm --filter` commands the Lead must run.
133
+
134
+ ---
135
+
80
136
  ## Output Format
81
137
 
82
138
  ### Validation Report Structure
package/skills.json CHANGED
@@ -1,24 +1,34 @@
1
1
  {
2
2
  "version": "2.1.0",
3
- "generated": "2026-03-02T05:45:00Z",
3
+ "generated": "2026-05-24T00:00:00Z",
4
4
  "skills": [
5
5
  {
6
6
  "name": "ct-cleo",
7
- "description": "CLEO task management protocol - core guidance for session, task, and workflow operations. Provides CLI-based workflow, session protocol, task discovery patterns, RCSD lifecycle overview, error handling, and the Human Render Contract (ADR-077). Load this skill for detailed CLEO protocol guidance.",
8
- "version": "2.2.0",
7
+ "description": "CLEO task management protocol - core guidance for session, task, and workflow operations. Provides CLI-based workflow, session protocol, task discovery patterns, RCSD lifecycle overview, error handling, the Human Render Contract (ADR-077), and the CLI Output Contract (ADR-086). Load this skill for detailed CLEO protocol guidance.",
8
+ "version": "2.3.0",
9
9
  "path": "skills/ct-cleo/SKILL.md",
10
- "references": ["skills/ct-cleo/references/session-protocol.md", "skills/ct-cleo/references/loom-lifecycle.md", "skills/ct-cleo/references/anti-patterns.md"],
10
+ "references": [
11
+ "skills/ct-cleo/references/session-protocol.md",
12
+ "skills/ct-cleo/references/loom-lifecycle.md",
13
+ "skills/ct-cleo/references/anti-patterns.md"
14
+ ],
11
15
  "core": true,
12
16
  "category": "core",
13
17
  "tier": 0,
14
18
  "protocol": null,
15
19
  "dependencies": [],
16
- "sharedResources": ["task-system-integration"],
17
- "compatibility": ["claude-code", "gemini-cli", "codex-cli"],
20
+ "sharedResources": [
21
+ "task-system-integration"
22
+ ],
23
+ "compatibility": [
24
+ "claude-code",
25
+ "gemini-cli",
26
+ "codex-cli"
27
+ ],
18
28
  "license": "MIT",
19
29
  "metadata": {
20
- "version": "2.2.0",
21
- "lastReviewed": "2026-05-23",
30
+ "version": "2.3.0",
31
+ "lastReviewed": "2026-05-24",
22
32
  "stability": "stable"
23
33
  }
24
34
  },
@@ -27,14 +37,32 @@
27
37
  "description": "Pipeline-aware orchestration for multi-agent workflows. Manages RCASD-IVTR+C pipeline progression for epics, delegates all work to subagents via provider-neutral spawning, enforces lifecycle gates before spawning, and reads only manifests. Use when orchestrating complex workflows, delegating to subagents, or managing epic pipeline progression.",
28
38
  "version": "4.0.0",
29
39
  "path": "skills/ct-orchestrator/SKILL.md",
30
- "references": ["skills/ct-orchestrator/references/autonomous-operation.md", "skills/ct-orchestrator/references/lifecycle-gates.md", "skills/ct-orchestrator/references/orchestrator-compliance.md", "skills/ct-orchestrator/references/orchestrator-handoffs.md", "skills/ct-orchestrator/references/orchestrator-patterns.md", "skills/ct-orchestrator/references/orchestrator-recovery.md", "skills/ct-orchestrator/references/orchestrator-spawning.md", "skills/ct-orchestrator/references/orchestrator-tokens.md", "skills/ct-orchestrator/references/SUBAGENT-PROTOCOL-BLOCK.md"],
40
+ "references": [
41
+ "skills/ct-orchestrator/references/autonomous-operation.md",
42
+ "skills/ct-orchestrator/references/lifecycle-gates.md",
43
+ "skills/ct-orchestrator/references/orchestrator-compliance.md",
44
+ "skills/ct-orchestrator/references/orchestrator-handoffs.md",
45
+ "skills/ct-orchestrator/references/orchestrator-patterns.md",
46
+ "skills/ct-orchestrator/references/orchestrator-recovery.md",
47
+ "skills/ct-orchestrator/references/orchestrator-spawning.md",
48
+ "skills/ct-orchestrator/references/orchestrator-tokens.md",
49
+ "skills/ct-orchestrator/references/SUBAGENT-PROTOCOL-BLOCK.md"
50
+ ],
31
51
  "core": true,
32
52
  "category": "core",
33
53
  "tier": 0,
34
54
  "protocol": "agent-protocol",
35
55
  "dependencies": [],
36
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
37
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
56
+ "sharedResources": [
57
+ "subagent-protocol-base",
58
+ "task-system-integration"
59
+ ],
60
+ "compatibility": [
61
+ "claude-code",
62
+ "cursor",
63
+ "windsurf",
64
+ "gemini-cli"
65
+ ],
38
66
  "license": "MIT",
39
67
  "metadata": {}
40
68
  },
@@ -49,8 +77,16 @@
49
77
  "tier": 0,
50
78
  "protocol": "implementation",
51
79
  "dependencies": [],
52
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
53
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
80
+ "sharedResources": [
81
+ "subagent-protocol-base",
82
+ "task-system-integration"
83
+ ],
84
+ "compatibility": [
85
+ "claude-code",
86
+ "cursor",
87
+ "windsurf",
88
+ "gemini-cli"
89
+ ],
54
90
  "license": "MIT",
55
91
  "metadata": {}
56
92
  },
@@ -59,14 +95,33 @@
59
95
  "description": "Epic planning and task decomposition for breaking down large initiatives into atomic, executable tasks. Provides dependency analysis, wave-based parallel execution planning, hierarchy management, and research linking.",
60
96
  "version": "3.0.0",
61
97
  "path": "skills/ct-epic-architect/SKILL.md",
62
- "references": ["skills/ct-epic-architect/references/bug-epic-example.md", "skills/ct-epic-architect/references/commands.md", "skills/ct-epic-architect/references/feature-epic-example.md", "skills/ct-epic-architect/references/migration-epic-example.md", "skills/ct-epic-architect/references/output-format.md", "skills/ct-epic-architect/references/patterns.md", "skills/ct-epic-architect/references/refactor-epic-example.md", "skills/ct-epic-architect/references/research-epic-example.md", "skills/ct-epic-architect/references/shell-escaping.md", "skills/ct-epic-architect/references/skill-aware-execution.md"],
98
+ "references": [
99
+ "skills/ct-epic-architect/references/bug-epic-example.md",
100
+ "skills/ct-epic-architect/references/commands.md",
101
+ "skills/ct-epic-architect/references/feature-epic-example.md",
102
+ "skills/ct-epic-architect/references/migration-epic-example.md",
103
+ "skills/ct-epic-architect/references/output-format.md",
104
+ "skills/ct-epic-architect/references/patterns.md",
105
+ "skills/ct-epic-architect/references/refactor-epic-example.md",
106
+ "skills/ct-epic-architect/references/research-epic-example.md",
107
+ "skills/ct-epic-architect/references/shell-escaping.md",
108
+ "skills/ct-epic-architect/references/skill-aware-execution.md"
109
+ ],
63
110
  "core": false,
64
111
  "category": "recommended",
65
112
  "tier": 1,
66
113
  "protocol": "decomposition",
67
114
  "dependencies": [],
68
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
69
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
115
+ "sharedResources": [
116
+ "subagent-protocol-base",
117
+ "task-system-integration"
118
+ ],
119
+ "compatibility": [
120
+ "claude-code",
121
+ "cursor",
122
+ "windsurf",
123
+ "gemini-cli"
124
+ ],
70
125
  "license": "MIT",
71
126
  "metadata": {}
72
127
  },
@@ -81,15 +136,23 @@
81
136
  "tier": 1,
82
137
  "protocol": "research",
83
138
  "dependencies": [],
84
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
85
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
139
+ "sharedResources": [
140
+ "subagent-protocol-base",
141
+ "task-system-integration"
142
+ ],
143
+ "compatibility": [
144
+ "claude-code",
145
+ "cursor",
146
+ "windsurf",
147
+ "gemini-cli"
148
+ ],
86
149
  "license": "MIT",
87
150
  "metadata": {}
88
151
  },
89
152
  {
90
153
  "name": "ct-spec-writer",
91
154
  "description": "Technical specification writing using RFC 2119 language for clear, unambiguous requirements. Creates protocol specifications, technical requirements, API specifications, and architecture documents with testable requirements and compliance criteria.",
92
- "version": "2.0.0",
155
+ "version": "2.1.0",
93
156
  "path": "skills/ct-spec-writer/SKILL.md",
94
157
  "references": [],
95
158
  "core": false,
@@ -97,8 +160,16 @@
97
160
  "tier": 1,
98
161
  "protocol": "specification",
99
162
  "dependencies": [],
100
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
101
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
163
+ "sharedResources": [
164
+ "subagent-protocol-base",
165
+ "task-system-integration"
166
+ ],
167
+ "compatibility": [
168
+ "claude-code",
169
+ "cursor",
170
+ "windsurf",
171
+ "gemini-cli"
172
+ ],
102
173
  "license": "MIT",
103
174
  "metadata": {}
104
175
  },
@@ -113,8 +184,16 @@
113
184
  "tier": 1,
114
185
  "protocol": "validation",
115
186
  "dependencies": [],
116
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
117
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
187
+ "sharedResources": [
188
+ "subagent-protocol-base",
189
+ "task-system-integration"
190
+ ],
191
+ "compatibility": [
192
+ "claude-code",
193
+ "cursor",
194
+ "windsurf",
195
+ "gemini-cli"
196
+ ],
118
197
  "license": "MIT",
119
198
  "metadata": {}
120
199
  },
@@ -129,24 +208,44 @@
129
208
  "tier": 2,
130
209
  "protocol": "contribution",
131
210
  "dependencies": [],
132
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
133
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
211
+ "sharedResources": [
212
+ "subagent-protocol-base",
213
+ "task-system-integration"
214
+ ],
215
+ "compatibility": [
216
+ "claude-code",
217
+ "cursor",
218
+ "windsurf",
219
+ "gemini-cli"
220
+ ],
134
221
  "license": "MIT",
135
222
  "metadata": {}
136
223
  },
137
224
  {
138
225
  "name": "ct-documentor",
139
226
  "description": "Documentation creation, editing, and review with CLEO style guide compliance. Coordinates specialized skills for lookup, writing, and review.",
140
- "version": "3.4.0",
227
+ "version": "3.12.0",
141
228
  "path": "skills/ct-documentor/SKILL.md",
142
229
  "references": [],
143
230
  "core": false,
144
231
  "category": "specialist",
145
232
  "tier": 2,
146
233
  "protocol": null,
147
- "dependencies": ["ct-docs-lookup", "ct-docs-write", "ct-docs-review"],
148
- "sharedResources": ["subagent-protocol-base", "task-system-integration"],
149
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
234
+ "dependencies": [
235
+ "ct-docs-lookup",
236
+ "ct-docs-write",
237
+ "ct-docs-review"
238
+ ],
239
+ "sharedResources": [
240
+ "subagent-protocol-base",
241
+ "task-system-integration"
242
+ ],
243
+ "compatibility": [
244
+ "claude-code",
245
+ "cursor",
246
+ "windsurf",
247
+ "gemini-cli"
248
+ ],
150
249
  "license": "MIT",
151
250
  "metadata": {}
152
251
  },
@@ -162,14 +261,19 @@
162
261
  "protocol": null,
163
262
  "dependencies": [],
164
263
  "sharedResources": [],
165
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
264
+ "compatibility": [
265
+ "claude-code",
266
+ "cursor",
267
+ "windsurf",
268
+ "gemini-cli"
269
+ ],
166
270
  "license": "MIT",
167
271
  "metadata": {}
168
272
  },
169
273
  {
170
274
  "name": "ct-docs-write",
171
275
  "description": "Documentation writing with CLEO's conversational, clear, user-focused style. Use when creating, editing, or improving documentation files.",
172
- "version": "1.1.0",
276
+ "version": "1.2.0",
173
277
  "path": "skills/ct-docs-write/SKILL.md",
174
278
  "references": [],
175
279
  "core": false,
@@ -178,7 +282,12 @@
178
282
  "protocol": null,
179
283
  "dependencies": [],
180
284
  "sharedResources": [],
181
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
285
+ "compatibility": [
286
+ "claude-code",
287
+ "cursor",
288
+ "windsurf",
289
+ "gemini-cli"
290
+ ],
182
291
  "license": "MIT",
183
292
  "metadata": {}
184
293
  },
@@ -194,7 +303,12 @@
194
303
  "protocol": null,
195
304
  "dependencies": [],
196
305
  "sharedResources": [],
197
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
306
+ "compatibility": [
307
+ "claude-code",
308
+ "cursor",
309
+ "windsurf",
310
+ "gemini-cli"
311
+ ],
198
312
  "license": "MIT",
199
313
  "metadata": {}
200
314
  },
@@ -209,8 +323,15 @@
209
323
  "tier": 2,
210
324
  "protocol": "contribution",
211
325
  "dependencies": [],
212
- "sharedResources": ["subagent-protocol-base"],
213
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
326
+ "sharedResources": [
327
+ "subagent-protocol-base"
328
+ ],
329
+ "compatibility": [
330
+ "claude-code",
331
+ "cursor",
332
+ "windsurf",
333
+ "gemini-cli"
334
+ ],
214
335
  "license": "MIT",
215
336
  "metadata": {}
216
337
  },
@@ -226,27 +347,59 @@
226
347
  "protocol": null,
227
348
  "dependencies": [],
228
349
  "sharedResources": [],
229
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
350
+ "compatibility": [
351
+ "claude-code",
352
+ "cursor",
353
+ "windsurf",
354
+ "gemini-cli"
355
+ ],
230
356
  "license": "MIT",
231
357
  "metadata": {}
232
358
  },
233
359
  {
234
360
  "name": "ct-council",
235
- "description": "Convene \"The Council\" a 5-advisor, shuffled gate-based peer-review, chairman-synthesis workflow for reviewing a plan, decision, architecture, or piece of work inside the current project. Use when the user says \"convene the council\" (or \"counsel\"), \"get the council on this\", \"council review\", \"run the five advisors\", \"stress-test this\", \"get multiple perspectives\", or asks for a rigorous multi-angle challenge of a proposal (Contrarian, First Principles, Expansionist, Outsider, Executor shuffled peer review with pass/fail gates convergence detector Chairman verdict). Operates on the current codebase each advisor grounds their analysis in actual files/commits before opining. Output is validated by scripts/validate.py.",
361
+ "description": "Convene \"The Council\" \u2014 a 5-advisor, shuffled gate-based peer-review, chairman-synthesis workflow for reviewing a plan, decision, architecture, or piece of work inside the current project. Use when the user says \"convene the council\" (or \"counsel\"), \"get the council on this\", \"council review\", \"run the five advisors\", \"stress-test this\", \"get multiple perspectives\", or asks for a rigorous multi-angle challenge of a proposal (Contrarian, First Principles, Expansionist, Outsider, Executor \u2192 shuffled peer review with pass/fail gates \u2192 convergence detector \u2192 Chairman verdict). Operates on the current codebase \u2014 each advisor grounds their analysis in actual files/commits before opining. Output is validated by scripts/validate.py.",
236
362
  "version": "1.0.0",
237
363
  "path": "skills/ct-council/SKILL.md",
238
- "references": ["skills/ct-council/references/chairman.md", "skills/ct-council/references/contrarian.md", "skills/ct-council/references/evidence-pack.md", "skills/ct-council/references/examples.md", "skills/ct-council/references/executor.md", "skills/ct-council/references/expansionist.md", "skills/ct-council/references/first-principles.md", "skills/ct-council/references/outsider.md", "skills/ct-council/references/peer-review.md"],
364
+ "references": [
365
+ "skills/ct-council/references/chairman.md",
366
+ "skills/ct-council/references/contrarian.md",
367
+ "skills/ct-council/references/evidence-pack.md",
368
+ "skills/ct-council/references/examples.md",
369
+ "skills/ct-council/references/executor.md",
370
+ "skills/ct-council/references/expansionist.md",
371
+ "skills/ct-council/references/first-principles.md",
372
+ "skills/ct-council/references/outsider.md",
373
+ "skills/ct-council/references/peer-review.md"
374
+ ],
239
375
  "core": false,
240
376
  "category": "specialist",
241
377
  "tier": 2,
242
378
  "protocol": null,
243
379
  "dependencies": [],
244
380
  "sharedResources": [],
245
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
381
+ "compatibility": [
382
+ "claude-code",
383
+ "cursor",
384
+ "windsurf",
385
+ "gemini-cli"
386
+ ],
246
387
  "license": "MIT",
247
388
  "metadata": {
248
- "triggers": ["convene the council", "council review", "run the five advisors", "stress-test this", "get multiple perspectives"],
249
- "advisors": ["Contrarian", "First Principles", "Expansionist", "Outsider", "Executor"]
389
+ "triggers": [
390
+ "convene the council",
391
+ "council review",
392
+ "run the five advisors",
393
+ "stress-test this",
394
+ "get multiple perspectives"
395
+ ],
396
+ "advisors": [
397
+ "Contrarian",
398
+ "First Principles",
399
+ "Expansionist",
400
+ "Outsider",
401
+ "Executor"
402
+ ]
250
403
  }
251
404
  },
252
405
  {
@@ -254,14 +407,22 @@
254
407
  "description": "Guide for creating effective skills. Use when creating a new skill or updating an existing skill that extends agent capabilities.",
255
408
  "version": "1.0.0",
256
409
  "path": "skills/ct-skill-creator/SKILL.md",
257
- "references": ["skills/ct-skill-creator/references/output-patterns.md", "skills/ct-skill-creator/references/workflows.md"],
410
+ "references": [
411
+ "skills/ct-skill-creator/references/output-patterns.md",
412
+ "skills/ct-skill-creator/references/workflows.md"
413
+ ],
258
414
  "core": false,
259
415
  "category": "meta",
260
416
  "tier": 3,
261
417
  "protocol": null,
262
418
  "dependencies": [],
263
419
  "sharedResources": [],
264
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
420
+ "compatibility": [
421
+ "claude-code",
422
+ "cursor",
423
+ "windsurf",
424
+ "gemini-cli"
425
+ ],
265
426
  "license": "MIT",
266
427
  "metadata": {}
267
428
  },
@@ -277,7 +438,12 @@
277
438
  "protocol": null,
278
439
  "dependencies": [],
279
440
  "sharedResources": [],
280
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
441
+ "compatibility": [
442
+ "claude-code",
443
+ "cursor",
444
+ "windsurf",
445
+ "gemini-cli"
446
+ ],
281
447
  "license": "MIT",
282
448
  "metadata": {}
283
449
  },
@@ -286,18 +452,43 @@
286
452
  "description": "LOOM (Logical Order of Operations Methodology) - the systematic framework for how CLEO processes project threads through the RCASD-IVTR+C pipeline. LOOM encompasses the full lifecycle methodology that transforms raw ideas into delivered artifacts, from Research through Release with the Contribution protocol (+C) running across all stages. References docs/concepts/CLEO-VISION.md for the complete LOOM framework, neural hierarchy model, and brain metaphor mapping.",
287
453
  "version": "1.0.0",
288
454
  "path": "docs/concepts/CLEO-VISION.md",
289
- "references": [".cleo/adrs/ADR-007-domain-consolidation.md", ".cleo/adrs/ADR-009-BRAIN-cognitive-architecture.md"],
455
+ "references": [
456
+ ".cleo/adrs/ADR-007-domain-consolidation.md",
457
+ ".cleo/adrs/ADR-009-BRAIN-cognitive-architecture.md"
458
+ ],
290
459
  "core": false,
291
460
  "category": "core",
292
461
  "tier": 0,
293
462
  "protocol": null,
294
463
  "dependencies": [],
295
464
  "sharedResources": [],
296
- "compatibility": ["claude-code", "cursor", "windsurf", "gemini-cli"],
465
+ "compatibility": [
466
+ "claude-code",
467
+ "cursor",
468
+ "windsurf",
469
+ "gemini-cli"
470
+ ],
297
471
  "license": "MIT",
298
472
  "metadata": {
299
- "concepts": ["LOOM", "RCASD-IVTR+C", "lifecycle pipeline", "neural hierarchy", "brain metaphor"],
300
- "domains": ["tasks", "session", "memory", "check", "pipeline", "orchestrate", "tools", "admin", "nexus", "sticky"]
473
+ "concepts": [
474
+ "LOOM",
475
+ "RCASD-IVTR+C",
476
+ "lifecycle pipeline",
477
+ "neural hierarchy",
478
+ "brain metaphor"
479
+ ],
480
+ "domains": [
481
+ "tasks",
482
+ "session",
483
+ "memory",
484
+ "check",
485
+ "pipeline",
486
+ "orchestrate",
487
+ "tools",
488
+ "admin",
489
+ "nexus",
490
+ "sticky"
491
+ ]
301
492
  }
302
493
  }
303
494
  ]