@sylad/cadence 1.6.0 → 1.8.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 +47 -1734
- package/agents/acceptance-writer.md +1 -0
- package/bin/cadence.js +4 -1
- package/dist/audit.js +4 -3
- package/dist/cli.js +68 -7
- package/dist/config.js +46 -0
- package/dist/corrections.js +57 -22
- package/dist/deliver.js +8 -1
- package/dist/orchestrate/accept.js +8 -3
- package/dist/orchestrate/briefs.js +1 -1
- package/dist/orchestrate/command.js +3 -0
- package/dist/orchestrate/cycle.js +68 -6
- package/dist/perf.js +559 -0
- package/dist/state.js +29 -0
- package/docs/cadence-hud.md +50 -0
- package/docs/corrections.md +24 -0
- package/docs/cycle-vague-dark.svg +42 -0
- package/docs/cycle-vague-light.svg +42 -0
- package/docs/deliver.md +204 -0
- package/docs/fonctionnement-lead-dark.svg +101 -0
- package/docs/fonctionnement-lead-light.svg +101 -0
- package/docs/fonctionnement-lot-dark.svg +38 -0
- package/docs/fonctionnement-lot-light.svg +38 -0
- package/docs/fonctionnement-service-dark.svg +23 -0
- package/docs/fonctionnement-service-light.svg +23 -0
- package/docs/fonctionnement-wave-dark.svg +66 -0
- package/docs/fonctionnement-wave-light.svg +66 -0
- package/docs/fonctionnement.md +106 -0
- package/docs/lead-workflow-dark.svg +200 -0
- package/docs/lead-workflow-light.svg +200 -0
- package/docs/lead.md +149 -0
- package/docs/news.md +245 -0
- package/docs/orchestrate.md +639 -0
- package/docs/overview.md +27 -0
- package/docs/perf.md +84 -0
- package/docs/raf.md +192 -0
- package/docs/releasing.md +59 -0
- package/docs/session.md +107 -0
- package/docs/skills.md +76 -0
- package/docs/spec.md +60 -0
- package/docs/stabilite.md +35 -0
- package/docs/whats-new.md +83 -0
- package/package.json +29 -1
- package/skills/lead/SKILL.md +7 -0
- package/templates/acceptation-runner.mjs +1 -1
- package/templates/fiche-back.yaml +1 -1
- package/templates/fiche.yaml +1 -1
package/docs/spec.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[← cadence](../README.md)
|
|
2
|
+
|
|
3
|
+
# spec
|
|
4
|
+
|
|
5
|
+
`cadence spec check <fiche.yaml>` checks a **sheet** (`fiche.yaml`, the machine-readable output of the spec step): a **screen sheet** (a lot with `screen:`), a **back-end sheet** (a lot that changes a behaviour without a screen) or a **mixed sheet** with both parts. The screen part is designed in
|
|
6
|
+
[docs/superpowers/specs/2026-10-10-etape-spec-design.md](superpowers/specs/2026-10-10-etape-spec-design.md)). Start from the template
|
|
7
|
+
[`templates/fiche.yaml`](../templates/fiche.yaml) (it passes the check as is), a worked example sits next to the design. It prints one
|
|
8
|
+
`✗ …` line per violation and exits **0** when the sheet is valid, **1** with violations, **2** when the file is missing, is not YAML or the usage is wrong. The invariants:
|
|
9
|
+
|
|
10
|
+
- `ecran` has `id`, `titre`, `route` (starts with `/`), `lot`, `maquette`, and `largeurs: [1440, 390]`; `etats` holds at least `vide`, `chargement`, `erreur`, none twice;
|
|
11
|
+
- `champs[]`: a unique kebab-case `id` (it is also the mockup's `data-testid`), `libelle`, `type`, `source`, and a boolean `obligatoire`;
|
|
12
|
+
- `regles[]` are numbered `R1`, `R2`… in order with no gap; each has an `etat` that is one of `etats`, an `enonce`, a `message` (the exact text on screen, or `null`),
|
|
13
|
+
a `statut` — `sourcee` with the `source` it comes from, or `hypothese` with the `si_faux` that says what would change — and at least one planned test, named `Rn — …`;
|
|
14
|
+
- `masque` (optional, only on a rule of state `vide`) lists the fields the rule makes disappear: every id must be a field of the sheet and none may be one the rule shows in `champs`;
|
|
15
|
+
- `actions[]` are numbered `A1`… in order, their `declencheur` is a field id (or `null` for the page load), their `appel` reads `VERB /path`, and the `regles` they carry exist.
|
|
16
|
+
|
|
17
|
+
**Back-end sheet** (L187; design: [docs/superpowers/specs/2026-10-11-etape-spec-back-design.md](superpowers/specs/2026-10-11-etape-spec-back-design.md)). Start from [`templates/fiche-back.yaml`](../templates/fiche-back.yaml) (it passes the check as is); a worked example, a real lot of ol-companion, sits next to the design. The sheet has `sujet` instead of `ecran` (no `etats`, `champs`, mockup), and the same `regles`. The back-end invariants, one `✗ …` line each:
|
|
18
|
+
|
|
19
|
+
- `sujet` has `id` (kebab-case, the folder name `docs/specs/<id>/`), `titre`, `lot`, and a `perimetre` with `modules`, `endpoints` and `jobs` (lists of texts, at least one entry in the three) and an optional `hors_perimetre`;
|
|
20
|
+
- `cas[]` are numbered `C1`, `C2`… with no gap, each with `titre`, `acteur`, `declencheur`, `preconditions`, `nominal` (a non-empty list of steps), `resultat`, and `alternatives` — a list of `{ si, alors, regles }`, each citing at least one existing rule — or `alternatives: []` with its reason in `sans_alternative`; every case is cited by at least one rule;
|
|
21
|
+
- a back-end rule has `cas` (at least one existing case id) instead of `etat`, plus the screen rule's `enonce`, `statut` (`sourcee` + `source`, or `hypothese` + `si_faux`) and tests named `Rn — …`; `message`, `champs` and `masque` only make sense on a rule attached to a state;
|
|
22
|
+
- `contrats[]` are numbered `A1`… with no gap, each with an `appel` (`VERB /path`, `job <name>` or `commande <name>`), `entree`, `sortie`, `erreurs` — a list of `{ code, message }` where `code` is `HTTP <n>` or `log debug|log|warn|warning|error|info|critical|fatal|verbose` and `message` the exact text — or `erreurs: []` with its reason in `sans_erreur`, and the `regles` it carries exist;
|
|
23
|
+
- `donnees[]` are numbered `D1`…, each with `objet`, `note`, a boolean `existant` and a `modification` (`aucune`, `ajout` or `changement`); an existing object that is modified carries the `decision` of the lead (the answer to the targeted question). The list may be empty (`[]`: the lot touches no data).
|
|
24
|
+
|
|
25
|
+
**Mixed sheet** (a lot with `screen:` and a back-end part): `sujet` **and** `ecran` side by side, with the same `id` (the folder name) and the same `lot`. A rule is attached to a state (`etat`, a screen rule) or to cases (`cas`), at least one of the two. The `A` ids are shared: the actions of the screen and the `contrats` are numbered `A1…An` with no gap over the whole, and an action that calls an API already listed in `contrats` points to it with `contrat: Ax` instead of repeating its `appel`. An action that has its own `appel` equal to the `appel` of a contract is reported (it must point to the contract). A sheet without `ecran` refuses `actions`, `etats` and `champs` (they only make sense with a screen part), and a rule with `etat` there gets that single report. A sheet that only has `ecran` stays valid as it is (no migration); `sujet` is required as soon as the lot is back-end or mixed.
|
|
26
|
+
|
|
27
|
+
`cadence spec check` prints the same summary line for each kind (`N cas, N règles (N hypothèses), N contrats, N données` for a back-end sheet) and keeps its exit codes: 0 valid, 1 violations, 2 usage.
|
|
28
|
+
|
|
29
|
+
`cadence spec reseal <lot> <test> --reason texte` is the lead's way to correct one sealed acceptance test of the lot in progress that contradicts its sheet (unchanged, or amended by commits of the lot, L217; of a delivered lot, also by commits of another delivered lot, L229) (of a delivered lot: add `--porteur <lot in progress>`), see [The accept step](orchestrate.md#the-accept-step-red-acceptance-tests-and-their-lock).
|
|
30
|
+
|
|
31
|
+
`cadence spec qa <fiche.yaml>` derives from a valid sheet the section of `docs/qa/expectations.md` for its screen and prints it on the standard output
|
|
32
|
+
(it never writes the file: you paste the section, and the lead commits it like the rest of the plan files). A sheet with violations prints them on the
|
|
33
|
+
error output, nothing on the standard one, and exits 1. The derivation is built so that the planned empty and error states are never reported as defects:
|
|
34
|
+
|
|
35
|
+
- `## <route>` is the screen's route;
|
|
36
|
+
- `shows:` — one line per mandatory field (its `libelle`), **except** the fields that belong to a state (listed in `champs` of a rule of state `vide` or `erreur`, like the empty-state message);
|
|
37
|
+
the line of a field listed in the `masque` of a `sourcee` rule of state `vide` ends with `— unless <the rule's statement>`; the other fields (a static title) never get one;
|
|
38
|
+
- `never:` — the messages of the rules of state `erreur`, on one line; the message of a rule of state `vide` is a planned display and never goes there;
|
|
39
|
+
- `api:` — the load actions only (`declencheur: null`) in `GET` (the QA pass never sends a POST); the line ends with `may be empty when <the rule's statement>` when a `sourcee` rule of state `vide` carries the action.
|
|
40
|
+
Actions triggered by a field stay with the acceptance tests.
|
|
41
|
+
|
|
42
|
+
`spec qa` only derives the **screen** part: a back-end sheet, which has no `ecran`, is refused (exit 2, « la fiche n'a pas de partie écran »); on a mixed sheet it reads the actions' calls through their `contrat`.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## Spec step (design, first steps delivered)
|
|
47
|
+
|
|
48
|
+
For a visible lot that adds a page (`screen: page`; a component or a journey follows the ordinary path since L209), `orchestrate` gets a step
|
|
49
|
+
before the code: a static HTML mockup in the project's own style (1440 and 390 px; empty, loading and
|
|
50
|
+
error states) and a machine-readable screen sheet (fields, numbered rules `R1…` each marked *sourced*
|
|
51
|
+
or *hypothesis*, actions → API calls). The `ux-reviewer` agent reads the mockup before any code; the
|
|
52
|
+
acceptance tests are written from the sheet, red, by a session other than the implementer's; the
|
|
53
|
+
implementation gets the sheet, the code review checks rule → test → green, the hypotheses go into the
|
|
54
|
+
lot's news entry, and a human is asked only about a choice that is costly to undo. The design is in
|
|
55
|
+
`docs/superpowers/specs/2026-10-10-etape-spec-design.md` (with an example sheet and the plan of the
|
|
56
|
+
lots that deliver it). Delivered so far: the sheet templates `templates/fiche.yaml` (screen) and `templates/fiche-back.yaml` (a lot without a screen: `sujet`, `cas`, `regles`, `contrats`, `donnees`), `cadence spec check`
|
|
57
|
+
(the sheet's invariants) and `cadence spec qa` (the screen's `docs/qa/expectations.md` section, derived
|
|
58
|
+
from the sheet), see [spec](#spec) below, and the `spec` step of `orchestrate` itself (the `spec-writer` agent, the
|
|
59
|
+
render at 1440 and 390 px, the commit of the spec), see [The spec step](orchestrate.md#the-spec-step-of-a-lot-with-screen) in `orchestrate`; the `accept` step (red acceptance tests and the lock that protects them), see [The accept step](orchestrate.md#the-accept-step-red-acceptance-tests-and-their-lock); the UX review of
|
|
60
|
+
the mockup (the `ux-reviewer` agent in mockup mode), see [The mockup review](orchestrate.md#the-mockup-review-before-any-code); and the downstream briefs (the sheet given to `implement`, rule → test → green in the code review, a light UX conformity pass, the `## Hypothèses` section of the news entry), see [The downstream briefs](orchestrate.md#the-downstream-briefs-sheet-rule--test--green-conformity-hypothèses).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
[← cadence](../README.md)
|
|
2
|
+
|
|
3
|
+
# Stability
|
|
4
|
+
|
|
5
|
+
From 1.0.0 cadence follows [semantic versioning](https://semver.org): what is listed under
|
|
6
|
+
*Guaranteed* only changes incompatibly in a major version; a minor or a patch never breaks it.
|
|
7
|
+
|
|
8
|
+
**Guaranteed**
|
|
9
|
+
|
|
10
|
+
- **Commands and options** of `raf` and `cadence` (`cadence raf …` is `raf …`): `init`, `add`, `start`, `done`, `drop`,
|
|
11
|
+
`note`, `did`, `public`, `screen`, `spec`, `ux`, `review`, `commits`, `show`, `list`, `now`, `ignore`, `check`, `gantt`, `hook`;
|
|
12
|
+
`cadence news`, `session` (`start`, `close`, `next`, `context`), `lead tour`, `corrections`, `deliver`, `verify`, `orchestrate`,
|
|
13
|
+
`skills`, `spec` (`cadence spec <lot> on|off` is `raf spec`; `check`, `qa`: exit **0** when the sheet is valid and the section is printed, **1** with violations, **2** on a missing or unreadable file or a wrong usage);
|
|
14
|
+
their options and exit codes as the pages [raf](raf.md), [orchestrate](orchestrate.md), [deliver](deliver.md), [spec](spec.md), [news](news.md), [session](session.md), [lead](lead.md), [corrections](corrections.md) and [skills](skills.md) document them. A new command or option is a minor change.
|
|
15
|
+
- **The keys of `cadence.yaml`**: `plan`, `news`, `hook`, `session`, `deliver`, `orchestrate`, `docs`, `qa`, `priority`, `depth`, `lead` (`lead.ux`)
|
|
16
|
+
and the keys each of them takes. A key is not renamed nor removed, nor does its meaning change; a new key is a minor change.
|
|
17
|
+
- **The plan file** (`docs/plan/raf.yaml`): `project`, `prefix`, `since`, `ignore`, `lots` (with their
|
|
18
|
+
fields, `tasks`, `notes`, `repos`) and `acknowledged`, and the plan formats `plan:` in `cadence.yaml` can read.
|
|
19
|
+
The `version` key is kept in the file but ignored (`src/plan.ts` does not read it): it is not a schema version.
|
|
20
|
+
- **The names of the skills** (`session-start`, `session-close`, `deliver`, `lead`) **and of the agents**
|
|
21
|
+
(`ux-reviewer`, `code-reviewer`, `qa-reviewer`).
|
|
22
|
+
|
|
23
|
+
**Not guaranteed** (may change in any release)
|
|
24
|
+
|
|
25
|
+
- The **text of the outputs**: wording, layout, order of the lines and columns of every report, table and message
|
|
26
|
+
(the `--json` outputs and the exit codes are part of the commands above). In a `--json` output a new field is a
|
|
27
|
+
minor change, so consumers must tolerate unknown fields; removing or renaming a field is a major change.
|
|
28
|
+
- The **`precheck-reader`**, **`spec-writer`** and **`acceptance-writer`** agents, and the mockup and conformity modes of **`ux-reviewer`**: internal to `cadence orchestrate`, not meant to be called by hand.
|
|
29
|
+
- The **`cadence-hud` band**: its segments, colours and layout; it is versioned on its own.
|
|
30
|
+
- The **wave journals** under `.cadence/runs` and the files `cadence orchestrate` keeps there.
|
|
31
|
+
- The wording of the briefs and of the instructions inside the skills and the agents.
|
|
32
|
+
- The **format of the sheets** (`fiche.yaml`: the screen sheet `templates/fiche.yaml`, the back-end sheet `templates/fiche-back.yaml`, the mixed sheet) and so the invariants `cadence spec check` enforces: experimental while the next bricks of the spec step (S3–S6) still reshape it, a sheet that passes today may be refused by a later release. The `spec` commands and their exit codes are guaranteed, the keys they read are not yet.
|
|
33
|
+
|
|
34
|
+
There is no schema version and no migration: a file written by an earlier release keeps working, and a key a
|
|
35
|
+
release adds is optional.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
[← cadence](../README.md)
|
|
2
|
+
|
|
3
|
+
# What's new, version by version
|
|
4
|
+
|
|
5
|
+
The long form of the README's « What's new » (the README keeps two lines per version). The full history, with the date of each version, is in [CHANGELOG.md](../CHANGELOG.md).
|
|
6
|
+
|
|
7
|
+
**1.8.0**: `cadence perf [folder] [--since date] [--json]` is the permanent dashboard of the workflow, without a model: the last 7 days against the 7 before, read in `.cadence/runs`, with a `⚠` on a trend or a bottleneck (L225); `perf.prices` prices the lots in euros (L226); `cadence deliver` writes `deliveries-failed.log` and `cadence lead tour` opens with a perf header (L227). The measure of the back-end spec step on 10 lots is in `docs/mesures` (L190). The release was blocked by a test that required an entry under `[Unreleased]` (L235). Details: [docs/perf.md](perf.md).
|
|
8
|
+
|
|
9
|
+
**1.7.0**: `cadence orchestrate` no longer replays the `accept` step of a lot whose acceptation is green and sealed, e.g. after a `cadence spec reseal`, and the `accept` brief and the `acceptance-writer` agent may no longer rewrite a green oracle (L233); `cadence orchestrate --resume … --dry-run` is refused before anything is written instead of resuming the wave for real (L228); `cadence spec reseal <delivered lot> … --porteur` accepts a sheet amended by commits of another delivered lot, and its refusal names the commit and the way out (L229); the README is a short home page (about 5 kB instead of 208 kB in the package), the rest moved unchanged to `docs/` pages checked by `scripts/check-links.mjs`, and a commit that touches only the version fields, the CHANGELOG, « What's new » and `docs/whats-new.md` is a version commit for `raf check` and `raf done` (L232).
|
|
10
|
+
|
|
11
|
+
**1.6.0**: the mockup review sweeps everything in its first report and runs up to `orchestrate.maquetteReviews` times (new key, default 3 instead of 2), and a review may mark a finding `inchange` (L230); the acceptance lock opens its exception only through a commit of the lot in progress that amends the sheet after the red commit, and names the first offending commit (L231).
|
|
12
|
+
|
|
13
|
+
**1.5.1**: 1.5.0 was tagged but never published (a test of `session --all` was red on the GitHub runner, a fault of the test and not of the tool, L224); 1.5.1 publishes it with what followed: one UX review per lot (L221), the replay of a lot handed back for its budget (L223), a self-check list in the briefs (L222), and a `tests.yml` workflow that plays the suite on the publish job's environment.
|
|
14
|
+
|
|
15
|
+
**1.5.0**: `gate: { count: N, spec: true }` or `{ count: N, screen: page }` on a lot is a drawing condition added to `after`: until N `done` lots carry the criterion, `raf now`, `session start` and `lead tour` show the lot as waiting with its progress, `cadence orchestrate` refuses it and `--continue` never draws it (L219); `raf todo <id> [--reason]` puts a started lot without work commits back to `todo` with a dated note (L220).
|
|
16
|
+
|
|
17
|
+
**1.4.0**: `cadence spec reseal` accepts a sheet amended by commits of the lot, in progress or delivered, and records `ficheAmendee` (L217); the budget of a wave keeps 155 k for a fix pass plus a short review, the floor of an ordinary lot goes to 540 k and the spec allocation to 450 k, and a refused fix says `correction non jouée (budget)` in the final table (L218); a session that runs `git checkout` no longer stops the wave with a false « push détecté » (L214, L216); tests already red at the start sha no longer hand a lot back (L213, L215).
|
|
18
|
+
|
|
19
|
+
**1.3.0**: the spec step's threshold is narrowed to `screen: page` after the measure of 2026-10-12 (no row of the success table reached, about 570 k tokens per lot): `component` and `journey` lots follow the ordinary path again (L176, L209, L210); `cadence spec reseal … --porteur <lot>` re-seals the unstable sealed test of a delivered lot whose contract does not change (L212); the session cap shown and followed is the human's (`CADENCE_MAX_SESSIONS`, L208); `cadence orchestrate --waits` measures slot waits (L206); a third correction pass when the review converges (L205); `"e2e": true` acceptations stay out of the unit runner (L203); a dropped lot fully reverted no longer blocks `npm run service` (L207).
|
|
20
|
+
|
|
21
|
+
**1.2.0**: the spec step reaches lots without a screen: a lot that declares `spec: true` (`raf add --spec`, `raf spec`) gets a back-end sheet of cases, rules, contracts and data (`cadence spec check`), reviewed before any code, then acceptance tests locked before the implementation, and `raf screen` lets a plan already written adopt the step; `orchestrate.accept` may be a list of runners (front and back), each run under its own root; `cadence spec reseal <lot> <test> --reason` is the lead's way out when a sealed test contradicts its unchanged sheet; `lead.ux: lead` lets the lead form the UX verdict itself; `cadence lead tour --depth n` looks for projects deeper in the folder; the budgets of a wave are recalibrated on the measured runs (750 k for an ordinary lot of 0.5 to 1 day, 1.3 M for a lot with a screen); the code in service on the cadence repository is a separate worktree, updated only by `npm run service`, so a wave can no longer put unreviewed code in service (L185–L189, L191, L192, L194–L198, L200, L201).
|
|
22
|
+
|
|
23
|
+
**1.1.0**: the spec step of `cadence orchestrate`: a lot that declares `screen:` gets a machine-readable screen sheet (`cadence spec check|qa`), a mockup reviewed against it, acceptance tests committed red and locked before the implementation, and briefs that carry the sheet and rule → test → green to `implement`, `fix` and the code review; the news entry gains a *Hypothèses* section (L166, L169–L174, L177–L184).
|
|
24
|
+
|
|
25
|
+
**1.0.0**: the first major release, a stable contract: the commands and options, the keys of `cadence.yaml`, the plan file and the names of the skills and agents follow semantic versioning, and the [stability page](stabilite.md) lists what is guaranteed and what is not (L164).
|
|
26
|
+
|
|
27
|
+
**0.28.0**: `orchestrate.precheck: local` runs the « deliverable already present? » pre-check of `cadence orchestrate` on the local model (`claude-local`, Ollama), off the Anthropic quota, Sonnet staying the default and the fallback (L146); the `qa-reviewer` agent walks only the pages a lot touched, with a **Scope** line in its report (L123); the sub-tasks a review closes are also read in a lot's neighbouring repositories (L156) and a commit's sub-task list is read with the plan's left guard (L155); an unstable test is fixed (L90).
|
|
28
|
+
|
|
29
|
+
**0.27.1**: `cadence orchestrate` no longer leaves a session's child processes alive: a dev server started in its own process group, or orphaned by a shell that exits (`nohup srv &`), is killed with the session through its process tree and its `CADENCE_SESSION` mark, a tmux server, `screen`, `gpg-agent` or `dirmngr` started on demand being spared; a session that exits with code 0 while a descendant holds its output open is no longer reported as « délai dépassé » (L83); the `ux-reviewer` and `qa-reviewer` agents carry the briefs' Playwright rule outside `cadence orchestrate` (L84).
|
|
30
|
+
|
|
31
|
+
**0.27.0**: a compliant review of `cadence orchestrate` settles the open sub-tasks that commits of the lot cite (`feat(L3/t2): …`, comma lists included), closed in the same plan commit as the verdict or, on a read-only plan, returned as `[sous-tâche clore]` proposals, so `raf done` no longer refuses a lot over sub-tasks whose work is done; on a foreign-format plan the ids are read as the plan reads them (L82); the test suite stays green with two full suites running in parallel (L150).
|
|
32
|
+
|
|
33
|
+
**0.26.0**: `cadence orchestrate` raises the floor of a lot's budget from 200 k to 450 k tokens, enough to pay a write pass, its review, one fix pass and the short review that follows, so a lot of 0.5 or 1 day is no longer handed back at its second or third pass; a `--continue` wave draws fewer lots as a result (L128).
|
|
34
|
+
|
|
35
|
+
**0.25.0**: the project line of the plans' progress in the `cadence-hud` band names the lots in progress after their count, three at most then `…` (L153, `cadence-hud` 0.4.2); the progress follows the folder the session was launched from, so a `cd` into a sub-project no longer shrinks the band, and the session context keeps the `session.start` folder (L154).
|
|
36
|
+
|
|
37
|
+
**0.24.0**: `cadence orchestrate --drop <project:lot>` and `--stop-after-current` steer a live wave from another terminal, `--resume --drop` removes a lot before replaying a stopped wave (L79); the final table of a wave says « livrable jusqu'à <sha> » for a ready lot stacked under a lot handed back, with `git push origin <sha>:main && cadence deliver --sha <sha>` (L76); a version commit (version fields, `CHANGELOG.md`, the README's « What's new ») no longer asks for a new code review (L72).
|
|
38
|
+
|
|
39
|
+
**0.23.0**: the progress bar of each project in the `cadence-hud` band is coloured by the share of lots done, red below 33 %, orange below 66 %, green beyond (L152, `cadence-hud` 0.4.1); `cadence deliver` under a wave lock refuses only when a lot of the wave still works in that very repository, a linked worktree included (L127).
|
|
40
|
+
|
|
41
|
+
**0.22.0**: `cadence orchestrate --continue` draws the next ready lot of the plan itself, in the declared priority, until the budget, the time window or a question stops it (L147); `cadence session context` prints the context of the session, which the `cadence-hud` band publishes, and the `lead` skill chains lots without the human while it stays under 60 % (L148); the band shows the progress of each project's plan, and `cadence lead tour --json` gains `progress` (L149, `cadence-hud` 0.4.0); the final review of a lot is always played, the lot's own budget bounding the writing passes only, with 65 k tokens reserved for it (L145); the cause « tests rouges après … » names the pass whose tests were red (L151).
|
|
42
|
+
|
|
43
|
+
**0.21.0**: `cadence orchestrate --status` and `cadence lead tour` print the free session slots, which the `lead` skill reads (L141); `orchestrate.effort` sets the effort level of each pass of a wave (L137); `docs.sync` makes `raf check`, `lead tour` and the review brief report a document that does not follow the code (L143); `docs.articles` opens, after a green `cadence deliver`, a lot `Article <project> à rafraîchir` in the neighbouring repository (L144).
|
|
44
|
+
|
|
45
|
+
**0.20.0**: `cadence-hud` no longer misleads once the work is over: `/hud cmd` lists the background commands it counts (id, tool, origin, age, name), any other argument answers `argument inconnu` instead of hiding the band, commands with no end seen for an hour or no record go to a grey `N cmd sans fin vue`, a finished subagent takes its commands with it, two races that left a `1 cmd` counted forever are closed, and a finished wave shows grey without its budget then disappears after 30 minutes (L142); the `qa-reviewer` and `ux-reviewer` agents are read-only for real, their frontmatter listing Read, Grep, Glob, Bash and the Playwright tools (L140).
|
|
46
|
+
|
|
47
|
+
**0.19.1**: `cadence-hud`'s `N cmd` counter goes back down when a Monitor expires, when the background commands a subagent started end with it, and at session start or plugin reload (L135); its `tool.call` and `prompt.submit` guard hooks carry a `.catch` on registration, which clears the `claude plugin validate` warning (L136).
|
|
48
|
+
|
|
49
|
+
**0.19.0**: `cadence orchestrate` lifts a repository's lock and `pre-push` guard as soon as every lot of the wave that touches it is finished, so `cadence deliver` works there while the wave continues elsewhere (L132); a review that leaves a repository dirty hands back that lot only, suspends the lots still queued in that repository and keeps the other repositories running, its verdict reported instead of lost (L133); `cadence session close` re-run without a `session start` keeps the window since the last opening (L131); `cadence-hud` draws the lot rows of a wave in aligned columns on every surface (L134).
|
|
50
|
+
|
|
51
|
+
**0.18.0**: `cadence session next` prints what it records (issue #6); `cadence session close` covers the period since the last `session start` (or the last close) and says so in its title, `--since` still wins (issue #7).
|
|
52
|
+
|
|
53
|
+
**0.17.0**: `cadence-hud` shows an `N cmd` segment next to the agents, the background commands of the session (Bash run in the background and Monitor, subagents' included), tracked from the tool results and ended by the task's notification or `TaskStop`.
|
|
54
|
+
|
|
55
|
+
**0.16.0**: a lot can declare **neighbouring repositories** (`repos:` key of the lot, `{ path, cite }` for a repository shared between projects): `cadence orchestrate` refuses, locks and guards them, gives them to every session as `--add-dir`, and `raf commits`, `raf show` and the review verdict read the commits that cite the lot there too.
|
|
56
|
+
|
|
57
|
+
**0.15.0**: `hook.autostart` in `cadence.yaml` (`warn` by default, `refuse` or `start`): a pre-commit hook that refuses, or starts in the same commit, a lot still todo that the commit cites; `cadence session start|close --all [--depth n]`, one section per project under a folder.
|
|
58
|
+
|
|
59
|
+
**0.14.0**: `cadence lead tour`, the lead's morning table of every project in a folder, printed by a program (one line per project: lots in progress, gaps, last notes, next ready lot, repository) in place of one subagent per project; the `lead` skill calls it.
|
|
60
|
+
|
|
61
|
+
**0.13.1**: `cadence-hud` takes back the segments that fit once a big one has dropped (reset times, then the per-model consumption, now short: `opus 1.2M sonnet 800k`); `CADENCE_HUD_AMBIGUOUS=1` for a terminal that draws `▰ ▱ ⚙ │ ↻` in one cell.
|
|
62
|
+
|
|
63
|
+
**0.13.0**: `cadence orchestrate --status --watch` (a wave's table redrawn in the terminal, which
|
|
64
|
+
stops with the wave) and the lead skill that names the wave and follows its journal; lot ids with `/`
|
|
65
|
+
(sub-tasks of a read-only plan) accepted by `orchestrate`; `cadence-hud`'s first line measured in
|
|
66
|
+
terminal cells and kept to ASCII; `publish.yml` on the v5 actions.
|
|
67
|
+
|
|
68
|
+
**0.12.0**: the `cadence-hud` plugin (a status band above the Claude Code prompt),
|
|
69
|
+
`raf ignore` to acknowledge a commit without a lot, waves that size the review to the lot,
|
|
70
|
+
hand back a lot whose deliverable is already there and start the app themselves for the UX
|
|
71
|
+
review (`orchestrate.ux`), and briefs that require the README to follow the change.
|
|
72
|
+
|
|
73
|
+
**0.11.0**: waves on different repositories run side by side under a shared cap of
|
|
74
|
+
simultaneous sessions (`--max-sessions`, 2 by default), and every release now has its
|
|
75
|
+
changelog section and GitHub release.
|
|
76
|
+
|
|
77
|
+
**0.10.1**: the QA expectations file (`docs/qa/expectations.md`) is kept with the plan —
|
|
78
|
+
a commit that only touches it no longer has to cite a lot.
|
|
79
|
+
|
|
80
|
+
**0.10.0**: `cadence orchestrate`
|
|
81
|
+
sends an already-committed lot straight to review, and sessions only ask questions that
|
|
82
|
+
name what they would change.
|
|
83
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylad/cadence",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.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",
|
|
@@ -17,6 +17,34 @@
|
|
|
17
17
|
"templates",
|
|
18
18
|
".claude-plugin",
|
|
19
19
|
"README.md",
|
|
20
|
+
"docs/raf.md",
|
|
21
|
+
"docs/orchestrate.md",
|
|
22
|
+
"docs/deliver.md",
|
|
23
|
+
"docs/spec.md",
|
|
24
|
+
"docs/lead.md",
|
|
25
|
+
"docs/stabilite.md",
|
|
26
|
+
"docs/news.md",
|
|
27
|
+
"docs/session.md",
|
|
28
|
+
"docs/corrections.md",
|
|
29
|
+
"docs/perf.md",
|
|
30
|
+
"docs/skills.md",
|
|
31
|
+
"docs/cadence-hud.md",
|
|
32
|
+
"docs/releasing.md",
|
|
33
|
+
"docs/overview.md",
|
|
34
|
+
"docs/whats-new.md",
|
|
35
|
+
"docs/fonctionnement.md",
|
|
36
|
+
"docs/fonctionnement-lot-light.svg",
|
|
37
|
+
"docs/fonctionnement-lot-dark.svg",
|
|
38
|
+
"docs/fonctionnement-wave-light.svg",
|
|
39
|
+
"docs/fonctionnement-wave-dark.svg",
|
|
40
|
+
"docs/fonctionnement-service-light.svg",
|
|
41
|
+
"docs/fonctionnement-service-dark.svg",
|
|
42
|
+
"docs/fonctionnement-lead-light.svg",
|
|
43
|
+
"docs/fonctionnement-lead-dark.svg",
|
|
44
|
+
"docs/lead-workflow-light.svg",
|
|
45
|
+
"docs/lead-workflow-dark.svg",
|
|
46
|
+
"docs/cycle-vague-light.svg",
|
|
47
|
+
"docs/cycle-vague-dark.svg",
|
|
20
48
|
"LICENSE"
|
|
21
49
|
],
|
|
22
50
|
"engines": {
|
package/skills/lead/SKILL.md
CHANGED
|
@@ -40,6 +40,13 @@ repository state — and exits 0 even when a project is in error (its line says
|
|
|
40
40
|
content. Read the lines yourself; open a project's own `cadence session start` only for the one you need to
|
|
41
41
|
look at closer.
|
|
42
42
|
|
|
43
|
+
The tour opens with the **perf header**: one line per `⚠` of `cadence perf` (speed and quality side by side), nothing
|
|
44
|
+
when everything is stable. Read it **before proposing the three items** and relay each `⚠` in one line in your report.
|
|
45
|
+
Open an **improvement lot** only on a trend confirmed on two windows (a `⚠` of trend: two windows compared, enough lots, window
|
|
46
|
+
not truncated) or on a net bottleneck (`⚠ goulot`): at most one improvement lot per tour, in addition to the three, never in
|
|
47
|
+
their place, and the human decides. Never open a lot for a micro-optimisation or for the variation of a single window.
|
|
48
|
+
Without a `⚠`, the header is empty and you say nothing about perf.
|
|
49
|
+
|
|
43
50
|
Then report to the human in a compact table — one row per project — and propose **three** items
|
|
44
51
|
across projects, each with project, lot id and one sentence of justification: finish what is in
|
|
45
52
|
progress, then drift that blocks a delivery, then ready quick wins. **Stop and wait for the priority.**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Gabarit de l'étape accept d'orchestrate (L173) : à copier dans le projet (ex. tests/acceptation-runner.mjs) et à importer
|
|
2
|
-
// depuis la config du lanceur de tests, PARTAGÉE par `orchestrate.test` et la CI. Voir «
|
|
2
|
+
// depuis la config du lanceur de tests, PARTAGÉE par `orchestrate.test` et la CI. Voir « The accept step » dans docs/orchestrate.md du paquet @sylad/cadence (lié depuis son README).
|
|
3
3
|
//
|
|
4
4
|
// vitest.config.ts test: { exclude: [...configDefaults.exclude, ...acceptationIgnored()] }
|
|
5
5
|
// jest.config.js testPathIgnorePatterns: ['/node_modules/', ...acceptationIgnored(process.cwd(), 'docs/specs', 'regex')]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Gabarit de fiche back (lot sans écran, étape spec back d'orchestrate, L187). Copier dans docs/specs/<sujet>/fiche.yaml,
|
|
2
2
|
# remplacer les valeurs, puis `cadence spec check docs/specs/<sujet>/fiche.yaml`.
|
|
3
|
-
# Chaque clé et les invariants vérifiés sont décrits dans la section « spec » du
|
|
3
|
+
# Chaque clé et les invariants vérifiés sont décrits dans la section « spec » de docs/spec.md du paquet @sylad/cadence (lié depuis son README).
|
|
4
4
|
# Un lot qui a aussi un écran (screen:) ajoute à ce fichier la partie écran du gabarit templates/fiche.yaml
|
|
5
5
|
# (ecran, etats, champs, actions) : sujet.id et ecran.id sont alors le nom du dossier.
|
|
6
6
|
sujet:
|
package/templates/fiche.yaml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Gabarit de fiche d'écran (étape spec d'orchestrate, L170). Copier dans docs/specs/<écran>/fiche.yaml,
|
|
2
2
|
# remplacer les valeurs, puis `cadence spec check docs/specs/<écran>/fiche.yaml`.
|
|
3
|
-
# Chaque clé et les invariants vérifiés sont décrits dans la section « spec » du
|
|
3
|
+
# Chaque clé et les invariants vérifiés sont décrits dans la section « spec » de docs/spec.md du paquet @sylad/cadence (lié depuis son README).
|
|
4
4
|
ecran:
|
|
5
5
|
id: mon-ecran # kebab-case ; nom du dossier docs/specs/<id>/
|
|
6
6
|
titre: Mon écran
|