@sylad/cadence 0.20.0 → 0.22.0
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/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +146 -8
- package/bin/cadence.js +4 -1
- package/dist/articles.js +86 -0
- package/dist/audit.js +16 -2
- package/dist/cli.js +29 -8
- package/dist/config.js +92 -3
- package/dist/deliver.js +56 -9
- package/dist/docsync.js +57 -0
- package/dist/hud-context.js +117 -0
- package/dist/lead.js +34 -10
- package/dist/orchestrate/briefs.js +1 -1
- package/dist/orchestrate/command.js +200 -15
- package/dist/orchestrate/continue.js +96 -0
- package/dist/orchestrate/cycle.js +48 -13
- package/dist/orchestrate/launch.js +5 -2
- package/dist/orchestrate/registry.js +10 -0
- package/dist/orchestrate/state.js +9 -5
- package/dist/plan.js +11 -0
- package/package.json +1 -1
- package/skills/lead/SKILL.md +34 -3
- package/templates/orchestrate/review-small.md +1 -0
- package/templates/orchestrate/review.md +1 -0
package/dist/plan.js
CHANGED
|
@@ -97,6 +97,10 @@ export class Plan {
|
|
|
97
97
|
lots.flow = false; // « lots: [] » écrit par init : passer en style bloc
|
|
98
98
|
return new Plan(path, doc, !/^lots:[^\n]*\n(?:#[^\n]*\n)*- /m.test(text), settings);
|
|
99
99
|
}
|
|
100
|
+
/** Le plan tel qu'il est maintenant sur le disque (un script a pu l'écrire depuis la lecture), mêmes réglages. */
|
|
101
|
+
reloaded() {
|
|
102
|
+
return Plan.load(this.path, this.settings);
|
|
103
|
+
}
|
|
100
104
|
save() {
|
|
101
105
|
this.writable();
|
|
102
106
|
writeFileSync(this.path, this.doc.toString({ lineWidth: 0, indentSeq: this.indentSeq }));
|
|
@@ -317,6 +321,13 @@ export class Plan {
|
|
|
317
321
|
this.doc.get('lots').add(node);
|
|
318
322
|
return id;
|
|
319
323
|
}
|
|
324
|
+
/** Déclare les dépôts voisins d'un lot (clé `repos:`) : un chemin seul, ou `{ path, cite }` quand le voisin est partagé. */
|
|
325
|
+
setRepos(lotId, repos) {
|
|
326
|
+
this.writable();
|
|
327
|
+
const node = this.doc.createNode(repos.map((r) => (r.cite === undefined ? r.path : { path: r.path, cite: r.cite })));
|
|
328
|
+
node.flow = true;
|
|
329
|
+
this.lotNode(lotId).set('repos', node);
|
|
330
|
+
}
|
|
320
331
|
addTask(lotId, title) {
|
|
321
332
|
this.writable();
|
|
322
333
|
const lot = this.lotNode(lotId);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylad/cadence",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "A small, repo-native working method: a versioned plan linked to your commits, a changelog with screenshots, session rituals and deliveries proven by their effect.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Sylvain Ladoire",
|
package/skills/lead/SKILL.md
CHANGED
|
@@ -18,9 +18,9 @@ commands (its CLAUDE.md names them), never with `raf start|done|note|ux|review`.
|
|
|
18
18
|
(section 2b) count toward this limit: orchestrate sessions plus subagents never exceed two. A wave
|
|
19
19
|
already caps itself (`--max-sessions`, 2 by default, shared by every wave); before starting a
|
|
20
20
|
subagent, check `cadence orchestrate --status`, and while a wave runs, start none beyond the free
|
|
21
|
-
slots.
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
slots. Read the free slots, do not compute them: `cadence orchestrate --status` and `cadence lead tour` print
|
|
22
|
+
`créneaux libres : N sur 2` (the registry subtracts, for each live wave, min(cap, repositories it still holds)
|
|
23
|
+
from the two slots; no line from `lead tour` means no live wave, so both are free). Never raise `--max-sessions` above two to speed a wave up.
|
|
24
24
|
- **Never two subagents in the same repository at the same time**, and the lead does not commit in a
|
|
25
25
|
repository where a subagent is working.
|
|
26
26
|
- **Deliveries and `raf ux` / `raf review` verdicts are done by the lead, one project at a time** —
|
|
@@ -97,6 +97,37 @@ questions back (`--resume --answer <project>:<lot> "…"`), look at the UX revie
|
|
|
97
97
|
the plan is the lead's decision. A minor finding becomes a lot of its own only if it describes an observable bug (a wrong output, a crash, a measured regression); otherwise it stays a note of the originating lot, so that a review never feeds the next one. If an orchestrated wave is running in a repository, do not commit there
|
|
98
98
|
and do not deliver it (`cadence deliver` refuses).
|
|
99
99
|
|
|
100
|
+
### 2c. Chaining without the human
|
|
101
|
+
|
|
102
|
+
Once the human has given the **first choice and the order** (the lots, and the priority: `--priority` or the
|
|
103
|
+
`priority:` list of the parent folder's `cadence.yaml`), the lead does not come back to ask « next? ». For each lot a
|
|
104
|
+
wave hands back **ready**, it chains, in this order, one project at a time: re-verify it yourself (section 3, point 2),
|
|
105
|
+
`raf done` (a read-only plan: the project's own command; a `visible` lot first waits for the human's UX verdict, `raf ux`, and is neither closed nor delivered without it — the chain goes on with the other lots), push, deliver (section 4), the `qa-reviewer` check that
|
|
106
|
+
section asks for; then it starts the next wave, in the declared priority — `cadence orchestrate --continue --priority …` draws the next ready lot
|
|
107
|
+
of the plan itself (section 2b), and the limits of section « Limits that always apply » still hold. A lot that was not
|
|
108
|
+
handed back ready (refused, review not compliant after the correction passes, red delivery, blocking QA finding) is
|
|
109
|
+
not chained over: it is reported, and the chain goes on with the lots that do not depend on it.
|
|
110
|
+
|
|
111
|
+
**The threshold.** Before every new wave, read the context of the lead session with `cadence session context`: the
|
|
112
|
+
`cadence-hud` mod publishes the context of each session, one file per session named after its id, and the command reads the
|
|
113
|
+
one named by `$CLAUDE_CODE_SESSION_ID` (Claude Code sets it in the environment of your Bash, so it is your own session,
|
|
114
|
+
whatever the folder; `--session <id>` overrides it). Without the variable it falls back to the folder only if a single
|
|
115
|
+
session publishes for it; two sessions in one folder make it exit 2 ("pass --session"), never guess the latest. It prints
|
|
116
|
+
`ctx 42 % (84000/200000)`, the figure the `ctx` segment of the band shows, which the band publishes to
|
|
117
|
+
a file because it is only a rendering the model cannot see. If the command fails (exit code 2: the band is not loaded in
|
|
118
|
+
this session, several sessions share the folder without the variable, or the figure is older than two minutes), treat it as
|
|
119
|
+
**at the threshold**: you cannot prove you are under it, and without the band loaded the lead does not chain.
|
|
120
|
+
From **60 %** upward, start nothing: at the threshold the lead runs `session-close` in each project touched, writes its
|
|
121
|
+
memory (filtered, as `session-close` says), and records three lines for next time with `cadence session next` — the wave
|
|
122
|
+
that was about to start comes first among them. Under it, chain. The lead says in one sentence which side of the threshold
|
|
123
|
+
it is on each time it chains or stops; it never waits for the figure to move (never a polling loop).
|
|
124
|
+
|
|
125
|
+
**What stays with the human**: the first choice and the order; the questions a session raised (the lead brings them
|
|
126
|
+
back at once and does not answer in the human's place); the UX reservations (`raf ux` is recorded on the human's
|
|
127
|
+
verdict, a UX reviewer's captures are looked at by the human). While a question or a UX reservation is pending on a
|
|
128
|
+
lot, the chain goes on with the other lots and does not wait for it. A delivery that needs the human's confirmation
|
|
129
|
+
(their standing instructions, section 4) is a stop of the chain, not a bypass.
|
|
130
|
+
|
|
100
131
|
## 3. Check
|
|
101
132
|
|
|
102
133
|
0. After an orchestrated wave the review is already done, by a fresh session: read the table, then go to
|
|
@@ -5,6 +5,7 @@ cite the lot (`raf commits {{lot}}`, or `git log`), run the checks, report real
|
|
|
5
5
|
{{repos}}
|
|
6
6
|
{{ux}}
|
|
7
7
|
{{checks}}
|
|
8
|
+
{{docs}}
|
|
8
9
|
{{choix}}
|
|
9
10
|
A proposed sub-task describes an observable bug (a wrong output, a crash, a measured regression); any other minor finding stays a note of this lot, not a sub-task.
|
|
10
11
|
You are read-only: do not modify, commit, push or run `raf review|ux|done`. Do not launch subagents.
|
|
@@ -3,6 +3,7 @@ You are given the repository path and the lot id only: read the diff yourself fr
|
|
|
3
3
|
cite the lot (`raf commits {{lot}}`, or `git log`), run the checks, report real defects only.
|
|
4
4
|
{{repos}}
|
|
5
5
|
{{checks}}
|
|
6
|
+
{{docs}}
|
|
6
7
|
{{choix}}
|
|
7
8
|
A proposed sub-task describes an observable bug (a wrong output, a crash, a measured regression); any other minor finding stays a note of this lot, not a sub-task.
|
|
8
9
|
You are read-only: do not modify, commit, push or run `raf review|ux|done`. Do not launch subagents.
|