@sylad/cadence 0.19.1 → 0.20.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.
@@ -8,7 +8,7 @@
8
8
  {
9
9
  "name": "cadence",
10
10
  "description": "Session start and close rituals driven by a versioned plan (raf), and deliveries proven by their effect. Needs the cadence CLI (npm i -g @sylad/cadence).",
11
- "version": "0.19.1",
11
+ "version": "0.20.0",
12
12
  "source": "./",
13
13
  "author": {
14
14
  "name": "Sylvain Ladoire"
@@ -17,7 +17,7 @@
17
17
  {
18
18
  "name": "cadence-hud",
19
19
  "description": "A status band above the Claude Code prompt: context, 5 h / 7 d quota windows, cost per model, agents of the session and the running cadence orchestrate waves. No CLI needed.",
20
- "version": "0.3.3",
20
+ "version": "0.3.4",
21
21
  "source": "./plugins/cadence-hud",
22
22
  "author": {
23
23
  "name": "Sylvain Ladoire"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cadence",
3
3
  "description": "A repo-native working method: session start and close rituals driven by a versioned plan (raf), deliveries proven by their effect, and three reviewer agents (UX, code, QA).",
4
- "version": "0.19.1",
4
+ "version": "0.20.0",
5
5
  "author": { "name": "Sylvain Ladoire" },
6
6
  "homepage": "https://github.com/Sylad/cadence",
7
7
  "repository": "https://github.com/Sylad/cadence",
package/README.md CHANGED
@@ -24,7 +24,7 @@ Code prompt that shows the session's context, quota, cost and the orchestrate wa
24
24
 
25
25
  ## What's new
26
26
 
27
- **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). **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). **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). **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`. **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. **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. **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. **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. **0.13.0**: `cadence orchestrate --status --watch` (a wave's table redrawn in the terminal, which
27
+ **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). **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). **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). **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). **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`. **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. **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. **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. **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. **0.13.0**: `cadence orchestrate --status --watch` (a wave's table redrawn in the terminal, which
28
28
  stops with the wave) and the lead skill that names the wave and follows its journal; lot ids with `/`
29
29
  (sub-tasks of a read-only plan) accepted by `orchestrate`; `cadence-hud`'s first line measured in
30
30
  terminal cells and kept to ASCII; `publish.yml` on the v5 actions. **0.12.0**: the `cadence-hud` plugin (a status band above the Claude Code prompt),
@@ -1092,7 +1092,9 @@ repository with `cadence skills install` (to `.claude/skills/cadence-*` and
1092
1092
  - **ux-reviewer** (agent): captures at 1440 and 390 px, findings grounded in a
1093
1093
  named rule (Nielsen, WCAG 2.2 AA) or a measurement, ranked, turned into
1094
1094
  `raf add --parent` sub-tasks, and a one-line verdict for `raf ux`. It never
1095
- edits code.
1095
+ edits code. Read-only for real: its `tools:` list is `Read, Grep, Glob, Bash` and the
1096
+ Playwright tools (`mcp__playwright`, and `mcp__plugin_playwright_playwright` when the
1097
+ browser comes from the Playwright plugin) — no `Edit`, no `Write`.
1096
1098
  - **code-reviewer** (agent): any stack; given a repository and a lot id, it reads
1097
1099
  the diff itself from the commits that cite the lot — not the author's summary —
1098
1100
  and the project's CLAUDE.md, when there is one, for its conventions; findings grounded in a
@@ -1102,7 +1104,7 @@ repository with `cadence skills install` (to `.claude/skills/cadence-*` and
1102
1104
  verdict for `raf review`. It takes the lot's commits from `raf commits`, never
1103
1105
  runs a build whose output is used live, and never edits code. A README or usage
1104
1106
  documentation that does not follow the lot's change is a *major* finding.
1105
- - **qa-reviewer** (agent): any web app; given a repository and a base URL (and
1107
+ - **qa-reviewer** (agent): any web app (read-only like `ux-reviewer`: same tool list, no `Edit`, no `Write`); given a repository and a base URL (and
1106
1108
  optionally a lot id, to start with the pages it touched — for a backend-only
1107
1109
  lot, those that call the changed endpoints), it opens each page of
1108
1110
  the project's expectations file in a real browser at 1440 and 390 px and
@@ -1131,8 +1133,11 @@ Context of the session (green / orange / red at 50 and 75 %), the 5-hour and 7-d
1131
1133
  windows with the time to their reset, the cost of the session and its split per model, the
1132
1134
  subagents of this session, the background commands in progress (`2 cmd`: Bash run in the background and Monitor, subagents' included, as the app's "background commands" card counts them), and every live `cadence orchestrate` wave: budget, sessions, one
1133
1135
  aligned line per active lot (status, step, model, elapsed, start of the title), the lots still
1134
- waiting. When no wave is running, the last finished one stays on a grey line until the next
1135
- starts. Waves are read from disk (`~/.cadence/orchestrate/waves/`, then `.cadence/runs/`); no
1136
+ waiting. When no wave is running, the last finished one stays on a grey line for 30 minutes
1137
+ after it ended, then disappears. A background command counted for more than an hour, or with no
1138
+ record of when it started, is no longer shown as running: it moves to a grey `N cmd sans fin
1139
+ vue` ("end never seen") right after `N cmd`, because its end notification may never have reached
1140
+ the session. Waves are read from disk (`~/.cadence/orchestrate/waves/`, then `.cadence/runs/`); no
1136
1141
  cadence command is run, and the CLI is not required.
1137
1142
 
1138
1143
  Install it as a plugin from the same marketplace:
@@ -1142,7 +1147,9 @@ Install it as a plugin from the same marketplace:
1142
1147
  /plugin install cadence-hud@cadence
1143
1148
  ```
1144
1149
 
1145
- `/hud` hides or shows the band. The source lives in [`plugins/cadence-hud`](plugins/cadence-hud/README.md)
1150
+ `/hud` hides or shows the band. `/hud cmd` lists the background commands being counted (id, tool,
1151
+ origin `session` or `agent <id>`, age, name; `(sans fin vue)` on the ones above). Any other argument
1152
+ answers `argument inconnu : … (attendu : cmd)` and leaves the band as it is. The source lives in [`plugins/cadence-hud`](plugins/cadence-hud/README.md)
1146
1153
  (its own README has the details of every cell); it is not part of the npm package. To work on it:
1147
1154
  `claude plugin validate plugins/cadence-hud`, `claude plugin test plugins/cadence-hud`, and
1148
1155
  `tsc -p plugins/cadence-hud` once Claude Code has loaded the plugin at least once (it generates
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: qa-reviewer
3
3
  description: QA reviewer for any web app — after a delivery, walks the pages of the running app in a real browser, from the user's side, and reports empty states, wrong data, error messages, failed or empty API calls, console errors and broken images. Given a repository path and a base URL, it checks each page against the project's expectations file (`docs/qa/expectations.md` — per route, what the user must find, what must never appear, the API calls the page depends on) at a desktop and a phone width; every finding names what it measured (selector or text, count, status code, response size), never an impression; without an expectations file it still runs its universal checks, reports what it saw and returns a draft one. Use after any delivery that changes what a page shows or what it is served (screen, API, data source, configuration of either) — in practice every delivery except docs-, plan- or tests-only ones — or to re-check a deployed app. Read-only — does not modify code, log in or submit anything.
4
+ tools: Read, Grep, Glob, Bash, mcp__playwright, mcp__plugin_playwright_playwright
4
5
  ---
5
6
 
6
7
  You check a running web app the way its user meets it: page by page, in a real browser. You
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: ux-reviewer
3
3
  description: Usability and accessibility reviewer for any web interface — reviews a page, a screen or a user-facing change before it is marked done, and runs the planned reviews of existing screens. Grounds every finding in a named rule (Nielsen heuristics, WCAG 2.2 AA) or a measurement, never in taste; respects the product's existing visual identity; describes a mockup before any redesign. Use when a lot marked `visible` is about to be closed (`raf ux <lot>`), when a new page is added, or for a "UX review — <screen>" lot. Does not modify code.
4
+ tools: Read, Grep, Glob, Bash, mcp__playwright, mcp__plugin_playwright_playwright
4
5
  ---
5
6
 
6
7
  You review the usability and accessibility of a web interface. You report; you never edit code.
@@ -38,7 +38,7 @@ function agentsFor(spec, agents) {
38
38
  const a = spec.agent ? agents[spec.agent] : undefined;
39
39
  if (!spec.playwright || !spec.agent || !a?.tools)
40
40
  return agents;
41
- return { ...agents, [spec.agent]: { ...a, tools: [...a.tools, PLAYWRIGHT_TOOLS] } };
41
+ return { ...agents, [spec.agent]: { ...a, tools: [...a.tools, ...(a.tools.includes(PLAYWRIGHT_TOOLS) ? [] : [PLAYWRIGHT_TOOLS])] } };
42
42
  }
43
43
  export function buildArgs(spec, agents) {
44
44
  const args = ['-p', spec.brief, '--output-format', 'json', '--json-schema', JSON.stringify(spec.schema), '--model', spec.model];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sylad/cadence",
3
- "version": "0.19.1",
3
+ "version": "0.20.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",