@sylad/cadence 0.7.0 → 0.9.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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +274 -17
- package/agents/qa-reviewer.md +15 -6
- package/bin/cadence.js +6 -1
- package/dist/audit.js +41 -19
- package/dist/check.js +5 -2
- package/dist/clean.js +225 -0
- package/dist/cli.js +113 -12
- package/dist/config.js +82 -6
- package/dist/deliver.js +83 -32
- package/dist/git.js +12 -2
- package/dist/link.js +15 -1
- package/dist/orchestrate/briefs.js +52 -0
- package/dist/orchestrate/command.js +498 -0
- package/dist/orchestrate/cycle.js +673 -0
- package/dist/orchestrate/guard.js +131 -0
- package/dist/orchestrate/launch.js +221 -0
- package/dist/orchestrate/lock.js +85 -0
- package/dist/orchestrate/pool.js +51 -0
- package/dist/orchestrate/result.js +94 -0
- package/dist/orchestrate/schemas.js +48 -0
- package/dist/orchestrate/state.js +93 -0
- package/dist/orchestrate/table.js +73 -0
- package/dist/plan.js +61 -2
- package/dist/proc.js +260 -0
- package/dist/recurring.js +19 -0
- package/dist/schedule.js +4 -1
- package/dist/session.js +18 -1
- package/dist/verify.js +114 -0
- package/package.json +18 -3
- package/skills/lead/SKILL.md +33 -13
- package/skills/session-close/SKILL.md +25 -4
- package/skills/session-start/SKILL.md +3 -0
- package/templates/orchestrate/fix-minors.md +18 -0
- package/templates/orchestrate/fix.md +16 -0
- package/templates/orchestrate/implement.md +20 -0
- package/templates/orchestrate/review-recheck.md +11 -0
- package/templates/orchestrate/review-small.md +11 -0
- package/templates/orchestrate/review.md +8 -0
- package/templates/orchestrate/ux.md +10 -0
package/dist/verify.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { constants } from 'node:os';
|
|
3
|
+
import { onTermination } from './proc.js';
|
|
4
|
+
import { describeCheck, realDeps, retryCheck, TIMED_OUT } from './deliver.js';
|
|
5
|
+
function killGroup(pgid, sig) {
|
|
6
|
+
try {
|
|
7
|
+
process.kill(-pgid, sig);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// groupe déjà vide
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Une commande de vérification, en groupe de processus détaché (nouvelle session, sans tty) : au délai,
|
|
15
|
+
* TOUT le groupe est tué (aucun enfant orphelin) ; un signal reçu par cadence lui est relayé. Asynchrone :
|
|
16
|
+
* les vérifications tournent en parallèle. Réservé aux vérifications (verify, session start) — jamais
|
|
17
|
+
* aux commandes de deliver, qui gardent le groupe de premier plan et le tty.
|
|
18
|
+
*/
|
|
19
|
+
function execGroup(root, cmd, env, timeoutMs, quiet) {
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
const child = spawn('sh', ['-c', cmd], {
|
|
22
|
+
cwd: root,
|
|
23
|
+
env: { ...process.env, ...env },
|
|
24
|
+
stdio: quiet ? 'ignore' : ['ignore', 'inherit', 'inherit'],
|
|
25
|
+
detached: true,
|
|
26
|
+
});
|
|
27
|
+
const pgid = child.pid;
|
|
28
|
+
if (pgid === undefined) {
|
|
29
|
+
child.once('error', () => resolve(127));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Ctrl-C, SIGTERM ou raccrochage reçu par cadence : relayé au groupe avant de sortir.
|
|
33
|
+
const forget = onTermination((sig) => killGroup(pgid, sig));
|
|
34
|
+
let timedOut = false;
|
|
35
|
+
const timer = setTimeout(() => {
|
|
36
|
+
timedOut = true;
|
|
37
|
+
killGroup(pgid, 'SIGKILL');
|
|
38
|
+
}, timeoutMs);
|
|
39
|
+
child.once('exit', (code, signal) => {
|
|
40
|
+
clearTimeout(timer);
|
|
41
|
+
forget();
|
|
42
|
+
if (timedOut)
|
|
43
|
+
killGroup(pgid, 'SIGKILL'); // sh mort avant ses enfants : le groupe est vidé quand même
|
|
44
|
+
resolve(timedOut ? TIMED_OUT : signal ? 128 + (constants.signals[signal] ?? 0) : (code ?? 1));
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Dépendances réelles des vérifications. `quiet` : sortie des commandes non relayée (rapport de session start). */
|
|
49
|
+
export function realCheckDeps(root, opts = {}) {
|
|
50
|
+
const { fetch, sleep, now } = realDeps(root);
|
|
51
|
+
return { fetch, sleep, now, exec: (cmd, env, timeoutMs) => execGroup(root, cmd, env, timeoutMs, !!opts.quiet) };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Rejoue des vérifications d'effet, TOUTES EN PARALLÈLE : chaque essai reçoit le budget entier
|
|
55
|
+
* (`attemptMs`, tuée au-delà : « délai dépassé »), une vérification lente ne prend rien aux autres.
|
|
56
|
+
* UNE passe par défaut ; avec `retryMs`, chacune est réessayée de son côté (toutes les POLL_VERIFY)
|
|
57
|
+
* jusqu'à ce délai. Durée totale bornée par retryMs + attemptMs. Résultats dans l'ordre des vérifications.
|
|
58
|
+
* Le code d'une vérification est celui de deliver (tryCheck/retryCheck) : aucune règle n'est dupliquée.
|
|
59
|
+
*/
|
|
60
|
+
export async function replayChecks(checks, deps, sha, env, opts) {
|
|
61
|
+
const until = deps.now() + opts.retryMs;
|
|
62
|
+
return Promise.all(checks.map(async (c) => ({ label: describeCheck(c, sha), reason: await retryCheck(c, deps, sha, env, until, () => opts.attemptMs) })));
|
|
63
|
+
}
|
|
64
|
+
export const resultLine = (r) => (r.reason === null ? `✓ ${r.label}` : `✗ ${r.label} — ${r.reason}`);
|
|
65
|
+
export function summaryLine(results) {
|
|
66
|
+
const red = results.filter((r) => r.reason !== null).length;
|
|
67
|
+
const n = results.length;
|
|
68
|
+
return red === 0
|
|
69
|
+
? `verify : ${n}/${n} vérifications vertes`
|
|
70
|
+
: `verify : ${red} effet${red > 1 ? 's' : ''} rouge${red > 1 ? 's' : ''} sur ${n} vérification${n > 1 ? 's' : ''}`;
|
|
71
|
+
}
|
|
72
|
+
/** Variables passées aux commandes de vérification, comme à celles de deliver. */
|
|
73
|
+
export function verifyEnv(sha) {
|
|
74
|
+
return { CADENCE_SHA: sha, CADENCE_SHORT: sha.slice(0, 7), CADENCE_BRANCH: '' };
|
|
75
|
+
}
|
|
76
|
+
/** Délai de chaque essai d'une vérification de `cadence verify`. */
|
|
77
|
+
export const VERIFY_ATTEMPT_MS = 120_000;
|
|
78
|
+
/** `cadence verify` : 0 tout vert, 1 un effet rouge, 2 rien à vérifier. */
|
|
79
|
+
export async function verifyCommand(ctx, deps) {
|
|
80
|
+
const { config, out } = ctx;
|
|
81
|
+
if (config.verify.length === 0) {
|
|
82
|
+
out(config.script !== undefined
|
|
83
|
+
? 'verify : aucune vérification déclarée — ce projet livre par son script (deliver.script) et ses contrôles sont les siens ; ' +
|
|
84
|
+
'déclarer deliver.verify dans cadence.yaml pour les rejouer hors livraison'
|
|
85
|
+
: 'verify : aucune vérification déclarée (deliver.verify)');
|
|
86
|
+
return 2;
|
|
87
|
+
}
|
|
88
|
+
const results = await replayChecks(config.verify, deps, ctx.sha, verifyEnv(ctx.sha), { retryMs: ctx.retry * 1000, attemptMs: VERIFY_ATTEMPT_MS });
|
|
89
|
+
for (const r of results)
|
|
90
|
+
out(resultLine(r));
|
|
91
|
+
out(summaryLine(results));
|
|
92
|
+
return results.some((r) => r.reason !== null) ? 1 : 0;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Délai de chaque vérification de « session start », lancées en parallèle : c'est aussi, à la mise à mort
|
|
96
|
+
* près, la durée totale — la reprise ne doit pas attendre un réseau absent.
|
|
97
|
+
*/
|
|
98
|
+
export const MORNING_BUDGET_MS = 10_000;
|
|
99
|
+
/**
|
|
100
|
+
* Lignes « Effets en production » du rapport de reprise : un seul essai par vérification, borné. Rien à dire
|
|
101
|
+
* (liste vide) pour un projet sans verify ; ne lève jamais — c'est un fait de plus, pas une condition.
|
|
102
|
+
*/
|
|
103
|
+
export async function effectLines(config, sha, deps) {
|
|
104
|
+
if (config.verify.length === 0)
|
|
105
|
+
return [];
|
|
106
|
+
try {
|
|
107
|
+
const results = await replayChecks(config.verify, deps, sha, verifyEnv(sha), { retryMs: 0, attemptMs: MORNING_BUDGET_MS });
|
|
108
|
+
const shown = results.filter((r) => r.reason !== null);
|
|
109
|
+
return shown.length === 0 ? [`✓ ${summaryLine(results)}`] : [...shown.map(resultLine), summaryLine(results)];
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
return [`✗ verify : ${e.message}`];
|
|
113
|
+
}
|
|
114
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylad/cadence",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.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",
|
|
@@ -9,8 +9,19 @@
|
|
|
9
9
|
"raf": "bin/raf.js",
|
|
10
10
|
"cadence": "bin/cadence.js"
|
|
11
11
|
},
|
|
12
|
-
"files": [
|
|
13
|
-
|
|
12
|
+
"files": [
|
|
13
|
+
"bin",
|
|
14
|
+
"dist",
|
|
15
|
+
"skills",
|
|
16
|
+
"agents",
|
|
17
|
+
"templates",
|
|
18
|
+
".claude-plugin",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=20"
|
|
24
|
+
},
|
|
14
25
|
"scripts": {
|
|
15
26
|
"build": "tsc -p tsconfig.build.json",
|
|
16
27
|
"test": "vitest run",
|
|
@@ -25,5 +36,9 @@
|
|
|
25
36
|
"@types/node": "^20.14.0",
|
|
26
37
|
"typescript": "^5.5.0",
|
|
27
38
|
"vitest": "^2.0.0"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "git+https://github.com/Sylad/cadence.git"
|
|
28
43
|
}
|
|
29
44
|
}
|
package/skills/lead/SKILL.md
CHANGED
|
@@ -34,26 +34,46 @@ progress, then drift that blocks a delivery, then ready quick wins. **Stop and w
|
|
|
34
34
|
|
|
35
35
|
## 2. Delegation
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
>
|
|
42
|
-
|
|
43
|
-
> Rules: test first; commit each sub-part as soon as its tests pass, with explicit paths (never
|
|
44
|
-
> `git add -A` or `commit -a`), and a message that cites the lot (`feat(<id>): …`); run the project's
|
|
45
|
-
> full test suite and build before reporting; do not push, deliver, run `raf done`, `raf ux` or
|
|
46
|
-
> `raf review`.
|
|
47
|
-
> If something is ambiguous or needs a decision, stop and report the question instead of guessing.
|
|
48
|
-
> Report: commits (sha + subject), tests and build results with their numbers, what you could not
|
|
49
|
-
> verify, open questions.
|
|
37
|
+
The default way to delegate is **`cadence orchestrate`** (section 2b): a program, not a conversation, that runs
|
|
38
|
+
one fresh short session per step. When the lead delegates by hand, the brief is the template
|
|
39
|
+
`templates/orchestrate/implement.md` of the cadence package — the single source, tested; `cadence
|
|
40
|
+
orchestrate --dry-run <project>:<lot>` writes it rendered for the lot. The lead runs
|
|
41
|
+
`cd <project> && raf start <lot>`, fills `{{chemin}}`, `{{lot}}`, `{{titre}}` and `{{objectif}}` (what done
|
|
42
|
+
looks like, from the human's words), and keeps the rest verbatim.
|
|
50
43
|
|
|
51
44
|
A lot that adds or changes a screen is `visible`: after the implementation, have the
|
|
52
45
|
`ux-reviewer` agent review it (give it the URL or the way to run the app) and bring its verdict and
|
|
53
46
|
proposed sub-tasks back to the human.
|
|
54
47
|
|
|
48
|
+
### 2b. A wave through `cadence orchestrate`
|
|
49
|
+
|
|
50
|
+
Once the human has chosen the lots, the lead runs, **in the background** (it is notified at the end; no
|
|
51
|
+
silent wait, no polling loop — `cadence orchestrate --status` shows where the wave is):
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
cadence orchestrate <project>:<lot> <project>:<lot>@haiku … [--budget 2M]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`cadence orchestrate --dry-run …` first when a precondition is in doubt. The program, not the lead, runs
|
|
58
|
+
for each lot a fresh short session per step — implementation (Sonnet), UX review if the lot is `visible`
|
|
59
|
+
and the project declares how to see its app (`orchestrate.ux` in `cadence.yaml`), code review last
|
|
60
|
+
(Opus, the `code-reviewer` agent), a correction in a new session if the review is not compliant (two
|
|
61
|
+
passes at most) — and records `raf review` itself when the code review is compliant. The state is in
|
|
62
|
+
`.cadence/runs/<wave>/`, not in this conversation. `@haiku` only when the human writes it, for a
|
|
63
|
+
mechanical lot. Exit code: 0 all ready · 1 some lots handed back · 2 refused before acting · 3 wave
|
|
64
|
+
suspended (budget or usage limit; `--resume --budget …` continues).
|
|
65
|
+
|
|
66
|
+
What the orchestrator does **not** do, and stays with the lead: choose the lots (with the human), bring the
|
|
67
|
+
questions back (`--resume --answer <project>:<lot> "…"`), look at the UX reviewer's captures and record
|
|
68
|
+
`raf ux` (the orchestrator reports its verdict, it never records it), re-verify (section 3, point 2),
|
|
69
|
+
`raf done`, push and deliver. Minor findings and proposed sub-tasks come back in the table: adding them to
|
|
70
|
+
the plan is the lead's decision. If an orchestrated wave is running in a repository, do not commit there
|
|
71
|
+
and do not deliver it (`cadence deliver` refuses).
|
|
72
|
+
|
|
55
73
|
## 3. Check
|
|
56
74
|
|
|
75
|
+
0. After an orchestrated wave the review is already done, by a fresh session: read the table, then go to
|
|
76
|
+
point 2. For a lot delegated by hand:
|
|
57
77
|
1. The `code-reviewer` agent, as a fresh subagent (most capable model), reviews the lot. Give it
|
|
58
78
|
the absolute path of the project and the lot id, **not** the author's report: it reads the diff
|
|
59
79
|
itself from the commits that cite the lot, runs the checks, and returns real defects only,
|
|
@@ -34,18 +34,39 @@ With no project named, run `cadence session close` in each project touched durin
|
|
|
34
34
|
(`raf review enable`), UX review of a visible lot (`raf ux enable`) → have the `code-reviewer` / `ux-reviewer` agent review it, then record its
|
|
35
35
|
verdict with `raf review <id> "…"` / `raf ux <id> "…"`; never write a verdict nobody gave;
|
|
36
36
|
- rerun until the check part is clean.
|
|
37
|
-
3. **
|
|
37
|
+
3. **Stale working files** (report section "Nettoyage proposé", from `session.clean` in `cadence.yaml`):
|
|
38
|
+
list them to the human — shared tmp folder, screenshots no one refers to, throwaway scripts,
|
|
39
|
+
folders left by tests — and delete them only after the human agrees, with explicit paths (never a
|
|
40
|
+
wildcard `rm`, never a file `git` tracks). The agreement can be old by then: right before
|
|
41
|
+
deleting, re-run `cadence session close` (or the scan) and delete only the entries that are
|
|
42
|
+
still proposed, never one the human named from memory. Delete a proposed symbolic link as a
|
|
43
|
+
link (`rm path`, no trailing `/`, never `rm -r` through it). Before proposing a screenshot, check nothing still
|
|
44
|
+
refers to it (plan, news, docs). Anything kept: leave it, it will be listed again next close. No
|
|
45
|
+
section: nothing to do; a project with no `session.clean` can propose adding it.
|
|
46
|
+
An entry is proposed only if it could be measured entirely. Age: a folder's age is that of the
|
|
47
|
+
most recent entry it contains, an entry's age counting from the later of its modification and status-change times. The report never proposes: a git repository, a folder that
|
|
48
|
+
contains one at any depth, and anything under a `.git` folder; a git directory without a `.git`
|
|
49
|
+
entry (bare repository, mirror, `--separate-git-dir`, worktree admin folder — recognised by
|
|
50
|
+
`HEAD` with `objects` and `refs`, or with `commondir`), anything inside it or a folder that
|
|
51
|
+
contains one; anything `git` tracks, in any repository that has a `.git` entry above it (one limit: a bare repository driven with an external work tree, `git --git-dir=~/.dotfiles --work-tree=~`, leaves no `.git` beside its files — their tracked files can be proposed, so check a proposed entry is not one); a name starting with `.`
|
|
52
|
+
unless the pattern itself starts that name with `.`; anything behind a symbolic link a `*`
|
|
53
|
+
matched (the link itself may be proposed: remove the link, never `rm -r` through it — a segment
|
|
54
|
+
written in full before the first `*` does follow its link); the repository itself or a folder that contains it;
|
|
55
|
+
anything that could not be read entirely — those are listed apart as "illisible(s)": tell the
|
|
56
|
+
human, never delete those, and never widen the list by hand to entries the report did not
|
|
57
|
+
propose.
|
|
58
|
+
4. **Memory, filtered** (only if you keep a persistent memory): write down what the repository does
|
|
38
59
|
NOT already say — a trap and its cause, a decision or correction from the human, a collaboration
|
|
39
60
|
rule. Test: "do `git log` or the docs already say it?" → then no memory.
|
|
40
|
-
|
|
61
|
+
5. **Skills and agents, on threshold, PROPOSED**: a skill when the same chain of commands was done by
|
|
41
62
|
hand at least twice today; an agent update when an agent got something wrong or its domain moved.
|
|
42
63
|
List them with the benefit; the human decides. Never create them here.
|
|
43
64
|
When the report has a "Faits propres au projet" section (`session.close` in `cadence.yaml`), treat
|
|
44
65
|
what it flags as part of this hygiene; with a read-only plan, use the project's own tool wherever
|
|
45
66
|
these steps say `raf`.
|
|
46
|
-
|
|
67
|
+
6. **Clean state**: everything committed and pushed, no delivery running. If the command still exits 1,
|
|
47
68
|
say what remains and do NOT say the session is closed.
|
|
48
|
-
|
|
69
|
+
7. **Three lines for next time**: `cadence session next "…" "…" "…"` — the next `session-start` shows them.
|
|
49
70
|
The lines replace the previous notes. Without a line the command refuses and keeps them; erase
|
|
50
71
|
them on purpose with `cadence session next --clear`, only when nothing is left to say.
|
|
51
72
|
|
|
@@ -30,6 +30,9 @@ three most useful items across projects and wait. With a project named, work in
|
|
|
30
30
|
- **Done since**: 3 to 6 lines, grouped by lot, not by commit. Mention commits without a lot.
|
|
31
31
|
- **Drift**: each `✗` line from the check, with the one command that fixes it.
|
|
32
32
|
- **Delivery in progress** or a stale lock: no new delivery until it is resolved.
|
|
33
|
+
- **Effects in production** ("Effets en production"): a red `✗` line is the first thing to say —
|
|
34
|
+
a delivered feature that no longer works outranks any new lot; re-run `cadence verify` to confirm
|
|
35
|
+
(a network blip also shows as red).
|
|
33
36
|
- **Notes from the last close**, if any.
|
|
34
37
|
- **Project facts** ("Faits propres au projet"), when the project plugs its own morning script in
|
|
35
38
|
(`session.start` in `cadence.yaml`): summarise what bears on today's choice — deadlines, the
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Work in `{{chemin}}` on lot `{{lot}}` — "{{titre}}" — of its plan.
|
|
2
|
+
A fresh review found only minor findings: the lot is compliant, and this is the one pass that treats them.
|
|
3
|
+
Commits of the lot so far:
|
|
4
|
+
{{commits}}
|
|
5
|
+
|
|
6
|
+
Minor findings:
|
|
7
|
+
{{constats}}
|
|
8
|
+
|
|
9
|
+
Fix each minor finding that is right, and nothing else. Rules: test first; commit each fix as soon as
|
|
10
|
+
its tests pass, with explicit paths (never `git add -A` or `commit -a`), and a message that cites the
|
|
11
|
+
lot (`fix({{lot}}): …`); run the project's full test suite and build before reporting; do not push,
|
|
12
|
+
deliver, run `raf done`, `raf ux` or `raf review`. Read the project's CLAUDE.md first.
|
|
13
|
+
Do not stop to ask. A finding that is wrong, or not worth its change, is not fixed: list it under
|
|
14
|
+
"choix" in your report with the reason — the reviewer re-reads it and the lead sees it. Leave
|
|
15
|
+
"questions" empty. Making no commit at all is a valid outcome when every finding is rejected.
|
|
16
|
+
You are one short session of an orchestrated wave: do not launch subagents (the Agent tool is disabled).
|
|
17
|
+
Give your final report as the structured output (commits, tests, build, what you could not verify, choices).
|
|
18
|
+
{{reponse}}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Work in `{{chemin}}` on lot `{{lot}}` — "{{titre}}" — of its plan. A fresh review of the commits
|
|
2
|
+
of this lot found the defects below; fix them, and nothing else.
|
|
3
|
+
Commits of the lot so far:
|
|
4
|
+
{{commits}}
|
|
5
|
+
|
|
6
|
+
Findings to fix:
|
|
7
|
+
{{constats}}
|
|
8
|
+
|
|
9
|
+
Rules: test first; commit each fix as soon as its tests pass, with explicit paths (never
|
|
10
|
+
`git add -A` or `commit -a`), and a message that cites the lot (`fix({{lot}}): …`); run the project's
|
|
11
|
+
full test suite and build before reporting; do not push, deliver, run `raf done`, `raf ux` or
|
|
12
|
+
`raf review`. Read the project's CLAUDE.md first.
|
|
13
|
+
If a finding is wrong, or fixing it needs a decision, stop and report the question instead of guessing.
|
|
14
|
+
You are one short session of an orchestrated wave: do not launch subagents (the Agent tool is disabled).
|
|
15
|
+
Give your final report as the structured output (commits, tests, build, what you could not verify, questions).
|
|
16
|
+
{{reponse}}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Work in `{{chemin}}` on lot `{{lot}}` — "{{titre}}" — of its plan
|
|
2
|
+
(`docs/plan/raf.yaml`, or the file named by `plan:` in `cadence.yaml`; read the lot, its notes and sub-tasks, and the project's CLAUDE.md first).
|
|
3
|
+
Goal: {{objectif}}
|
|
4
|
+
Rules: test first; commit each sub-part as soon as its tests pass, with explicit paths (never
|
|
5
|
+
`git add -A` or `commit -a`), and a message that cites the lot (`feat({{lot}}): …`); run the project's
|
|
6
|
+
full test suite and build before reporting; do not push, deliver, run `raf done`, `raf ux` or
|
|
7
|
+
`raf review`.
|
|
8
|
+
Decide minor interpretation questions yourself (the wording of a message, a name, a default, the
|
|
9
|
+
reading of an ambiguous line of the lot) and list each one under "choix" in your report, with the
|
|
10
|
+
alternative you did not take — the reviewer re-reads them. Stop and ask (under "questions") only on a real blocker:
|
|
11
|
+
a decision that changes the scope or the architecture, is costly to undo, or that the plan, its notes
|
|
12
|
+
and the project's CLAUDE.md do not settle.
|
|
13
|
+
Report: commits (sha + subject), tests and build results with their numbers, what you could not
|
|
14
|
+
verify, choices made, open questions.
|
|
15
|
+
|
|
16
|
+
You are one short session of an orchestrated wave: do not launch subagents (the Agent tool is disabled).
|
|
17
|
+
Give your final report as the structured output, not as free text. If the plan is kept by the project's own tool
|
|
18
|
+
(read-only for `raf`), use that tool's commands named in the project's CLAUDE.md, never `raf start|done|note`.
|
|
19
|
+
{{commits}}
|
|
20
|
+
{{reponse}}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Do a short re-review of lot `{{lot}}` — "{{titre}}" — of the repository `{{chemin}}`, following your
|
|
2
|
+
agent instructions. A full review found the lot compliant with minor findings, and one pass has since
|
|
3
|
+
treated them. Check that the minor findings fixed are fixed, that the fixes broke nothing, and that the
|
|
4
|
+
rest of the lot is still sound: read the diff yourself from the commits that cite the lot
|
|
5
|
+
(`raf commits {{lot}}`, or `git log`), run the checks, report real defects only. A new minor finding
|
|
6
|
+
is reported, not a reason to ask for another pass. This is a code review only.
|
|
7
|
+
{{choix}}
|
|
8
|
+
You are read-only: do not modify, commit, push or run `raf review|ux|done`. Do not launch subagents.
|
|
9
|
+
Give your report as the structured output: counts of blocking / major / minor findings, each finding
|
|
10
|
+
(severity, file, line, text), proposed sub-tasks, what you could not verify, and the one-line verdict
|
|
11
|
+
for `raf review {{lot}}`.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Review lot `{{lot}}` — "{{titre}}" — of the repository `{{chemin}}`, following your agent instructions.
|
|
2
|
+
This lot is small: one single pass covers the code review AND the usability review.
|
|
3
|
+
You are given the repository path and the lot id only: read the diff yourself from the commits that
|
|
4
|
+
cite the lot (`raf commits {{lot}}`, or `git log`), run the checks, report real defects only.
|
|
5
|
+
{{ux}}
|
|
6
|
+
{{choix}}
|
|
7
|
+
You are read-only: do not modify, commit, push or run `raf review|ux|done`. Do not launch subagents.
|
|
8
|
+
Give your report as the structured output: counts of blocking / major / minor findings (usability
|
|
9
|
+
findings included, each tied to a named rule — Nielsen heuristic or WCAG 2.2 AA criterion — or a
|
|
10
|
+
measurement), each finding (severity, file, line, text), proposed sub-tasks, what you could not
|
|
11
|
+
verify, and the one-line verdict for `raf review {{lot}}`.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Review lot `{{lot}}` — "{{titre}}" — of the repository `{{chemin}}`, following your agent instructions.
|
|
2
|
+
You are given the repository path and the lot id only: read the diff yourself from the commits that
|
|
3
|
+
cite the lot (`raf commits {{lot}}`, or `git log`), run the checks, report real defects only.
|
|
4
|
+
{{choix}}
|
|
5
|
+
You are read-only: do not modify, commit, push or run `raf review|ux|done`. Do not launch subagents.
|
|
6
|
+
Give your report as the structured output: counts of blocking / major / minor findings, each finding
|
|
7
|
+
(severity, file, line, text), proposed sub-tasks, what you could not verify, and the one-line verdict
|
|
8
|
+
for `raf review {{lot}}`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Review the usability and accessibility of lot `{{lot}}` — "{{titre}}" — of the repository `{{chemin}}`,
|
|
2
|
+
following your agent instructions. Read the diff yourself from the commits that cite the lot
|
|
3
|
+
(`raf commits {{lot}}`, or `git log`).
|
|
4
|
+
{{ux}}
|
|
5
|
+
You are read-only: do not modify, commit, push or run `raf review|ux|done`. Do not launch subagents.
|
|
6
|
+
Ground every finding in a named rule (Nielsen heuristic, WCAG 2.2 AA criterion) or a measurement;
|
|
7
|
+
describe a mockup before proposing any redesign, never code it.
|
|
8
|
+
Give your report as the structured output: counts of blocking / major / minor findings, each finding
|
|
9
|
+
(severity, file, line, text), proposed sub-tasks, what you could not verify, and the one-line verdict
|
|
10
|
+
for `raf ux {{lot}}`.
|