@cleocode/skills 2026.10.17 → 2026.10.18

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.10.17",
3
+ "version": "2026.10.18",
4
4
  "description": "CLEO skill definitions - bundled with CLEO monorepo",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ct-dev-workflow
3
3
  description: Development workflow orchestration for task-driven development with atomic commits, conventional commit messages, and systematic release processes. Enforces task traceability, branch discipline, smart test scope selection, and GitHub Actions integration. Use when committing code, creating releases, managing branches, or following contribution protocols. Triggers on commit operations, release preparation, or workflow compliance needs.
4
- version: 3.1.20
4
+ version: 3.1.22
5
5
  protocol: contribution
6
6
  dependencies: []
7
7
  sharedResources:
@@ -14,7 +14,7 @@ compatibility:
14
14
  - gemini-cli
15
15
  license: MIT
16
16
  metadata:
17
- version: 3.1.20
17
+ version: 3.1.22
18
18
  tier: core
19
19
  install: harness
20
20
  covers:
@@ -26,7 +26,7 @@ metadata:
26
26
  - packages/core/src/hooks.ts
27
27
  - packages/core/templates/git-hooks/**
28
28
  - packages/contracts/src/git-hooks.ts
29
- lastReviewed: 2026-10-15
29
+ lastReviewed: 2026-10-16
30
30
  stability: stable
31
31
  ---
32
32
 
@@ -509,13 +509,11 @@ Provider delivery receives canonical SDK file reads and Git discovery through a
509
509
  Adapters do not acquire a runtime dependency on core for these utilities.
510
510
 
511
511
  Project business rules live in tracked `.cleo/hooks.json`; generated provider entries
512
- are delivery outputs. Until the hooks-v1 stable promotion, a stable build is inert (T13557):
513
- `cleo hook sync --activate` refuses with `E_HOOKS_V1_UNRELEASED`, existing receipts report
514
- `unreleased` and never run (a required `--ci` check fails), and `--disable` still works; a
515
- `-canary.N` build or the promotion's `cleo.releasedFeatures` stamp opens the gate
516
- (`core/src/hooks/release-gate.ts`). A source checkout carries a stable version, so hooks
517
- cannot be activated on main either; only code passing the gate's `allowUnreleased` option
518
- (tests) opts in. Preview with `cleo hook sync --dry-run`; explicit local activation
512
+ are delivery outputs. hooks-v1 was promoted in v2026.10.17 and is released in source
513
+ (T13776), so every build activates and runs project hooks. The release gate
514
+ (`core/src/hooks/release-gate.ts`, T13557) stays for a future hook feature: while one is
515
+ unreleased, `cleo hook sync --activate` refuses with `E_HOOKS_V1_UNRELEASED` and existing
516
+ receipts report `unreleased` and never run. Preview with `cleo hook sync --dry-run`; explicit local activation
519
517
  uses `cleo hook sync --activate` and binds definitions, handlers and dependencies to
520
518
  current hashes. Source drift requires reactivation and runs no handler: Git, worktree, direct
521
519
  and CI refuse (naming `cleo hook sync --activate`) every event bound by the approved bindings
@@ -533,6 +531,20 @@ Launcher faults allow locally regardless of checker error policy. File inputs an
533
531
  provider records use bounded regular-file reads; FIFOs are rejected. Unsupported
534
532
  provider bindings remain unsupported in delivery summaries, including mixed bindings.
535
533
 
534
+ The Stop event has ONE CLEO entry per provider, `cleo hook stop --provider claude-code|codex`
535
+ (T13796), in order goal tick → ask-enforce → session end. The goal runtime goes first, only when
536
+ `.opencode/goals/` exists (`CLEO_GOAL_TICK_COMMAND`, default `ocg tick`, Stop JSON on stdin,
537
+ JSON-only stdout, at most 60 s, its process group SIGKILLed at the deadline): a block is
538
+ re-serialised as exactly `{decision, reason}` (reason capped) and skips the rest. Next, an ask-enforce block (T13420) wins and keeps
539
+ the session open, because the agent still owes the owner an ask. Otherwise Claude Code's runs
540
+ `cleo session end --quiet` as before; Codex's never ends the session (its Stop fires every turn
541
+ and never did). Every step fails open to the session end (missing, failing or timed-out tick;
542
+ ask-enforce error); `CLEO_GOAL_TICK=off` skips the tick; `CLEO_ASK_ENFORCE=off` or heavy-command
543
+ mode `off` (`CLEO_HEAVY_COMMAND_HOOK` / `resources.heavyCommandHook`, read at run time) skips the
544
+ ask check, as they removed its separate hook before.
545
+ Sync folds the separate ask-enforce and old session-end Stop entries into it in place; Codex's
546
+ rides the heavy-command mode, Claude Code's always stays.
547
+
536
548
  Init, upgrade and inspection share the commit-msg, pre-commit and pre-push installer.
537
549
  Git determines effective hooksPath and the common directory, including linked worktrees.
538
550
  Exact known template hashes or local receipts authorize refresh; a marker alone does
@@ -4,17 +4,20 @@ description: >-
4
4
  Lean change discipline for CLEO work: the smallest change that fully solves the task, and
5
5
  a reply a busy owner understands in one read. Use on every coding task (writing, fixing,
6
6
  refactoring, reviewing, choosing dependencies) and when the owner asks for the simplest
7
- solution, YAGNI, or complains about over-engineering or bloat. Never trades away evidence
7
+ solution, YAGNI, or complains about over-engineering or bloat; also for a lean code review
8
+ ("review this", "review my PR") or a whole-repo audit ("audit the repo", "what can I
9
+ delete"). Never trades away evidence
8
10
  gates, package boundaries, validation, data safety or anything the task asked for.
9
11
  license: MIT
10
12
  metadata:
11
- version: 1.2.0
13
+ version: 1.4.0
12
14
  tier: core
13
15
  install: harness
14
16
  covers:
15
17
  - packages/core/src/orchestration/lean-change.ts
16
18
  - packages/cleo/src/cli/commands/lean.ts
17
19
  - packages/core/src/orchestration/lean-debt.ts
20
+ - packages/core/src/orchestration/lean-gain.ts
18
21
  lastReviewed: 2026-10-13
19
22
  stability: stable
20
23
  attribution: Adapted from Ponytail 5.1.0 by DietrichGebert (MIT) — https://github.com/DietrichGebert/ponytail
@@ -39,6 +42,8 @@ The level resolves from `CLEO_LEAN_LEVEL`, then the session level, then the `lea
39
42
  config key, then `full`. When the owner asks for a level ("go ultra", "lean off"), set it:
40
43
  `cleo lean level ultra --session` for this session, `cleo lean level lite` for the project,
41
44
  `--global` for every project. `cleo lean level` alone shows the level and its source.
45
+ `cleo lean gain --card` shows the measured benchmark scoreboard: averages, never a number
46
+ for this repo.
42
47
 
43
48
  ## Before you write
44
49
 
@@ -104,7 +109,9 @@ never in the reply (CLEO-INJECTION.md universal protocol step 7).
104
109
 
105
110
  - `references/examples.md` — worked CLEO examples, over-built vs lean.
106
111
  - `references/never-cut.md` — the never-cut list with the gate that enforces each row.
107
- - `references/reviewing.md` — a lean review checklist for PRs and your own diff.
112
+ - `references/review.md` — review a change: correct, safe, load, tested, fast, lean, on
113
+ `cleo nexus` callers and blast radius; numbered four-part findings and a verdict.
114
+ - `references/audit.md` — audit a whole repo the same way, on `cleo map` and `cleo nexus`.
108
115
 
109
116
  ---
110
117
 
@@ -0,0 +1,57 @@
1
+ /**
2
+ * T13665 — ct-lean review and audit workflows: Ponytail parity on CLEO's code
3
+ * graph. Pins the priorities, the four-part finding contract, the nexus-backed
4
+ * caller and dead-code checks, and the MIT attribution.
5
+ *
6
+ * @task T13665
7
+ */
8
+ import { readFileSync } from 'node:fs';
9
+ import { dirname, join, resolve } from 'node:path';
10
+ import { fileURLToPath } from 'node:url';
11
+ import { describe, expect, it } from 'vitest';
12
+
13
+ const skillRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
14
+ const read = (rel: string) => readFileSync(join(skillRoot, rel), 'utf-8');
15
+
16
+ describe.each(['references/review.md', 'references/audit.md'])('ct-lean %s (T13665)', (rel) => {
17
+ // Markdown wraps lines anywhere, including inside bold; compare on single spaces.
18
+ const text = read(rel).replace(/\s+/g, ' ');
19
+
20
+ it('keeps the priority order and the four-part finding contract', () => {
21
+ expect(text).toContain('correct, safe, holds under load, tested, fast, lean');
22
+ for (const part of ['What this is', 'Problem', 'Fix', 'If we skip it']) {
23
+ expect(text).toMatch(new RegExp(`\\*\\*${part}:?\\*\\*`));
24
+ }
25
+ for (const group of ['Must fix', 'Should fix', 'Nice to have']) {
26
+ expect(text).toMatch(new RegExp(`\\*\\*${group}:?\\*\\*`));
27
+ }
28
+ expect(text).toContain('Verdict');
29
+ expect(text).toContain('Not checked:');
30
+ });
31
+
32
+ it('checks callers and unused code with cleo nexus, never an empty impact alone', () => {
33
+ expect(text).toContain('cleo nexus impact <symbol>');
34
+ expect(text).toContain('cleo nexus status');
35
+ expect(text).toMatch(/\*\*and\*\* (no string|a grep)/);
36
+ });
37
+
38
+ it('treats a named shortcut as a decision and points at cleo lean debt', () => {
39
+ expect(text).toContain('`shortcut:`');
40
+ expect(text).toContain('cleo lean debt');
41
+ });
42
+
43
+ it('credits Ponytail under its MIT license', () => {
44
+ expect(text).toContain('Ponytail 5.1.0');
45
+ expect(text).toContain('MIT');
46
+ expect(read('LICENSE-ponytail')).toContain('MIT License');
47
+ });
48
+ });
49
+
50
+ describe('ct-lean SKILL.md points at both workflows (T13665)', () => {
51
+ it('lists review.md and audit.md, not the old checklist', () => {
52
+ const skill = read('SKILL.md');
53
+ expect(skill).toContain('references/review.md');
54
+ expect(skill).toContain('references/audit.md');
55
+ expect(skill).not.toContain('references/reviewing.md');
56
+ });
57
+ });
@@ -0,0 +1,82 @@
1
+ # Audit a whole repo with ct-lean
2
+
3
+ Audit the repo like the senior developer who just inherited it and gets paged when it
4
+ breaks. Order of importance: **correct, safe, holds under load, tested, fast, lean**. The
5
+ owner asked for a report, so give it in full. Use this for "audit this codebase", "find
6
+ bloat", "what can I delete". It is a one-shot report that changes nothing.
7
+
8
+ Adapted from Ponytail 5.1.0's `ponytail-audit` (DietrichGebert, MIT; see
9
+ `../LICENSE-ponytail`), rebuilt on CLEO's code graph and project map.
10
+
11
+ ## 1. Map first
12
+
13
+ - Audit what the owner names: a folder, a package, or the whole repo. Nothing named: the
14
+ whole repo.
15
+ - Survey with `cleo map` (stack, architecture, structure, conventions, testing,
16
+ integrations, concerns). `cleo map --focus concerns` goes straight to the risky parts.
17
+ - Check the code graph is fresh with `cleo nexus status`; re-index with
18
+ `cleo nexus analyze` if it is stale and you may.
19
+ - See how the code hangs together with `cleo nexus clusters` (communities) and
20
+ `cleo nexus flows` (execution flows). Read the main flows end to end: user input, money,
21
+ auth, data writes, background jobs, anything shared between processes.
22
+ - Find the expected load (README, deploy config) and say which load you assumed.
23
+ - In a big repo, go deep where a mistake costs the most, not file by file. Say which parts
24
+ you did not read.
25
+
26
+ ## 2. Look for
27
+
28
+ 1. **Bug:** wrong result, crash, missed edge case, callers that disagree with what a
29
+ function returns, the same rule applied differently in two places.
30
+ 2. **Risk:** security holes, privacy (one user's data reaching another), data loss. In
31
+ CLEO: DB opens or table writes outside the chokepoint, swallowed errors, self-attested
32
+ evidence.
33
+ 3. **Scale:** check-then-write races, the same work done by every process, memory that only
34
+ grows, a query per item, O(n²) on big input, per-process state that must be shared.
35
+ 4. **Missing test:** risky logic with no test that fails when it breaks. One good test, not
36
+ coverage.
37
+ 5. **Speed:** big slowdowns are problems; small wins are suggestions.
38
+ 6. **Lean:** code that should not exist or should be smaller.
39
+ - delete: dead code, unused options, flags and config, speculative features
40
+ - reuse: two helpers doing the same thing (keep one, name the path)
41
+ - stdlib / native: a dependency doing what a few lines or the platform can do
42
+ - yagni: an interface with one implementation, a factory with one product, a wrapper
43
+ that only passes calls through
44
+ - merge: near-copies that must change together
45
+ - split: one function or class doing several unrelated jobs (split by job, never by
46
+ line count)
47
+ - boundary: code in the wrong package (see the AGENTS.md package table)
48
+
49
+ ## 3. Check before you report
50
+
51
+ - Every finding needs a concrete case. No case, no finding.
52
+ - Before calling code unused: `cleo nexus impact <symbol>` shows no callers **and** a grep
53
+ of the whole tree (tests, fixtures, config, string and dynamic references) finds none.
54
+ An empty impact alone never proves it unused.
55
+ - A `shortcut:` (or older `ponytail:`) comment that names its limit is a decision, not a
56
+ finding, unless the expected load already crosses it. `cleo lean debt` lists them; one
57
+ with no upgrade trigger is worth a line.
58
+ - Propose the smallest fix that works. Prefer fixes that delete code.
59
+ - No style taste, no "consider", no vague worries.
60
+
61
+ ## 4. Output
62
+
63
+ Very simple English. Start with `What this repo does:` in two or three sentences, and the
64
+ load you assumed.
65
+
66
+ Then the findings in three groups, most important first, skipping empty groups: **Must
67
+ fix** (bug, security, privacy, data loss, breaks at the expected load), **Should fix**
68
+ (risky code without a test, real slowness, duplication, mixed jobs, code that should not
69
+ exist), **Nice to have** (small speed-ups, shorter forms).
70
+
71
+ Number findings across all groups, at most 20; if you left smaller ones out, say how many.
72
+ Every finding has four parts (**What this is**, **Problem**, **Fix**, **If we skip it**),
73
+ each one or two short sentences, with its `path:line`.
74
+
75
+ End with:
76
+ - `Verdict:` one line: healthy, or what to fix first.
77
+ - `Lean: -<N> lines, -<M> dependencies possible.` when lean findings exist.
78
+ - `Not checked:` the parts you did not read or could not run.
79
+
80
+ Nothing found: `What this repo does:`, then `Healthy. Nothing to fix.` and one line on what
81
+ you checked. The audit changes no code. In CLEO, file each serious finding as a task so it
82
+ does not stay only in chat.
@@ -0,0 +1,100 @@
1
+ # Review a change with ct-lean
2
+
3
+ Review a change like the senior developer who gets paged when it breaks. Order of
4
+ importance: **correct, safe, holds under load, tested, fast, lean**. Lean still matters:
5
+ every extra line must be read, tested and fixed later. The owner asked for a report, so
6
+ give it in full. Use this for "review this", "review my PR", "review the last commit",
7
+ and for your own diff before `cleo verify`.
8
+
9
+ Adapted from Ponytail 5.1.0's `ponytail-review` (DietrichGebert, MIT; see
10
+ `../LICENSE-ponytail`), rebuilt on CLEO's code graph and evidence rules.
11
+
12
+ ## 1. Understand first
13
+
14
+ - Review what the owner names: uncommitted or staged changes, a branch, a PR, or files.
15
+ Nothing named: the uncommitted changes, or the last commit if there are none.
16
+ - Check the code graph is fresh with `cleo nexus status`. A stale index means its answers
17
+ below are incomplete; say so under **Not checked**.
18
+ - Read the diff, then the code it touches. For every changed function, run
19
+ `cleo nexus context <symbol>` (callers, callees, the flows it belongs to) and
20
+ `cleo nexus impact <symbol>` (blast radius). These are parsed from source, so they are
21
+ exact where grep guesses. Static analysis cannot see dynamic or string references, so
22
+ also grep for the name before you claim nothing else calls it.
23
+ - For a PR or commit range, `cleo nexus diff` shows new and removed relations and broken
24
+ call chains between the two commits.
25
+ - Trace the real flow: where data comes in, what is stored, what goes out.
26
+ - Find the expected load in the repo (README, deploy config): one person running a script,
27
+ or many users and processes at once. Judge scale against it and say which load you assumed.
28
+
29
+ ## 2. Look for
30
+
31
+ 1. **Bug:** wrong result, crash, missed edge case (empty, zero, last item, rounding, time
32
+ zones), a caller broken by the change, a fix in one caller while the shared function
33
+ stays broken.
34
+ 2. **Risk:** security holes (injection, weak randomness, secrets, unchecked user input),
35
+ privacy (one user's data reaching another), data loss (swallowed errors, writes in the
36
+ wrong order, no transaction). In CLEO: a raw DB open or table write outside the
37
+ chokepoint, a `catch (err: unknown)`, an evidence gate self-attested.
38
+ 3. **Scale:** fine for one user, wrong for many: check-then-write races, the same work done
39
+ by every process, memory or lists that only grow, a query per item, O(n²) on big input,
40
+ per-process state that must be shared.
41
+ 4. **Missing test:** risky new logic (a branch, a parser, money, security, a data write, a
42
+ bug fix) with no test that fails when it breaks. One good test, not coverage.
43
+ 5. **Speed:** big slowdowns are problems. Small wins (work repeated in a hot loop) are
44
+ suggestions.
45
+ 6. **Lean:** code that should not exist or should be smaller.
46
+ - delete: dead code, unused options, speculative features
47
+ - reuse: the repo already has this helper, contract or chokepoint (name the path)
48
+ - stdlib / native: the platform already does it; a new dependency for a few lines
49
+ - yagni: an abstraction with one implementation, config nobody sets
50
+ - merge: near-copies that must change together
51
+ - split: one function doing several unrelated jobs. Split by job, never by line count.
52
+ - boundary: code in the wrong package (see the AGENTS.md package table)
53
+
54
+ ## 3. Check before you report
55
+
56
+ - Every finding needs a concrete case: "this input or situation leads to this wrong
57
+ result". No case, no finding.
58
+ - Re-read the lines and confirm: the caller exists (`cleo nexus context`), the value can
59
+ really be empty, the code really is unused (no callers in `cleo nexus impact` **and** no
60
+ string or dynamic reference in a grep).
61
+ - A shortcut marked with a `shortcut:` (or older `ponytail:`) comment that names its limit
62
+ is a decision, not a finding, unless the expected load already crosses it.
63
+ `cleo lean debt` lists them all.
64
+ - Propose the smallest fix that works. Prefer fixes that delete code. Never add layers,
65
+ frameworks or config the problem does not need.
66
+ - No style taste, no "consider", no vague worries.
67
+
68
+ ## 4. Output
69
+
70
+ Very simple English: short sentences, everyday words. Explain a technical term the first
71
+ time you use it.
72
+
73
+ Start with `What this change does:` in two or three sentences.
74
+
75
+ Then the findings in three groups, skipping empty groups:
76
+ - **Must fix:** bug, security, privacy, data loss, breaks at the expected load.
77
+ - **Should fix:** risky code without a test, real slowness, duplication, a function that
78
+ mixes jobs, code that should not exist.
79
+ - **Nice to have:** small speed-ups, shorter forms.
80
+
81
+ Number findings across all groups, so the owner can say "fix 2 and 5". Every finding has
82
+ four parts, each one or two short sentences:
83
+
84
+ 2. **Orders land on the wrong day** (`billing/close_day.py:L40-52`)
85
+ - **What this is:** At midnight this job closes the day and bills all orders of that day.
86
+ - **Problem:** It takes "today" from the server clock, which runs in UTC. An order placed
87
+ at 00:30 in Berlin is billed on the day before.
88
+ - **Fix:** Compute the day once in the shop's time zone. One line, nothing else changes.
89
+ - **If we skip it:** Late orders show the wrong date, and accounting fixes them by hand.
90
+
91
+ End with:
92
+ - `Verdict: Ship.` or `Verdict: fix 1 and 3 first.`
93
+ - `Lean: -<N> lines possible.` when lean findings exist.
94
+ - `Not checked:` one line, if something mattered and you could not check it (a stale
95
+ `cleo nexus status`, an untested path, a harness you could not run).
96
+
97
+ Nothing found: `What this change does:`, then `Looks good. Ship.` and one line on what you
98
+ checked. The review lists findings and changes no code. In CLEO, file each serious
99
+ finding as a task (`cleo add --type task --parent <epic> --title ... --acceptance "..."`)
100
+ so none stays only in chat.
@@ -7,7 +7,7 @@ adrRefs:
7
7
  - ADR-063
8
8
  - ADR-065
9
9
  metadata:
10
- version: 3.2.5
10
+ version: 3.2.6
11
11
  tier: on-demand
12
12
  install: harness
13
13
  covers:
@@ -15,7 +15,7 @@ metadata:
15
15
  - packages/core/src/validation/protocols/protocols-markdown/release.md
16
16
  - packages/cleo/src/cli/commands/release.ts
17
17
  loomStage: release
18
- lastReviewed: 2026-10-11
18
+ lastReviewed: 2026-10-16
19
19
  stability: stable
20
20
  ---
21
21
 
@@ -32,8 +32,9 @@ hotfixes are exempt. The promotion gate runs before GitHub Release creation.
32
32
  That plan also makes `scripts/mark-hotfix-release.mjs` stamp
33
33
  `cleo.releasedFeatures: ["hooks-v1"]` into `@cleocode/core`, which opens the
34
34
  hooks-v1 runtime gate on the stable build (T13557); stable candidates without it
35
- prove the runtime inert. Remove `hooks-v1` from `UNRELEASED_HOOK_FEATURES` in a
36
- normal PR after the promotion, before the next stable release.
35
+ prove the runtime inert. hooks-v1 was promoted in v2026.10.17 and is released
36
+ in source since T13776 (`UNRELEASED_HOOK_FEATURES` is empty), so later releases
37
+ need neither the flag nor the stamp.
37
38
  `cleo release plan` refuses a stable plan whose source opens that gate since the
38
39
  previous tag (`hooks-v1` leaving the set, a changed `hooksV1Released`, a deleted
39
40
  gate) with `E_HOOKS_V1_PROMOTION_REQUIRED`, unless it is the promotion or passes
@@ -566,7 +566,7 @@
566
566
  },
567
567
  {
568
568
  "name": "ct-dev-workflow",
569
- "version": "3.1.20",
569
+ "version": "3.1.22",
570
570
  "description": "Development workflow orchestration for task-driven development with atomic commits, conventional commit messages, and systematic release processes. Enforces task traceability, branch discipline, smart test scope selection, and GitHub Actions integration. Use when committing code, creating releases, managing branches, or following contribution protocols. Triggers on commit operations, release preparation, or workflow compliance needs.",
571
571
  "path": "skills/ct-dev-workflow",
572
572
  "tier": 0,
@@ -983,8 +983,8 @@
983
983
  },
984
984
  {
985
985
  "name": "ct-lean",
986
- "version": "1.2.0",
987
- "description": "Lean change discipline for CLEO work: the smallest change that fully solves the task, and a reply a busy owner understands in one read. Use on every coding task (writing, fixing, refactoring, reviewing, choosing dependencies) and when the owner asks for the simplest solution, YAGNI, or complains about over-engineering or bloat. Never trades away evidence gates, package boundaries, validation, data safety or anything the task asked for.",
986
+ "version": "1.4.0",
987
+ "description": "Lean change discipline for CLEO work: the smallest change that fully solves the task, and a reply a busy owner understands in one read. Use on every coding task (writing, fixing, refactoring, reviewing, choosing dependencies) and when the owner asks for the simplest solution, YAGNI, or complains about over-engineering or bloat; also for a lean code review (\"review this\", \"review my PR\") or a whole-repo audit (\"audit the repo\", \"what can I delete\"). Never trades away evidence gates, package boundaries, validation, data safety or anything the task asked for.",
988
988
  "path": "skills/ct-lean",
989
989
  "tier": 0,
990
990
  "deliveryTier": "core",
@@ -1168,7 +1168,7 @@
1168
1168
  },
1169
1169
  {
1170
1170
  "name": "ct-release-orchestrator",
1171
- "version": "3.2.5",
1171
+ "version": "3.2.6",
1172
1172
  "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.",
1173
1173
  "path": "skills/ct-release-orchestrator",
1174
1174
  "tier": 1,
@@ -1,22 +0,0 @@
1
- # Reviewing a diff with ct-lean
2
-
3
- Use this when reviewing a PR or your own diff before `cleo verify`.
4
-
5
- 1. **Scope.** Does every changed file serve the task's acceptance criteria? Name anything
6
- that does not, such as an unrelated refactor or a speculative option.
7
- 2. **Reuse.** Was there an existing helper, accessor, contract or chokepoint for this? Check
8
- `packages/core/src` and `packages/contracts/src`. A new utility that duplicates one is a
9
- finding.
10
- 3. **Abstraction.** Count the new interfaces, options, config keys and wrappers. Each one
11
- needs a caller today; "for later" is a finding.
12
- 4. **Completeness.** Grep the callers of every changed exported symbol. A caller, fixture or
13
- doc left behind is a finding. Lean never means half-done.
14
- 5. **Root cause.** Is a bug fixed in the shared code, or patched at one call site?
15
- 6. **Checks.** New non-trivial logic has one focused test. Test expectations were not edited
16
- to match broken code.
17
- 7. **Never-cut list.** Validation, data safety, security, evidence, type safety, package
18
- boundary: confirm none were trimmed to shorten the diff.
19
- 8. **Shortcuts.** Each known limit carries `shortcut: <limit>, <when to upgrade>`.
20
-
21
- Report findings as the reply format says: verdict first, then one line per finding with its
22
- file and line, then what you did not check.