@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 +1 -1
- package/skills/ct-dev-workflow/SKILL.md +22 -10
- package/skills/ct-lean/SKILL.md +10 -3
- package/skills/ct-lean/__tests__/review-audit.test.ts +57 -0
- package/skills/ct-lean/references/audit.md +82 -0
- package/skills/ct-lean/references/review.md +100 -0
- package/skills/ct-release-orchestrator/SKILL.md +5 -4
- package/skills/manifest.json +4 -4
- package/skills/ct-lean/references/reviewing.md +0 -22
package/package.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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-
|
|
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.
|
|
513
|
-
|
|
514
|
-
`
|
|
515
|
-
|
|
516
|
-
|
|
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
|
package/skills/ct-lean/SKILL.md
CHANGED
|
@@ -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
|
|
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.
|
|
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/
|
|
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.
|
|
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-
|
|
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.
|
|
36
|
-
|
|
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
|
package/skills/manifest.json
CHANGED
|
@@ -566,7 +566,7 @@
|
|
|
566
566
|
},
|
|
567
567
|
{
|
|
568
568
|
"name": "ct-dev-workflow",
|
|
569
|
-
"version": "3.1.
|
|
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.
|
|
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.
|
|
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.
|