From b36215a14e37d27519fe27a544e38bb6e002395a Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Thu, 6 Aug 2026 00:36:28 +0800 Subject: [PATCH 01/19] One list of comments, open or closed, and only the agent closes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A review kept the same fact in five places and gated publishing on two of them agreeing. The round record cached a fingerprint of comment content it did not own, so a reply — including the reviewer answering the agent's own question — invalidated it, and publish refused. The workspace meanwhile held back the re-send that would have refreshed it. Neither side could move. There is now one list. A comment is open or closed; `sentAt` and `deliveredAt` say where it has got to between the two people. The agent takes delivery of every open comment, closes what it did, and whatever it does not name comes back next time. Nothing can refuse a close — that property is stated in the contract and asserted in the test, which is what neither had before. Sending freezes a comment's words, so two writers can no longer disagree about what was asked and the merge heuristics that arbitrated them are gone, along with rounds, the pending sentinel, per-version comment copies, claim, check, and the workspace's flight state. A store written by an earlier version is read where it lies. --- CHANGELOG.md | 41 + plugins/vstack/.claude-plugin/plugin.json | 2 +- plugins/vstack/.codex-plugin/plugin.json | 2 +- plugins/vstack/contracts/review-loop.md | 219 +++-- plugins/vstack/skills/review/SKILL.md | 88 +- .../skills/review/assets/bundle-artifact.mjs | 30 +- .../skills/review/assets/review-server.mjs | 906 +++++++++--------- .../skills/review/assets/workspace.html | 798 +++++---------- plugins/vstack/skills/review/hosts/claude.md | 2 +- plugins/vstack/skills/review/hosts/codex.md | 4 +- plugins/vstack/skills/review/hosts/grok.md | 13 +- .../skills/review/references/workflow.md | 87 +- .../skills/review/tests/review-lifecycle.mjs | 422 +++----- 13 files changed, 1109 insertions(+), 1505 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbea803..04b2327 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,47 @@ The version in `plugins/vstack/.claude-plugin/plugin.json` is what your host compares against to decide an update is available. See the release checklist in [`CONTRIBUTING.md`](CONTRIBUTING.md). +## 6.0.0 — 2026-08-06 + +**Breaking** + +- **Rounds are gone.** A review is one list of comments, each open or closed, and + the agent is the only one who closes. `rounds/`, the `pending` sentinel, the + per-version comment copies and `feedback.json` are no longer written. `claim` + and `check` are removed: taking delivery is the tick itself, and there is no + unclaimed round to name. +- **`publish --addressed` is now `publish --close`,** and it no longer has to + account for every comment. What you close is closed; what you leave stays open + and comes back on the next delivery. `--label` is independent of it: either + flag alone is valid. +- **On-disk shape.** Comments live in `comments.json`; the brief is `brief.md`, + rewritten on each delivery. A store written by an earlier version is read where + it lies — newest copy of each id wins, `addressed` and dismissed both become + closed — and nothing is moved. +- **A version records no comments.** `versions/v.meta.json` is a label and a + date. Snapshots are for looking at. + +**Fixed** + +- **A comment could stop being closable.** Replying to one changed the + fingerprint its round had recorded, so the reviewer answering the agent's own + question was what blocked the comment from ever closing — and the workspace + held back the re-send that would have cleared it. Neither rule exists now, and + the protocol states the property that was missing: nothing can refuse a close. + An agent that has taken delivery can always finish. + +**Changed** + +- A comment's words are frozen when the reviewer sends it. Anything to add after + that is a reply, which means two writers can no longer disagree about what was + asked, and the merge heuristics that arbitrated them are gone. +- `question` is no longer a state — a comment waits on the reviewer when the last + reply is the agent's. Withdrawing a comment already delivered is a reply asking + for it back. Revert and Refine both write into the thread. +- The workspace holds no protocol state. Queued, being worked on, editable and + withdrawable are all read off the comment, so a reload or a second tab sees the + same review as the tab that wrote it. + ## 5.0.0 — 2026-08-05 **Breaking** diff --git a/plugins/vstack/.claude-plugin/plugin.json b/plugins/vstack/.claude-plugin/plugin.json index f2be26c..b701903 100644 --- a/plugins/vstack/.claude-plugin/plugin.json +++ b/plugins/vstack/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "vstack", "displayName": "Visual Stack", - "version": "5.0.0", + "version": "6.0.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Claude Code. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Claude publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/.codex-plugin/plugin.json b/plugins/vstack/.codex-plugin/plugin.json index b6e72da..4b194c3 100644 --- a/plugins/vstack/.codex-plugin/plugin.json +++ b/plugins/vstack/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "vstack", - "version": "5.0.0", + "version": "6.0.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Codex. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Codex publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/contracts/review-loop.md b/plugins/vstack/contracts/review-loop.md index d92c4a3..b96e6c5 100644 --- a/plugins/vstack/contracts/review-loop.md +++ b/plugins/vstack/contracts/review-loop.md @@ -5,69 +5,76 @@ workspace), (2) the **agent session**, and (3) the **reviewer** in the browser. Host-independent: any Host that fulfills [host.md](host.md) can drive this loop. +One list of comments. Each is open or closed. The agent is the only one who +closes. Everything the workspace shows is derived from that list. + --- ## Participants | Role | Responsibility | | --- | --- | -| **Engine** | Serves workspace, stores state, freezes versions, emits events | -| **Agent** | Applies feedback, publishes versions, replies, fulfills Host ops | +| **Engine** | Serves workspace, keeps the comment list, freezes versions, emits events | +| **Agent** | Takes delivery, applies comments, replies, closes, publishes versions | | **Reviewer** | Comments in the browser; Send / Approve / Share | --- ## Subject under review -| Mode | Identity | What a round changes | +| Mode | Identity | What the agent changes | | --- | --- | --- | | **File** | `--file ` | That HTML file | | **Live** | `--app ` + `--name ` | App source (or notes for a third-party site) | --- -## On-disk store - -Beside the file: `/.vstack/local/review//` -Live (no file): `/.vstack/local/review//` +## The comment -`review/` is where a store is **created**. An implementation must also **read** -`/.vstack/local/wireframe//`, which is where stores made before this -tool was renamed still are — first directory holding the subject wins, and a -subject present in both is read from `review/`. Nothing is migrated: a user's -rounds stay where they were written. `status` reports the resolved `store`, so -a caller never has to pick between the two itself. +`comments.json` is the whole truth for a review. One list, not one per version. -| Path | Role | +| Field | Meaning | | --- | --- | -| `state.json` | `{ name, version, app?, … }` | -| `versions/v.html` | Frozen file or DOM capture | -| `versions/v.meta.json` | Label, date, addressed ids | -| `reviews/v/annotations.json` | Live comments + threads | -| `reviews/v/feedback.md` | Markdown brief for the agent | -| `reviews/v/feedback.json` | Same, structured | -| `rounds/r.json` | Durable membership, revisions, outcomes, and completion record | -| `handshake` | A stream watcher waiting to be told its events are being read. Carries the token it printed; `ack` marks the record answered rather than deleting it, and only the watcher whose token it holds acts on it and clears it | -| `pending` | Notification only: review sent, agent must `claim` it | -| `approved` | Sentinel: design signed off; engine shutting down | -| `share` | Sentinel: reviewer wants a shareable link | -| `url` | Present only while `serve` is running | -| `watching` | Heartbeat while Host op `watch_stream` is active | +| `id` | Stable, shared with the workspace | +| `note` | What the reviewer asked for. Frozen once `sentAt` is set | +| `kind` | `comment` · `area` · `general` · `move` · `strike` | +| `anchor` | Element identity (tag, id, cls, role, label, text, region, sel) | +| `move` / `strike` / `covers` | Payload for the drawn marks | +| `route` | Live only — the app path it was made on | +| `size` | Screen size it was made at | +| `seenAt` | Version on screen when it was written. Display only | +| `state` | `open` · `closed` | +| `closedAt` | When the agent closed it | +| `replies` | `{ by, text, at }[]`, append-only | +| `sentAt` | The reviewer let go of it. Null means it is still a draft | +| `deliveredAt` | The agent was last handed it. Null means it is still queued here | + +Those two timestamps carry the whole of a comment's progress: + +| State | `sentAt` | `deliveredAt` | Editable | Withdrawable | +| --- | --- | --- | --- | --- | +| Being written | — | — | yes | yes, outright | +| Queued | set | — | no | yes | +| With the agent | set | set | no | no — reply asking for it back | -`serve` also records the store it is serving under the directory it was run -from: `/.vstack/local/review/.serving/`, one file per live review, -holding that review's store path. It is written after `url` and removed with it. +--- -`watch --all` finds a review by walking the directory it was run from **and** by -following those pointers. The pointer is what covers a page that lives outside -that directory, whose store lives outside it too. A pointer whose store has no -`url` is stale, and the reader deletes it. +## Who may do what + +**Reviewer** — three verbs: + +- Add a comment. +- Reply to a comment. A reply to a closed comment reopens it. +- Withdraw a comment, while `deliveredAt` is null. -Every vstack tool keeps its per-machine working files under -`.vstack/local//`, resolved by `lib/workdir.mjs`: the enclosing `.vstack` -when the artifact already sits in one, otherwise the one beside it. Engines must -go through that helper rather than joining the path themselves. `local/` is -gitignored whole; the rest of `.vstack/` is the pipeline and is committed. +A reviewer never closes a comment. Withdrawing something already handed over is +a reply saying so; the agent undoes what it has to and closes it. + +**Agent** — three verbs: + +- Take delivery of the open comments (the tick). +- Reply to a comment. This never changes its state. +- Close comments, and optionally snapshot a version. --- @@ -84,6 +91,44 @@ CSS/UI may use class `agent`; class `claude` remains a synonym for old markup. --- +## On-disk store + +Beside the file: `/.vstack/local/review//` +Live (no file): `/.vstack/local/review//` + +`review/` is where a store is **created**. An implementation must also **read** +`/.vstack/local/wireframe//`, which is where stores made before this +tool was renamed still are — first directory holding the subject wins, and a +subject present in both is read from `review/`. + +| Path | Role | +| --- | --- | +| `state.json` | `{ name, version, file? \| app?, start? }` | +| `comments.json` | Every comment for this review | +| `brief.md` | The open comments, rewritten on every delivery | +| `versions/v.html` | Frozen file, or the DOM capture for a live app | +| `versions/v.meta.json` | `{ n, label, date }` | +| `reviews/v/` | Only ever read: where a store filled by an older version keeps its comments | +| `handshake` | A stream watcher waiting to be told its events are being read | +| `approved` | Sentinel: design signed off; engine shutting down | +| `share` | Sentinel: reviewer wants a shareable link | +| `url` | Present only while `serve` is running | +| `watching` | Heartbeat while Host op `watch_stream` is active | + +`serve` also records the store it is serving under the directory it was run +from: `/.vstack/local/review/.serving/`, one file per live review. +`watch --all` finds a review by walking the directory it was run from **and** by +following those pointers. A pointer whose store has no `url` is stale, and the +reader deletes it. + +**Reading a store from an older version.** When `comments.json` is absent, build +it from the `reviews/v/` directories: the newest copy of each id wins, +`addressed` and a reviewer's dismissal both become `closed`, and anything +already sent counts as delivered. Those files are left where they are. Nothing +is migrated behind the user's back. + +--- + ## CLI surface All commands: `node review-server.mjs …` @@ -91,15 +136,13 @@ Host selection: `--host ` or `VSTACK_HOST=` (affects UI injection only). | Command | Contract | | --- | --- | -| `serve --file …` / `serve --app …` | Long-lived via Host `background`. Binds `127.0.0.1`. | -| `ack --file/name … --token ` \| `ack --all --token ` | Answer a stream watcher's handshake. Only this arms the `watching` heartbeat | -| `claim --file/name … --round r` | Acknowledge delivery while preserving the durable round ledger | -| `publish --file/name … --round r --label … [--addressed ids]` | Validate full round coverage, freeze next version, and mark comments addressed | -| `reply --file/name … --round r --comment --text "…"` | Append `{ by: "agent", text, at }`; status → `question` | -| `share --file/name … --url ` | Record public URL; clear `share` sentinel | -| `check --file/name …` | Always exits `0`. Names a queued round nobody has claimed | +| `serve --file …` / `serve --app …` | Long-lived via Host `background`. Binds `127.0.0.1` | +| `watch [--all] [--file …] [--stream]` | Take delivery. Blocks until the reviewer has said something new | +| `ack --file/name … --token ` | Answer a stream watcher's handshake. Only this arms the `watching` heartbeat | +| `publish --file/name … [--close ids] [--label …]` | Close comments, snapshot a version, or both | +| `reply --file/name … --comment --text "…"` | Append `{ by: "agent", text, at }` | +| `share --file/name … --url ` | Record public URL; clear the `share` sentinel | | `status --file/name …` | Human/debug snapshot | -| `watch [--all] [--file …] --stream` | Event stream via Host `watch_stream` | --- @@ -112,28 +155,30 @@ One line of stdout per event (from `watch --stream`): | `WATCHING` | Stream armed | — | | `HANDSHAKE` | The watcher asking whether anyone receives it | Run the `ack` command it prints, immediately | | `LINKED` | The handshake was answered and at least one review is covered | — | -| `UNLINKED` | The handshake was answered and no review turned up to cover, so no workspace goes Linked | Start it again via `watch_stream` with `--file` if a review is running elsewhere; a later serve in the same directory is picked up without it | +| `UNLINKED` | The handshake was answered and no review turned up to cover | Start it again with `--file` if a review is running elsewhere | | `UNWIRED` | The handshake went unanswered; the watcher exits `3` | Start it again via `watch_stream` | -| `REVIEW` | `pending` written; round id and path to `feedback.md` | `claim` the round, apply brief, publish/reply | -| `REPLIED` | Reviewer answered a question | Continue that comment’s thread | +| `REVIEW` | Comments have been handed over; names how many and the brief | Read `brief.md`, apply it, `publish --close` / `reply` | | `SHARE` | Link requested | Host `share` if capable; then `share --url` | | `APPROVED` | Sign-off; server exiting | Confirm; next pipeline stage as skill says | | `OPENED` | Another live store joined `--all` | — | | `CLOSED` | Tab/store gone | Drop; exit when none left | +A reply raises no event of its own: it is the same comment coming round again +with more said on it. + --- -## Round protocol +## The loop ``` serve (background) + watch_stream │ ▼ -reviewer comments ──Send──► round record + pending + feedback.md +reviewer comments ──Send──► comments.json │ │ - │ REVIEW event + │ REVIEW event ──► brief.md (delivery recorded) │ ▼ - │ agent: claim · apply · reply/check · publish + │ agent: apply · reply/close · publish │ │ │◄──── version ready ─────┘ │ @@ -143,53 +188,19 @@ reviewer comments ──Send──► round record + pending + feedback.md Rules: -1. Only a validated `publish --round … --addressed …` closes comments (reviewer has no resolve). -2. The engine rejects publication unless every round member is addressed, dismissed, or waiting on the reviewer. -3. The engine rejects unknown IDs, changed comment revisions, unclaimed rounds, and stale round IDs. -4. A round in flight cannot be called off. The reviewer's only correction is to send again, which supersedes the brief. Do not delete protocol files manually. -5. Retrying an already completed `publish --round …` is idempotent and creates no extra version. -6. One `watch_stream` per session is enough with `--all`. -7. Presence is proven. A stream watcher writes its `watching` heartbeat from the moment its handshake is answered, so **Linked** means a session is receiving the stream. Default window 120 s (`--handshake-timeout `). -8. Presence is per review, and per watcher. A watcher heartbeats only the stores it covers, and goes live only on an answer carrying its own token — a second watcher's handshake is not an answer to the first. It reports `LINKED` once it covers a review, and `UNLINKED` when none has turned up. -9. Presence is also claim-backed. The engine reports the agent present (workspace **Linked**) only while the `watching` heartbeat is fresh **and** no queued round has sat unclaimed past the claim window (90 s). A stalled round drops presence — a watcher whose events nobody reads must look the same to the reviewer as no watcher at all. - ---- - -## Feedback brief - -`feedback.md` + `feedback.json` carry at least: - -| Field | Meaning | -| --- | --- | -| `id` | Pass to `--addressed` | -| `kind` | `comment` · `area` · `general` · `move` · `strike` | -| `note` | Requirement text. Empty is valid on `move` and `strike` | -| `anchor` | Element identity (tag, id, classes, text, region, selector) | -| `move` | `move` only — `{ target: { …anchor identity, where }, delta }`, `where` is `inside` · `before` · `after` | -| `strike` | `strike` only — `{ scope: 'text' \| 'element', text }` | -| `screenSize` | Layout the comment was made at | -| `route` | Live only — app path | -| `status` | `open` · `question` · `addressed` | -| `replies` | `{ by, text, at }[]` | -| `reopened` / `wantsRevert` | Returned from Refine / Revert | - -A comment carries its requirement in `note`. A `move` and a `strike` carry it in -their own fields instead, so a reader must not treat an empty `note` as an -incomplete comment. `move.target` outranks `move.delta`: the element and side -survive a reflow and the pixel distance does not. - ---- - -## Share - -- **File review:** subject file (self-contained HTML) is what gets a public URL. -- **Live review:** a DOM capture for the current round; agent must say it is a still. -- Offline bundle (`bundle-artifact.mjs`): no session; Send becomes copy-to-clipboard. - ---- - -## Non-goals of this contract - -- How the Host names its tools (see Host adapters). -- Pipeline / `.vstack/pipeline.json` (skill handoff, not the review engine). -- Marketplace install paths (Host profile `install` + `updateDetect` only). +1. Only `publish --close` closes a comment. The reviewer has no resolve. +2. A tick hands over **every** open comment, not only the new ones, and marks which are new since the last delivery. +3. Whatever the agent does not close stays open and comes back on the next tick. There is no coverage to satisfy. +4. **Nothing can refuse a close.** An agent that has taken delivery can always finish, whatever the reviewer did meanwhile. +5. Closing what is already closed is a no-op, so a retried command is safe. +6. A comment's words are frozen when the reviewer sends it. The engine keeps the stored note whatever a client saves afterwards. +7. A reply is append-only, from either role. Two copies of a thread merge to the union of both. +8. A reviewer's reply to a closed comment reopens it. An agent's reply never changes state. +9. A comment may be withdrawn until it has been delivered. After that, withdrawal is a reply asking for it back. +10. A version is a snapshot to look at. It records no comments, and no comment records a version. +11. One `watch_stream` per session is enough with `--all`. +12. Presence is proven. A stream watcher writes its `watching` heartbeat from the moment its handshake is answered, so **Linked** means a session is receiving the stream. Default window 120 s (`--handshake-timeout `). +13. Presence is per review, and per watcher. A watcher heartbeats only the stores it covers, and goes live only on an answer carrying its own token. + +Rule 4 is the liveness property. Every dead-end this protocol has had came from +a rule that could stop a round ending. diff --git a/plugins/vstack/skills/review/SKILL.md b/plugins/vstack/skills/review/SKILL.md index 0a4bebd..0aa6616 100644 --- a/plugins/vstack/skills/review/SKILL.md +++ b/plugins/vstack/skills/review/SKILL.md @@ -25,13 +25,13 @@ tool mapping. A two-way review loop. The user comments on the screen; you apply the comments, ask about anything ambiguous, and publish the next version. Two things can go under it: -| | what it is | what a round changes | +| | what it is | what you change | |---|---|---| | **A page** (§1–§3) | a wireframe you just generated, an exported screen, a prototype — any self-contained HTML file | the file | | **A UI that exists** (§7) | an app on localhost, or a website on the internet: the real screens, real data, real states | the source code — or, for a site you don't own, a note about it | ``` -requirements ──► page.html ──► review workspace ──► feedback.md ──┐ +requirements ──► page.html ──► review workspace ──► brief.md ─────┐ ▲ or a live app (user comments) │ └──────── you apply it, reply, publish v(N+1) ◄──────────────┘ ``` @@ -73,7 +73,7 @@ With a **URL**, use Host op **`browser_capture`** when the adapter says it is available; otherwise ask the user for screenshots and derive by eye (§2 screenshots path). The full procedure — screenshots per size, `assets/harvest-reference.js`, writing `/-reference.md` so every -later round reads it instead of re-capturing, the never-sign-in rule — is +later pass reads it instead of re-capturing, the never-sign-in rule — is `references/design-sources.md` §1–2. Copying a *layout* is the point; logos, wordmarks, photography and copy stay placeholders. @@ -184,7 +184,7 @@ Answering proves the op was fulfilled, since only a session that can run command Answer within two minutes; after that the watcher prints `UNWIRED` and exits, and you start it again with the tool your adapter names for `watch_stream`. -The page says **Linked** for as long as the watcher is answered and the rounds are being claimed, +The page says **Linked** for as long as the watcher is answered, and **Unlinked** in amber the rest of the time, so the reviewer always knows which one they have. Each event is one line (full table: `contracts/review-loop.md`): @@ -195,56 +195,48 @@ Each event is one line (full table: `contracts/review-loop.md`): | **`LINKED`** | the handshake is answered and a review is under the watcher; the workspace says Linked | carry on — the loop is live | | **`UNLINKED`** | the handshake is answered, but the watcher found no review to cover, so no workspace says Linked | start it again with `--file ` if a review is already running for a page outside this directory. A serve started here after it needs nothing | | **`UNWIRED`** | the handshake went unanswered and the watcher exited | start it again with the tool your adapter names for `watch_stream` | -| **`REVIEW`** | a review landed; the line names its round and brief | `claim` the round, then apply it — the steps below | -| **`REPLIED`** | they answered a question you asked | read the thread and carry on with that comment. Nothing else announces this — a reply writes no sentinel | +| **`REVIEW`** | comments have been handed to you; the line names how many are open and where the brief is | read the brief, then the steps below | | **`SHARE`** | they want a link to send someone | Host op `share` if capable, then §6; if the Host cannot share publicly, say so and offer a file/bundle instead | | **`APPROVED`** | the design is signed off; the server has closed itself | say it's approved, note any `openComments` deliberately left, and carry on with whatever comes next | | **`CLOSED`** | that review's tab went away | the watcher drops it and keeps watching the rest; it only stops when none are left | -**Use the protocol commands rather than deleting state files.** `claim --round …` consumes `pending` -and `share --url` clears `share`. The durable round record remains available for validation, -recovery, and idempotent retries. +**Use the protocol commands rather than deleting state files.** `share --url` clears `share`, and +closing a comment is `publish --close`. -### Checking during a round +### What a delivery is -While you work, **no waiter is armed** — nothing will interrupt you, and a round in flight cannot be -called off. If the reviewer changes their mind they send again, and that brief supersedes. +The watcher blocks until the reviewer has said something you have not been given, then hands you +**every open comment** — not only the new ones — marking which are new since last time. A comment you +do not close comes back on the next delivery, so nothing is lost by being missed. -**Check at the checkpoints of a long round** — after reading the feedback, and before `publish`: +While you work, **nothing will interrupt you.** New comments accumulate on the server and arrive with +the next delivery; a review in flight cannot be called off. -```bash -node "$SKILL/assets/review-server.mjs" check --file "$FILE" -``` - -It always exits 0. It exists to name a round sitting in the queue that nobody has claimed: if it does, -claim that round before anything else, because comments are sitting unread. - -The longer the round, the more it matters: a check costs nothing, and one that never runs makes the -button a lie. +On a delivery: -On a review landing: - -1. Claim the round named by the `REVIEW` event. This acknowledges delivery without discarding its ledger: - ```bash - node "$SKILL/assets/review-server.mjs" claim --file "$FILE" --round r17 - ``` -2. Read `feedback.md` (the claim output names it). It carries a markdown brief plus a JSON block with every comment's element, place, screen size and thread. -3. **Apply every comment that isn't addressed.** There are no priorities to sort by — if the reviewer wrote it down, it needs doing. Locate each from its **anchor** — the element and the region it sits in — at the screen size it was made at, using the coordinates only to break a tie. -4. **Ask instead of guessing.** If a comment is ambiguous, reply to it — the question appears on the mark and in the comment list, where the user answers it: +1. **Read the brief** the `REVIEW` line names (`/brief.md`). It carries every open comment with + its element, place, screen size and thread. +2. **Apply every comment.** There are no priorities to sort by — if the reviewer wrote it down, it + needs doing. Locate each from its **anchor** — the element and the region it sits in — at the screen + size it was made at, using the coordinates only to break a tie. +3. **Ask instead of guessing.** If a comment is ambiguous, reply to it — the question appears on the + mark and in the comment list, where the user answers it: ```bash node "$SKILL/assets/review-server.mjs" reply --file "$FILE" \ - --round r17 --comment c7f2a1 --text "Every overdue row, or only the ones assigned to you?" + --comment c7f2a1 --text "Every overdue row, or only the ones assigned to you?" ``` - That comment goes to *{agent} asked* until they answer, which flips it back to open and returns it in the next round with their reply attached. On disk the reply uses `by: "agent"` (legacy files may say `"claude"`; treat them the same). -5. If a comment is genuinely wrong for the design, reply saying why rather than silently skipping it. -6. Publish, closing out what you actually did: + The comment stays open and comes back with their answer attached. On disk the reply uses + `by: "agent"` (legacy files may say `"claude"`; treat them the same). +4. If a comment is genuinely wrong for the design, reply saying why rather than silently skipping it. +5. **Close what you did, and snapshot the version:** ```bash node "$SKILL/assets/review-server.mjs" publish --file "$FILE" \ - --round r17 --label "Filters collapsed, overdue sorts first" --addressed c1f3k2,c9dk1 + --close c1f3k2,c9dk1 --label "Filters collapsed, overdue sorts first" ``` - Only `--addressed` marks a comment done. Publish fails before creating a version if the round was - not claimed, an id is unknown or stale, or any open comment is unaccounted for. -7. Leave **`watch_stream` running** and say what changed in a few lines. Then wait — don't ask "shall I continue?", the loop is the point. (Only re-arm if you used one-shot `watch` without `--stream`.) + Anything you do not name stays open and comes back. Publish tells you what it left open — close + those or reply asking about them, because the delivery will not raise them again on its own. +6. Leave **`watch_stream` running** and say what changed in a few lines. Then wait — don't ask "shall I + continue?", the loop is the point. (Only re-arm if you used one-shot `watch` without `--stream`.) **Closing the browser tab closes the review.** The workspace holds an SSE connection; when the last one goes and none returns within the grace period @@ -255,12 +247,7 @@ Either way, **say when the review is closed** — the user should never have to a socket is still open. The workspace never swaps the page out from under the reviewer: while you work, each comment you were -sent carries its own progress bar, and on publish the page offers **"vN is ready — Review changes"**. -Nothing interrupts them mid-round. Publish once, when the round is done. - -The reviewer keeps writing while you work — the workspace holds those comments and sends them as one -batch the moment your round ends. So a `REVIEW` event landing right after your publish is normal: -it is the queue they built up while you worked, not an echo of the round you just finished. +handed carries its own progress bar, and on publish the page offers **"vN is ready — Review changes"**. ## 6 · Publish the wireframe as a shareable link @@ -291,7 +278,7 @@ node "$SKILL/assets/review-server.mjs" share --file "$FILE" --url "" ``` - **Publish straight after a `publish`**, so the file on disk is the version you're - claiming to have shared. `$FILE` is the live working copy — mid-round it can be ahead of + claiming to have shared. `$FILE` is the live working copy — mid-review it can be ahead of the last published version. - The page is already self-contained (§2). - The link is tagged with the version it came from. After a later round the menu offers @@ -346,8 +333,8 @@ than the front door. A public site needs none of that — point at it and go. clicks through the app to reach a screen, or types a path in the address bar. So a review can span the whole flow in one pass — the brief comes back grouped by screen size, each comment naming its **Route**. -- **A version is a round, not a file.** `publish --name --label "…" - --addressed …` records that you finished a round; there is no snapshot of a +- **A version is a marker, not a file.** `publish --name --label "…" + --close …` records what you finished; there is no snapshot of a file because the app is the truth. The timeline still scrubs: the workspace captures the DOM of the screen they were commenting on each time they send, so history shows what they were looking at when they said it. @@ -359,7 +346,7 @@ than the front door. A public site needs none of that — point at it and go. If the app hot-reloads, the reviewer watches your change land. That is an argument for landing whole changes rather than halves, not for working slower — -and `check` (§5) still matters, because a round in a live app can be stopped +and the delivery loop (§5) still matters, because a review of a live app can be stopped mid-flight just as easily. ### A public website works too @@ -417,8 +404,7 @@ route. - **Every vstack tool writes under `.vstack/local//`**, so a project grows one dot-directory, not one per engine. `lib/workdir.mjs` resolves it — use that rather than joining the path by hand. One gitignore line covers the lot (`**/.vstack/local/`); the rest of `.vstack/` is the pipeline and belongs in the repo. - The server binds to `127.0.0.1` only. Port 7788 busy usually means a review server is already running — pass `--port`. - `node "$SKILL/assets/review-server.mjs" status --file "$FILE"` prints the current version, whether a review is waiting, and any sign-off / share request outstanding. -- `check --file "$FILE"` is the same question in one line, and always exits 0. Use it inside a round, where `status` is too much output to read repeatedly. If it names a round waiting unclaimed, claim that round before anything else — comments are sitting unread. -- **Every command takes `--name ` in place of `--file` for a live review** — `publish`, `reply`, `share`, `status`, `check`. The brief tells you which name to use. +- **Every command takes `--name ` in place of `--file` for a live review** — `publish`, `reply`, `share`, `status`, `watch`. The brief tells you which name to use. - Full command reference and troubleshooting: `references/workflow.md`. - Contracts: `plugins/vstack/contracts/` — Host ops and review-loop protocol. - Host adapters: `skills/review/hosts/claude.md`, `skills/review/hosts/codex.md`, `skills/review/hosts/grok.md`. diff --git a/plugins/vstack/skills/review/assets/bundle-artifact.mjs b/plugins/vstack/skills/review/assets/bundle-artifact.mjs index a41a832..61b5752 100644 --- a/plugins/vstack/skills/review/assets/bundle-artifact.mjs +++ b/plugins/vstack/skills/review/assets/bundle-artifact.mjs @@ -60,16 +60,26 @@ if (fs.existsSync(vdir)) { .sort((a, b) => a.n - b.n) } -/* Reviews so far, so the shared copy shows what is already answered. */ -const reviews = {} -const rdir = path.join(STORE, 'reviews') -if (fs.existsSync(rdir)) { - for (const d of fs.readdirSync(rdir)) { - const m = /^v(\d+)$/.exec(d) - if (!m) continue - const saved = readJSON(path.join(rdir, d, 'annotations.json')) - if (saved) reviews[m[1]] = saved +/* The comments so far, so the shared copy shows what is already answered. A + store filled by an older version keeps them one directory per version, newest + copy of each id winning. */ +let comments = readJSON(path.join(STORE, 'comments.json'))?.comments +if (!comments) { + const newest = new Map() + const rdir = path.join(STORE, 'reviews') + const versions = fs.existsSync(rdir) + ? fs.readdirSync(rdir).flatMap(d => { const m = /^v(\d+)$/.exec(d); return m ? [Number(m[1])] : [] }).sort((a, b) => a - b) + : [] + for (const v of versions) { + for (const old of readJSON(path.join(rdir, `v${v}`, 'annotations.json'))?.annotations || []) { + newest.set(old.id, { + ...old, + state: old.status === 'addressed' || old.dismissed ? 'closed' : 'open', + deliveredAt: old.sentAt || null, + }) + } } + comments = [...newest.values()] } const bundle = { @@ -77,7 +87,7 @@ const bundle = { name, fileName: path.basename(FILE), currentVersion: state.version || 1, - html, versions, reviews, + html, versions, comments, } const shell = fs.readFileSync(path.join(HERE, 'workspace.html'), 'utf8') diff --git a/plugins/vstack/skills/review/assets/review-server.mjs b/plugins/vstack/skills/review/assets/review-server.mjs index 0c29e07..2e845a6 100644 --- a/plugins/vstack/skills/review/assets/review-server.mjs +++ b/plugins/vstack/skills/review/assets/review-server.mjs @@ -18,28 +18,32 @@ * * node review-server.mjs serve --file [--port 7788] [--idle-timeout 90] [--no-open] * node review-server.mjs serve --app [--name ] [--start /path] [--port 7788] - * node review-server.mjs claim --file --round r1 - * node review-server.mjs publish --file --round r1 --label "…" [--addressed c1,c3] - * node review-server.mjs reply --file --round r1 --comment --text "…" + * node review-server.mjs watch --file (blocks; hands over the open comments) + * node review-server.mjs publish --file [--close c1,c3] [--label "…"] + * node review-server.mjs reply --file --comment --text "…" * node review-server.mjs ack --file --token * node review-server.mjs share --file --url * node review-server.mjs status --file - * node review-server.mjs check --file (names a round nobody has claimed) - * node review-server.mjs watch --file (blocks until there is something to do) * * Every command takes `--app ` or `--name ` in place of `--file` when * the review is of a running app. * + * One list of comments, each open or closed, and the agent is the only one who + * closes. `watch` hands over every open comment and records that it went; + * whatever the agent does not close comes back on the next one. Nothing can + * refuse a close: an agent that took delivery can always finish. + * * State lives in a sibling directory, out of the way of the page: * /.vstack/local/review// (live: /.vstack/local/review//) - * state.json { name, version, app?, start? } + * state.json { name, version, file? | app?, start? } + * comments.json every comment for this review — the whole truth + * brief.md the open comments, rewritten on every delivery * versions/v.html frozen copy of each published version * (live: the DOM as it stood when a review was sent) - * versions/v.meta.json label, date, what it addressed - * reviews/v/ annotations.json · feedback.json · feedback.md - * pending sentinel written on send, watched by the agent + * versions/v.meta.json label and date — a snapshot to look at, nothing more + * reviews/v/ only ever read: where a store filled by an older + * version keeps its comments * handshake a stream watcher waiting to be told its events land - * rounds/r.json durable round membership and completion record * approved sentinel written on sign-off — the review is over * share sentinel — they want a shareable public link * url the live URL — present only while the server runs @@ -159,11 +163,12 @@ const P = { state: () => path.join(STORE, 'state.json'), versions: () => path.join(STORE, 'versions'), version: n => path.join(STORE, 'versions', `v${n}.html`), + /* Every comment for this review, in one list. Older stores kept a copy of a + comment in each version's directory; `review(n)` is only ever read now. */ + comments: () => path.join(STORE, 'comments.json'), review: n => path.join(STORE, 'reviews', `v${n}`), - rounds: () => path.join(STORE, 'rounds'), - round: id => path.join(STORE, 'rounds', `${id}.json`), + brief: () => path.join(STORE, 'brief.md'), lock: () => path.join(STORE, 'transition.lock'), - pending: () => path.join(STORE, 'pending'), handshake: () => path.join(STORE, 'handshake'), approved: () => path.join(STORE, 'approved'), share: () => path.join(STORE, 'share'), @@ -180,14 +185,19 @@ const writeJSON = (f, v) => { writeAtomic(f, JSON.stringify(v, null, 2) + '\n') } -let heldLock = null +/* A watcher writes into stores it did not start, so the lock is named by the + store it protects rather than by this process's own subject. */ +let heldLock = null, heldLockFile = null const lockWait = new Int32Array(new SharedArrayBuffer(4)) -function acquireStoreLock (timeout = 2500) { - fs.mkdirSync(STORE, { recursive: true }) +const lockFile = store => path.join(store, 'transition.lock') +function acquireStoreLock (store, timeout = 2500) { + fs.mkdirSync(store, { recursive: true }) + const file = lockFile(store) const until = Date.now() + timeout while (true) { try { - heldLock = fs.openSync(P.lock(), 'wx') + heldLock = fs.openSync(file, 'wx') + heldLockFile = file fs.writeFileSync(heldLock, `${process.pid}\n`) return } catch (error) { @@ -195,8 +205,8 @@ function acquireStoreLock (timeout = 2500) { try { // A killed process cannot clean up. A transition never legitimately // holds this lock for thirty seconds, so recover that orphan safely. - if (Date.now() - fs.statSync(P.lock()).mtimeMs > 30000) { - fs.rmSync(P.lock(), { force: true }) + if (Date.now() - fs.statSync(file).mtimeMs > 30000) { + fs.rmSync(file, { force: true }) continue } } catch {} @@ -209,10 +219,11 @@ function releaseStoreLock () { if (heldLock === null) return try { fs.closeSync(heldLock) } catch {} heldLock = null - try { fs.rmSync(P.lock(), { force: true }) } catch {} + try { fs.rmSync(heldLockFile, { force: true }) } catch {} + heldLockFile = null } -function withStoreLock (fn) { - acquireStoreLock() +function withStoreLock (fn, store = STORE) { + acquireStoreLock(store) try { return fn() } finally { releaseStoreLock() } } process.on('exit', releaseStoreLock) @@ -235,181 +246,235 @@ const appOrigin = () => (APP ? APP.origin : loadState().app || null) const loadState = () => readJSON(P.state(), { version: 0 }) const saveState = s => writeJSON(P.state(), s) -/** Review folders outlive snapshot history. Scan them directly so clearing old - * versions cannot make carried comments impossible to reply to or close. */ -function listReviewVersions () { - let files = [] - try { files = fs.readdirSync(path.join(STORE, 'reviews')) } catch { return [] } - return files.flatMap(file => { - const match = /^v(\d+)$/.exec(file) - return match ? [Number(match[1])] : [] - }).sort((a, b) => a - b) +/* ──────────────────────── the comment list ─────────────────────── + One list per review, and the only place a comment's state lives. A comment + is open or closed. Two timestamps say where it is between the reviewer and + the agent: `sentAt` is the reviewer letting go of it, which also freezes its + words; `deliveredAt` is the agent taking it, after which it can no longer be + withdrawn. Everything the workspace shows is derived from those. */ + +/** + * What a review is, read from its own store rather than from this process's + * flags. One watcher covers reviews it did not start, and it has to be able to + * hand their comments over and name the commands that answer them. + */ +function subjectOf (store) { + const state = readJSON(path.join(store, 'state.json'), {}) || {} + const live = !!state.app + const name = state.name || path.basename(store) + return { + store, state, live, name, + file: state.file || null, + origin: state.app || null, + flags: live ? `--name "${name}"` : `--file "${state.file || ''}"`, + comments: path.join(store, 'comments.json'), + brief: path.join(store, 'brief.md'), + } } +const here = () => subjectOf(STORE) + +const loadComments = (subject = here()) => + readJSON(subject.comments)?.comments || adoptOlderStore(subject.store) -function commentRecords (id) { - return listReviewVersions().flatMap(version => { - const file = path.join(P.review(version), 'annotations.json') - const saved = readJSON(file) - const comment = saved?.annotations?.find(a => a.id === id) - return comment ? [{ version, file, saved, comment }] : [] +function saveComments (comments, subject = here()) { + writeJSON(subject.comments, { + version: 1, updatedAt: new Date().toISOString(), comments, }) + return comments } -const latestComment = id => commentRecords(id).at(-1) || null +/** Fields the protocol owns. A client may write everything else on a comment it + * still holds, and none of these ever. */ +const OWNED = ['state', 'sentAt', 'deliveredAt'] + +const normaliseComment = c => ({ + ...c, + state: c.state === 'closed' ? 'closed' : 'open', + replies: c.replies || [], + sentAt: c.sentAt || null, + deliveredAt: c.deliveredAt || null, +}) /** - * Where an agent's own writing about a comment belongs: the version the - * workspace has open. A comment the reviewer has not touched since the last - * publication still lives in an earlier review file, so it is copied forward - * first. Writing to the older copy instead answers where nobody is looking — - * the workspace reads its list from the current version. + * A store filled before the comment list existed keeps a copy of each comment + * in every version directory it appeared in. Read the newest copy of each and + * translate it: `addressed` and a reviewer's dismissal are both closed, and + * anything already sent has been in the agent's hands. + * + * Those files are left exactly where they are. A user's review is not migrated + * behind their back — the list is simply written alongside from now on. */ -function currentRecord (id) { - const version = loadState().version - const file = path.join(P.review(version), 'annotations.json') - const saved = readJSON(file) || { version, annotations: [] } - saved.annotations ||= [] - const here = saved.annotations.find(comment => comment.id === id) - if (here) return { version, file, saved, comment: here } - const earlier = latestComment(id) - if (!earlier) return null - const carried = { ...earlier.comment } - saved.annotations.push(carried) - return { version, file, saved, comment: carried, carriedFrom: earlier.version } -} - -function latestComments () { - const found = new Map() - for (const version of listReviewVersions()) { - const file = path.join(P.review(version), 'annotations.json') - const saved = readJSON(file) - for (const comment of saved?.annotations || []) found.set(comment.id, { version, file, saved, comment }) - } - return [...found.values()] -} - -/** A submitted comment revision is immutable for that round. Agent replies are - * a disposition, so only open comments are compared against this fingerprint. */ -function commentRevision (comment) { - const value = { - id: comment?.id || '', - status: comment?.status || 'open', - note: comment?.note || '', - replies: (comment?.replies || []).map(reply => ({ - by: reply.by || '', text: reply.text || '', at: reply.at || '', - })), - reopened: !!(comment?.reopened ?? comment?.reopenedAt), - wantsRevert: !!(comment?.wantsRevert ?? comment?.revert), +function adoptOlderStore (store = STORE) { + let dirs = [] + try { + dirs = fs.readdirSync(path.join(store, 'reviews')) + .flatMap(file => { const m = /^v(\d+)$/.exec(file); return m ? [Number(m[1])] : [] }) + .sort((a, b) => a - b) + } catch { return [] } + const newest = new Map() + for (const version of dirs) { + const saved = readJSON(path.join(store, 'reviews', `v${version}`, 'annotations.json')) + for (const old of saved?.annotations || []) newest.set(old.id, { old, version }) } - return createHash('sha256').update(JSON.stringify(value)).digest('hex').slice(0, 16) + return [...newest.values()].map(({ old, version }) => { + const { status, dismissed, reopenedAt, revert, held, fromVersion, ...rest } = old + return normaliseComment({ + ...rest, + seenAt: fromVersion || version, + state: status === 'addressed' || dismissed ? 'closed' : 'open', + sentAt: old.sentAt || null, + deliveredAt: old.sentAt || null, + }) + }) } -/* `cancelled` is still terminal here although nothing writes it any more: a - store filled before the Stop control was withdrawn can hold one, and reading - it as live would hand the agent a round the reviewer called off. */ -function loadActiveRound (state = loadState()) { - if (!state.activeRound) return null - const round = readJSON(P.round(state.activeRound)) - return round && !['completed', 'cancelled', 'approved'].includes(round.status) ? round : null -} +/** Open, and released by the reviewer — what a tick hands over. */ +const deliverable = comments => comments.filter(c => c.state === 'open' && c.sentAt) + +/** Has the reviewer said anything the agent has not been given yet? A comment + * it has never seen, or an answer written since it last took delivery. */ +const unseen = comment => !comment.deliveredAt || + (comment.replies || []).some(reply => reply.by === REVIEWER_ROLE && + Date.parse(reply.at || '') > Date.parse(comment.deliveredAt)) +const anythingWaiting = (subject = here()) => + deliverable(loadComments(subject)).some(unseen) + +/* ───────────────────────────── the brief ───────────────────────── + The open comments, written for the agent. It is rendered here rather than in + the workspace because the workspace does not know what a delivery is: a tick + hands over everything open, whenever each of them was written. */ + +const SCREENS = [ + { id: 'ultrawide', label: 'Ultrawide', width: 2560, height: 1440 }, + { id: 'desktop', label: 'Desktop', width: 1440, height: 900 }, + { id: 'tablet', label: 'Tablet', width: 834, height: 1112 }, + { id: 'phone', label: 'Phone', width: 390, height: 844 }, +] -function saveActiveRound (round) { - writeJSON(P.round(round.id), round) - const state = loadState() - state.activeRound = round.id - state.roundSeq = Math.max(Number(state.roundSeq) || 0, Number(String(round.id).replace(/^r/, '')) || 0) - saveState(state) - return round +/** An element written as its own opening tag — what to search the source for. */ +const elLine = anchor => '`<' + anchor.tag + (anchor.id ? ` id="${anchor.id}"` : '') + + (anchor.cls ? ` class="${anchor.cls}"` : '') + (anchor.role ? ` role="${anchor.role}"` : '') + '>`' + +/** Where a comment is, said the way a person would: the thing it is on first, + * the part of the page it lives in second, coordinates last. */ +function whereLine (comment) { + if (comment.kind === 'general') return 'the page as a whole — not attached to an element' + const geo = comment.kind === 'area' && comment.rect + ? `area ${Math.round(comment.rect.w)}×${Math.round(comment.rect.h)} at ${Math.round(comment.rect.x)},${Math.round(comment.rect.y)}` + : `at ${Math.round(comment.point?.x || 0)},${Math.round(comment.point?.y || 0)}` + const anchor = comment.anchor + if (!anchor) return `${geo}${comment.anchorText ? ` — on “${comment.anchorText}”` : ''}` + const words = anchor.text || anchor.label + const region = !anchor.region ? '' + : anchor.region.kind === 'region' ? (anchor.region.label ? ` inside “${anchor.region.label}”,` : '') + : ` inside ${anchor.region.kind}${anchor.region.label ? ` “${anchor.region.label}”` : ''},` + return `on ${elLine(anchor)}${words ? ` “${words}”` : ''},${region} ${geo}` } -function finishActiveRound (round, status, extra = {}) { - if (!round) return - const finished = { ...round, ...extra, status, finishedAt: new Date().toISOString() } - writeJSON(P.round(round.id), finished) - const state = loadState() - if (state.activeRound === round.id) delete state.activeRound - state.lastRound = { id: round.id, status, version: extra.publishedVersion || state.version } - saveState(state) - fs.rmSync(P.pending(), { force: true }) - return finished +/** A move, said as a place rather than a distance: the page reflows and the + * pixels stop being true, but the element it was dropped on does not. */ +function moveLine (comment) { + const delta = comment.delta || { dx: 0, dy: 0 } + const dragged = `dragged ${Math.abs(delta.dx)}px ${delta.dx >= 0 ? 'right' : 'left'} and ${Math.abs(delta.dy)}px ${delta.dy >= 0 ? 'down' : 'up'}` + const target = comment.target + if (!target?.anchor) return `somewhere else on the page — ${dragged}. Nothing was under the drop, so the direction is all they gave you.` + const words = target.anchor.text || target.anchor.label + const place = target.where === 'inside' ? 'into' : target.where === 'before' ? 'before' : 'after' + return `${place} ${elLine(target.anchor)}${words ? ` “${words}”` : ''} (${dragged})` } -function nextRound (version, comments, feedback) { - const state = loadState() - let round = loadActiveRound(state) - if (!round) { - const seq = (Number(state.roundSeq) || 0) + 1 - round = { - id: `r${seq}`, baseVersion: version, status: 'queued', - createdAt: new Date().toISOString(), comments: [], - } +const strikeLine = comment => comment.scope === 'text' + ? `the text “${String(comment.text || '').slice(0, 160)}” — remove those words, leave the rest of the element` + : 'this element and everything in it' + +const coversLine = comment => comment.covers.map(c => `\`<${c.tag}>\` “${c.text}”`).join(' · ') + +function renderBrief (subject, going, fresh) { + const L = [] + L.push(`# ${subject.live ? 'Live UI review' : 'Wireframe review'} — ${subject.name} · v${subject.state.version || 1}`) + L.push(`${going.length} open comment(s) — every one is a must` + + (fresh.size ? ` · ${fresh.size} new since you last looked` : '')) + L.push('') + if (subject.live) { + L.push(`These are comments on the app running at \`${subject.origin || subject.name}\` — change the source, ` + + 'not a mockup. Each comment says which **route** it was made on; the anchor names the ' + + 'element, which is what to search the codebase for.') + L.push('') + L.push('The reviewer is looking at the app right now. If it hot-reloads they will see your ' + + 'change as you make it, so land whole changes rather than half of one.') + } else { + L.push(`Apply these to \`${subject.file ? path.basename(subject.file) : subject.name}\`, then publish the next version.`) } - const members = new Map((round.comments || []).map(comment => [comment.id, comment])) - for (const comment of comments || []) { - members.set(comment.id, { id: comment.id, revision: commentRevision(comment) }) + if (going.some(comment => comment.kind === 'move' || comment.kind === 'strike')) { + L.push('') + L.push('Some of these were drawn on the page rather than written: **Move it** is an arrow ' + + 'from a thing to where it should go, and **Delete** is something struck out. They are ' + + 'instructions in their own right — a note on one adds to it, and no note means there was ' + + 'nothing to add.') } - round.comments = [...members.values()] - round.feedback = feedback - round.updatedAt = new Date().toISOString() - return saveActiveRound(round) -} - -/** Upgrade an in-flight review created by a pre-round-ledger server. This keeps - * a tool update or server restart from stranding feedback already on disk. */ -function migrateLegacyPending () { - const state = loadState() - const existing = loadActiveRound(state) - if (existing) return existing - const pending = readJSON(P.pending()) - if (!pending?.comments?.length) return null - const seq = (Number(state.roundSeq) || 0) + 1 - const round = { - id: `r${seq}`, - baseVersion: Number(pending.version) || state.version, - status: 'queued', - createdAt: pending.sentAt || new Date().toISOString(), - updatedAt: new Date().toISOString(), - feedback: pending.feedback || null, - comments: pending.comments.map(id => ({ - id, - revision: commentRevision(latestComment(id)?.comment || { id }), - })), - migrated: true, + L.push('') + + const bySize = {} + for (const comment of going) (bySize[comment.size || 'desktop'] ||= []).push(comment) + for (const screen of SCREENS) { + const list = bySize[screen.id] + if (!list?.length) continue + L.push(`## ${screen.label} — ${screen.width} × ${screen.height}`) + L.push('') + for (const comment of list) { + L.push(`### ${comment.id}${fresh.has(comment.id) ? ' · NEW' : ''}`) + if (!fresh.has(comment.id)) L.push('*You have had this one before and it is still open — carry on with it rather than starting again.*') + if (subject.live && comment.route) L.push(`**Route** \`${comment.route}\``) + L.push(`**Where** ${whereLine(comment)}`) + if (comment.kind === 'move') L.push(`**Move it** ${moveLine(comment)}`) + if (comment.kind === 'strike') L.push(`**Delete** ${strikeLine(comment)}`) + if (comment.covers?.length) L.push(`**Covers** ${coversLine(comment)}`) + if (comment.note) L.push(comment.note) + for (const reply of comment.replies || []) { + L.push('') + L.push(`> **${reply.by === REVIEWER_ROLE ? 'They replied' : 'You asked'}:** ${reply.text}`) + } + L.push('') + } } - saveActiveRound(round) - writeJSON(P.pending(), { ...pending, roundId: round.id }) - return round + L.push('---') + L.push('Close what you have done. Anything you do not name stays open and comes back next time,') + L.push('so ask about whatever is unclear instead of guessing:') + L.push('```bash') + L.push(`node review-server.mjs publish ${subject.flags} --close --label ""`) + L.push(`node review-server.mjs reply ${subject.flags} --comment --text ""`) + L.push('```') + return L.join('\n') + '\n' } -/* "Linked" must mean someone will act on what the reviewer sends, not that a - watch process is alive. The heartbeat proves the process; a round nobody - claims within this window proves its events go unread — a watcher started - with the wrong host op, a dead session, and a killed watcher all look the - same from here. 90s gives an agent mid-turn time to reach the claim. */ -/* A round leaves the queue only by being claimed, so its wait is measured from - when it was created. Nothing else about the round decides this: a heartbeat - with a round nobody has picked up is the state this exists to catch. */ -const CLAIM_STALL_MS = 90_000 -const roundStalled = round => !!round && round.status === 'queued' && - Date.now() - Date.parse(round.createdAt || '') > CLAIM_STALL_MS -const agentListening = () => someoneWatching() && !roundStalled(loadActiveRound()) - -function roundSummary (round) { - if (!round) return null - return { - id: round.id, status: round.status, baseVersion: round.baseVersion, - comments: (round.comments || []).map(comment => comment.id), - createdAt: round.createdAt, claimedAt: round.claimedAt || null, - stalled: roundStalled(round), - } +/** + * Hand every open comment to the agent, and record that it went. + * + * All of them, every time — not only the new ones. A comment the agent skipped + * comes back on the next tick, so the only way to be rid of one is to close it, + * and nothing can be forgotten by being missed. What is new since the last + * delivery is marked as such, which is a hint for where to look rather than a + * filter on what arrives. + */ +function deliver (subject = here()) { + const comments = loadComments(subject) + const going = deliverable(comments) + const fresh = new Set(going.filter(comment => !comment.deliveredAt).map(comment => comment.id)) + const at = new Date().toISOString() + for (const comment of going) comment.deliveredAt = at + saveComments(comments, subject) + fs.mkdirSync(subject.store, { recursive: true }) + writeAtomic(subject.brief, renderBrief(subject, going, fresh)) + return { going, fresh } } -function unresolvedComments () { - return latestComments() - .map(record => record.comment) - .filter(comment => !comment.dismissed && comment.status !== 'addressed' && String(comment.note || '').trim()) - .map(comment => ({ id: comment.id, note: comment.note, status: comment.status || 'open' })) -} +/* Presence is the watcher: it is the loop that takes delivery, so a live + heartbeat is a session that will be handed the next comment written. */ +const agentListening = () => someoneWatching() + +const openComments = () => loadComments() + .filter(comment => comment.state === 'open' && String(comment.note || '').trim()) + .map(comment => ({ id: comment.id, note: comment.note, sent: !!comment.sentAt })) /* A published round is its meta file. The frozen html beside it is optional — a live round only has one once a review has been sent from it, and a round @@ -430,107 +495,83 @@ function listVersions () { /* ──────────────────────────── publish ───────────────────────────── */ /** - * Freeze the working file as the NEXT version and make it current, so the - * version the workspace names always has a frozen copy behind it. - * --replace overwrites the current version instead (for a version nobody has - * reviewed yet). + * The agent's answer: close what is done, and snapshot the version it did it in. + * + * The two halves are independent. `--close` closes exactly the comments it + * names and nothing else — anything left unnamed stays open and comes back on + * the next tick, so there is no coverage to satisfy and nothing to account for. + * `--label` freezes the page as the next version. Neither can be refused for + * anything the reviewer has done in the meantime: an agent that took delivery + * can always finish. + * + * --replace overwrites the current version instead of adding one, for a version + * nobody has reviewed yet. */ function cmdPublish (quiet) { - let state = loadState() - const active = loadActiveRound(state) || migrateLegacyPending() - const requestedRound = args.round && args.round !== true ? String(args.round) : null - - // Retrying a completed command is a no-op, not another version. - if (!active && requestedRound) { - const finished = readJSON(P.round(requestedRound)) - if (finished?.status === 'completed') { - if (!quiet) console.log(`Round ${requestedRound} already published as v${finished.publishedVersion}`) - return - } - console.error(`No active round ${requestedRound}`) - process.exit(2) - } + const ids = [...new Set(String(args.close ?? args.addressed ?? '').split(',').map(s => s.trim()).filter(Boolean))] + const label = args.label && args.label !== true ? String(args.label) : null + const snapshot = !!label || (!ids.length && args.close === undefined && args.addressed === undefined) - const addressed = [...new Set(String(args.addressed || '').split(',').map(s => s.trim()).filter(Boolean))] - if (active) { + const comments = loadComments() + if (ids.length) { + const byId = new Map(comments.map(comment => [comment.id, comment])) const errors = [] - if (!requestedRound) errors.push(`include --round ${active.id}`) - else if (requestedRound !== active.id) errors.push(`active round is ${active.id}, not ${requestedRound}`) - if (active.status !== 'active') errors.push(`claim ${active.id} before publishing it`) - if (args.replace === true || args.replace === 'true') errors.push('--replace cannot complete an active review round') - - const members = new Map((active.comments || []).map(comment => [comment.id, comment])) - for (const id of addressed) if (!members.has(id)) errors.push(`${id} does not belong to ${active.id}`) - for (const member of members.values()) { - const found = latestComment(member.id) - const comment = found?.comment - if (!comment) { errors.push(`${member.id} no longer exists`); continue } - if (comment.dismissed || comment.status === 'addressed' || comment.status === 'question') continue - if (!addressed.includes(member.id)) { - errors.push(`${member.id} is still open`) - continue - } - if (commentRevision(comment) !== member.revision) { - errors.push(`${member.id} changed after ${active.id} was submitted; collect the updated review before closing it`) - } - } - for (const id of addressed) { - const status = latestComment(id)?.comment?.status - if (status && status !== 'open') errors.push(`${id} is ${status}, not open`) + for (const id of ids) { + const comment = byId.get(id) + if (!comment) errors.push(`${id} is not a comment on this review`) + else if (!comment.sentAt) errors.push(`${id} has not been sent yet`) } + // Closing is all or nothing, so a typo costs a retry rather than half a round. if (errors.length) { - console.error(`Cannot publish ${active.id}:`) + console.error('Cannot close:') for (const error of errors) console.error(` - ${error}`) process.exit(2) } - } else if (addressed.length) { - console.error('Cannot mark comments addressed without an active review round') - process.exit(2) - } - - // Validation is complete. Nothing above this line mutates a version or a - // comment, so a rejected completion cannot leave a half-published round. - const replace = args.replace === true || args.replace === 'true' - const n = replace ? Math.max(1, state.version) : state.version + 1 - fs.mkdirSync(P.versions(), { recursive: true }) - if (!LIVE) fs.copyFileSync(FILE, P.version(n)) - - // Feedback carries items forward, so patch every stored occurrence. Review - // directories are the source here, not version history, which may be cleared. - for (const id of addressed) { - for (const record of commentRecords(id)) { - if (record.comment.status !== 'open') continue - record.comment.status = 'addressed' - delete record.comment.reopenedAt - delete record.comment.revert - writeJSON(record.file, record.saved) + // Closing what is already closed is a no-op, so a retried command is safe. + const at = new Date().toISOString() + for (const id of ids) { + const comment = byId.get(id) + if (comment.state === 'closed') continue + comment.state = 'closed' + // What was just closed is what the reviewer wants to look at; what was + // closed a while ago is a record. The panel reads that off this. + comment.closedAt = at } + saveComments(comments) } - const prev = readJSON(path.join(P.versions(), `v${n}.meta.json`), {}) || {} - writeJSON(path.join(P.versions(), `v${n}.meta.json`), { - n, - label: args.label || prev.label || (n === 1 ? (LIVE ? 'The app as it stands' : 'Initial version') : `${LIVE ? 'Round' : 'Version'} ${n}`), - date: new Date().toISOString(), - addressed, - ...(active ? { round: active.id } : {}), - }) - - state = loadState() - state.version = n - state.name = pageName() - saveState(state) - if (active) { - const outcomes = Object.fromEntries((active.comments || []).map(member => { - const comment = latestComment(member.id)?.comment - return [member.id, addressed.includes(member.id) ? 'addressed' - : comment?.status === 'question' ? 'waiting_for_reviewer' - : comment?.dismissed ? 'dismissed' : comment?.status || 'unknown'] - })) - finishActiveRound(active, 'completed', { publishedVersion: n, addressed, outcomes }) + let n = loadState().version + if (snapshot) { + const replace = args.replace === true || args.replace === 'true' + n = replace ? Math.max(1, n) : n + 1 + fs.mkdirSync(P.versions(), { recursive: true }) + if (!LIVE) fs.copyFileSync(FILE, P.version(n)) + const prev = readJSON(path.join(P.versions(), `v${n}.meta.json`), {}) || {} + writeJSON(path.join(P.versions(), `v${n}.meta.json`), { + n, + label: label || prev.label || (n === 1 ? (LIVE ? 'The app as it stands' : 'Initial version') : `Version ${n}`), + date: new Date().toISOString(), + }) + const state = loadState() + state.version = n + state.name = pageName() + saveState(state) } - if (!quiet) console.log(`Published v${n}${active ? ` — completed ${active.id}` : ''}${addressed.length ? ` — ${addressed.length} item(s) marked addressed` : ''}`) + if (!quiet) { + console.log([ + snapshot ? `Published v${n}` : null, + ids.length ? `closed ${ids.length} comment(s)` : null, + ].filter(Boolean).join(' — ') || 'Nothing to do') + /* Said here because here is where the agent believes it has finished. The + tick will not raise these again on its own — it wakes for what the + reviewer says, and they have said it already. */ + const left = loadComments().filter(comment => comment.state === 'open' && comment.deliveredAt) + if (left.length) { + console.log(`${left.length} comment(s) you were given are still open: ${left.map(c => c.id).join(', ')}`) + console.log('Close them, or reply asking about them — leaving one silently leaves it on the reviewer.') + } + } touch() } @@ -546,64 +587,18 @@ function cmdReply () { console.error('Need --comment --text "…"') process.exit(1) } - const active = loadActiveRound() || migrateLegacyPending() - const requestedRound = args.round && args.round !== true ? String(args.round) : null - if (active) { - if (!requestedRound || requestedRound !== active.id) { - console.error(`Reply belongs to active round ${active.id}; include --round ${active.id}`) - process.exit(2) - } - if (active.status !== 'active') { - console.error(`Claim ${active.id} before replying to it`) - process.exit(2) - } - if (!(active.comments || []).some(comment => comment.id === id)) { - console.error(`${id} does not belong to ${active.id}`) - process.exit(2) - } - } - const record = currentRecord(id) - if (!record) { console.error(`No comment ${id} found`); process.exit(1) } - const target = record.comment + const comments = loadComments() + const target = comments.find(comment => comment.id === id) + if (!target) { console.error(`No comment ${id} found`); process.exit(1) } + // Asking is not a state: the comment stays open, and stays in the next tick + // until it is closed. Whether it is waiting on the reviewer is written in the + // thread — the last word being the agent's — not in a second field that can + // disagree with it. target.replies = (target.replies || []).concat({ by: AGENT_ROLE, text, at: new Date().toISOString(), }) - if (args.status !== 'open') target.status = 'question' - record.saved.version = record.version - record.saved.updatedAt = new Date().toISOString() - writeJSON(record.file, record.saved) - - // A round made entirely of questions/dismissals needs no empty publication. - // Close its machine-owned work state as soon as no member remains open. - if (active) { - const outcomes = Object.fromEntries((active.comments || []).map(member => { - const comment = latestComment(member.id)?.comment - return [member.id, comment?.dismissed ? 'dismissed' : comment?.status || 'missing'] - })) - if (Object.values(outcomes).every(outcome => ['question', 'addressed', 'dismissed'].includes(outcome))) { - finishActiveRound(active, 'completed', { outcomes }) - } - } - console.log(`Replied to ${id} on v${record.version}${record.carriedFrom ? ` (carried forward from v${record.carriedFrom})` : ''} — the reviewer will see it on the comment`) - touch() -} - -/** Atomically acknowledge delivery without deleting the durable round ledger. */ -function cmdClaim () { - const round = loadActiveRound() || migrateLegacyPending() - if (!round) { console.error('No active review round to claim'); process.exit(2) } - const requested = args.round && args.round !== true ? String(args.round) : null - if (!requested || requested !== round.id) { - if (!requested) console.error(`Include --round ${round.id}`) - else console.error(`Active round is ${round.id}, not ${requested}`) - process.exit(2) - } - round.status = 'active' - round.claimedAt ||= new Date().toISOString() - round.lastClaimedAt = new Date().toISOString() - saveActiveRound(round) - fs.rmSync(P.pending(), { force: true }) - console.log(`Claimed ${round.id} — ${(round.comments || []).length} comment(s) · ${round.feedback}`) + saveComments(comments) + console.log(`Replied to ${id} — the reviewer will see it on the comment`) touch() } @@ -627,21 +622,6 @@ function cmdShare () { touch() } -/** - * "Is anything waiting on me?" — one cheap call, made between steps of a round. - * A round sitting in the queue is named here and nothing suppresses it: an agent - * asking and being told nothing, twice, while six comments sat queued is exactly - * how a broken watcher stays broken. Exit is always 0. - */ -function cmdCheck () { - const waiting = loadActiveRound() - if (waiting?.status === 'queued') { - console.log(`carry on — but ${waiting.id} (${(waiting.comments || []).length} comment(s), sent ${waiting.createdAt}) is waiting unclaimed.`) - console.log(`Claim it: node review-server.mjs claim ${SUBJECT} --round ${waiting.id}`) - } else console.log('carry on') - process.exit(0) -} - /** * Wait for the reviewer, and say so on the page while waiting. * @@ -798,7 +778,7 @@ function cmdAck () { * node review-server.mjs watch --all --stream */ async function cmdStream (stores, label, all, subjectFlags) { - const seen = new Map(stores.map(s => [s, { sent: null, flags: new Set(), replies: repliesIn(s) }])) + const seen = new Map(stores.map(s => [s, { flags: new Set() }])) const say = line => { process.stdout.write(line + '\n') } say(`WATCHING ${stores.length} review(s): ${stores.map(label).join(', ')}`) @@ -884,20 +864,16 @@ async function cmdStream (stores, label, all, subjectFlags) { } else was.flags.delete(file) } - const brief = readJSON(at('pending')) - if (brief && brief.sentAt !== was.sent) { - was.sent = brief.sentAt - say(`REVIEW ${label(store)} · ${brief.roundId || 'legacy round'} · ${brief.counts?.total ?? '?'} comment(s) · ${brief.feedback}`) + /* The tick. Anything the reviewer has written and not had back — a new + comment, or an answer on one already in hand — is handed over here, and + everything still open goes with it. A reply needs no separate event: + it is the same comment, coming round again with more said on it. */ + const subject = subjectOf(store) + if (anythingWaiting(subject)) { + const { going, fresh } = withStoreLock(() => deliver(subject), store) + say(`REVIEW ${label(store)} · ${going.length} open` + + (fresh.size ? `, ${fresh.size} new` : '') + ` · ${subject.brief}`) } - - // A reply is the other thing that waits on the agent, and it writes no - // sentinel — answering a question just lands in annotations.json. - const now = repliesIn(store) - for (const [key, cur] of now) { - if ((was.replies.get(key)?.n || 0) >= cur.n) continue - say(`REPLIED ${label(store)} · ${key} · "${(cur.last || '').replace(/\s+/g, ' ').slice(0, 100)}"`) - } - was.replies = now } /* A review opened after this started should join it. Otherwise "one watcher @@ -908,7 +884,7 @@ async function cmdStream (stores, label, all, subjectFlags) { for (const store of liveStores()) { if (seen.has(store)) continue stores.push(store) - seen.set(store, { sent: null, flags: new Set(), replies: repliesIn(store) }) + seen.set(store, { flags: new Set() }) say(`OPENED ${label(store)} · now watching ${stores.length} review(s)`) } // A review that arrives after the handshake is what makes the link real. @@ -926,20 +902,6 @@ async function cmdStream (stores, label, all, subjectFlags) { } } -/** Every reviewer reply in a store, as `v/` → { n, last }. */ -function repliesIn (store) { - const out = new Map() - let vs = [] - try { vs = fs.readdirSync(path.join(store, 'reviews')) } catch { return out } - for (const v of vs) { - for (const a of readJSON(path.join(store, 'reviews', v, 'annotations.json'))?.annotations || []) { - const mine = (a.replies || []).filter(r => r.by === REVIEWER_ROLE) - if (mine.length) out.set(`${v}/${a.id}`, { n: mine.length, last: mine.at(-1)?.text || '' }) - } - } - return out -} - async function cmdWatch () { // `--file` may be given more than once; parseArgs keeps only the last, so // read them off the raw argv. @@ -986,9 +948,9 @@ async function cmdWatch () { review nobody is reading. So the last thing printed is the command that puts it back. Prefer `watch --stream` via Host op watch_stream. */ const rearm = `node "${process.argv[1]}" ${process.argv.slice(2).join(' ')}` - const done = (what, store, file) => { + const done = (what, store, file, detail = '') => { stopBeating() - console.log(`${what} ${label(store)}`) + console.log(`${what} ${label(store)}${detail}`) if (file) { try { console.log(fs.readFileSync(file, 'utf8')) } catch {} } console.log(`\nThis one-shot watch has now ended. Either restart it:\n ${rearm}`) console.log(`or use the streaming form, which does not end:\n ${rearm} --stream`) @@ -1003,7 +965,12 @@ async function cmdWatch () { const at = n => inStore(store, n) if (fs.existsSync(at('approved'))) return done('APPROVED', store, at('approved')) if (fs.existsSync(at('share'))) return done('SHARE', store, at('share')) - if (fs.existsSync(at('pending'))) return done('REVIEW', store, at('pending')) + const subject = subjectOf(store) + if (anythingWaiting(subject)) { + const { going, fresh } = withStoreLock(() => deliver(subject), store) + return done('REVIEW', store, subject.brief, + ` · ${going.length} open${fresh.size ? `, ${fresh.size} new` : ''}`) + } if (!fs.existsSync(at('url'))) { console.log(`CLOSED ${label(store)} — the tab went away`) fs.rmSync(at('watching'), { force: true }) @@ -1032,8 +999,12 @@ function cmdStatus () { name: pageName(), version: state.version, versions: listVersions().map(v => `v${v.n}: ${v.label}`), - activeRound: roundSummary(loadActiveRound(state)), - pendingReview: fs.existsSync(P.pending()) ? readJSON(P.pending(), {}) : null, + comments: loadComments().map(comment => ({ + id: comment.id, + state: comment.state, + where: comment.sentAt ? (comment.deliveredAt ? 'with the agent' : 'queued') : 'still being written', + note: comment.note, + })), approved: fs.existsSync(P.approved()) ? readJSON(P.approved(), {}) : null, shareRequest: fs.existsSync(P.share()) ? readJSON(P.share(), {}) : null, shareUrl: loadState().shareUrl || null, @@ -1086,12 +1057,6 @@ function readBody (req) { function payload () { const state = loadState() const versions = listVersions() - const activeRound = loadActiveRound(state) - const reviews = {} - for (const version of new Set([...listReviewVersions(), state.version])) { - const saved = readJSON(path.join(P.review(version), 'annotations.json')) - if (saved) reviews[version] = saved - } return { mode: LIVE ? 'live' : 'local', // What this server is on now. A tab opened before an update still holds the @@ -1105,21 +1070,19 @@ function payload () { currentVersion: state.version, // A live review has no single document to hand over — the app serves it. html: LIVE ? '' : fs.readFileSync(FILE, 'utf8'), - versions, reviews, + versions, + /* The whole list, every time. A comment carries where it is — written, + queued, with the agent — so a reload or a second tab reads the same + review as the tab that wrote it, with nothing to reconstruct. */ + comments: loadComments(), shareUrl: state.shareUrl || null, shareVersion: state.shareVersion || null, sharePending: fs.existsSync(P.share()), historyClearedAt: state.historyClearedAt || null, - /* Whether a round is out, and which comments are in it. The workspace used - to know this only because it was the tab that pressed Send — so a reload, - or a second tab, showed a review where nothing was happening. */ - pendingReview: fs.existsSync(P.pending()) ? readJSON(P.pending(), {}) : null, - activeReview: roundSummary(activeRound), /* Whether an agent session is actually waiting on this review. The link dot used to say "Linked" whenever the page could reach this server, which is a fact about the browser and the file server — not about anyone being - there to read what you send. A live heartbeat with a round sitting - unclaimed is the same lie one layer up, so that drops it too. */ + there to read what you send. */ watching: agentListening(), } } @@ -1135,20 +1098,58 @@ function payload () { * knows nothing of what the first just wrote. So an id the client left out is * kept. Removing a comment is `dismissed`, which is a field, not an absence. */ -function mergeIncoming (n, incoming) { - const stored = readJSON(path.join(P.review(n), 'annotations.json'))?.annotations - if (!stored?.length) return incoming - const byId = new Map(incoming.map(a => [a.id, a])) - const merged = stored.map(prev => { - const a = byId.get(prev.id) - if (!a) return prev - const next = { ...a } - if ((prev.replies || []).length > (a.replies || []).length) next.replies = prev.replies - if (prev.status === 'addressed' && a.status !== 'addressed' && !a.reopenedAt) next.status = 'addressed' - return next - }) - const kept = new Set(stored.map(a => a.id)) - return merged.concat(incoming.filter(a => !kept.has(a.id))) +/** A thread is an append-only log, so two writers can only ever add to it and + * the union of what they each hold is the whole of it. No copy is authoritative + * and none can lose a line by being stale. */ +function mergeReplies (stored = [], incoming = []) { + const byKey = new Map() + for (const reply of [...stored, ...incoming]) { + byKey.set(`${reply.by}|${reply.at}|${reply.text}`, reply) + } + return [...byKey.values()].sort((a, b) => Date.parse(a.at || 0) - Date.parse(b.at || 0)) +} + +/** + * Take what the workspace holds, and keep what it is not allowed to change. + * + * A comment the reviewer has sent is frozen: its words are what the agent was + * given, so only the thread may still grow on it. Before it is sent it is still + * theirs to rewrite. Either way the protocol's own fields are never the + * client's to set — a save cannot close a comment, un-send it, or say it was + * delivered — and a comment the payload does not mention is left alone, because + * a save says what one tab holds, not what the review contains. + */ +function acceptFromReviewer (incoming) { + const comments = loadComments() + const byId = new Map(comments.map(comment => [comment.id, comment])) + const at = new Date().toISOString() + for (const raw of incoming) { + if (!raw?.id) continue + const stored = byId.get(raw.id) + if (!stored) { + const { state, deliveredAt, ...rest } = raw + const fresh = normaliseComment({ ...rest, state: 'open', deliveredAt: null, sentAt: raw.sentAt ? at : null }) + comments.push(fresh) + byId.set(fresh.id, fresh) + continue + } + const replies = mergeReplies(stored.replies, raw.replies) + const answered = replies.length > (stored.replies || []).length && + replies.at(-1)?.by === REVIEWER_ROLE + // The words are frozen once they are sent; before that the comment is still + // a draft and the reviewer may rewrite it however they like. + if (!stored.sentAt) { + for (const [key, value] of Object.entries(raw)) { + if (!OWNED.includes(key) && key !== 'replies') stored[key] = value + } + } + stored.replies = replies + if (!stored.sentAt && raw.sentAt) stored.sentAt = at + // Answering something called done says it is not done. It is the reviewer's + // only way back in, and it needs no separate control. + if (answered && stored.state === 'closed') stored.state = 'open' + } + return saveComments(comments) } /** Keep the current snapshot, but remove every earlier snapshot. Comments stay @@ -1402,14 +1403,36 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr return sendJSON(res, 200, { ok: true }) }) } - if (p === '/api/annotations' && req.method === 'POST') { + /* Everything the workspace writes: a comment being drafted, a comment the + reviewer has just let go of, and an answer typed into a thread. The rules + about which of those may change what are in acceptFromReviewer. */ + if (p === '/api/comments' && req.method === 'POST') { const body = JSON.parse(await readBody(req) || '{}') - const n = Number(body.version) || loadState().version return withStoreLock(() => { - writeJSON(path.join(P.review(n), 'annotations.json'), { - version: n, updatedAt: new Date().toISOString(), - annotations: mergeIncoming(n, body.annotations || []), - }) + const before = new Set(loadComments().filter(c => c.sentAt).map(c => c.id)) + const comments = acceptFromReviewer(body.comments || []) + const sent = comments.filter(c => c.sentAt && !before.has(c.id)) + if (sent.length) console.log(`\n● ${sent.length} comment(s) sent — waiting for the next tick`) + touch() + return sendJSON(res, 200, { ok: true, comments }) + }) + } + /* Taking a comment back. Only while it is still sitting here: once it has + been handed over, withdrawing it is a reply saying so, because the agent + may already have done the work and has to be told to undo it. */ + if (p === '/api/comments/dismiss' && req.method === 'POST') { + const body = JSON.parse(await readBody(req) || '{}') + return withStoreLock(() => { + const comments = loadComments() + const target = comments.find(comment => comment.id === body.id) + if (!target) return sendJSON(res, 404, { error: 'No such comment' }) + if (target.deliveredAt) { + return sendJSON(res, 409, { + error: 'That one is already with the agent. Reply on it to ask for it back.', + }) + } + saveComments(comments.filter(comment => comment.id !== body.id)) + touch() return sendJSON(res, 200, { ok: true }) }) } @@ -1427,50 +1450,6 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr }) }) } - if (p === '/api/feedback' && req.method === 'POST') { - const body = JSON.parse(await readBody(req) || '{}') - const n = Number(body.version) || loadState().version - const dir = P.review(n) - return withStoreLock(() => { - /* Prepare the durable review material before raising its notification. The - server's reload broadcast is debounced, so these synchronous writes are - observed as one state transition rather than a transient empty round. */ - fs.mkdirSync(dir, { recursive: true }) - writeJSON(path.join(dir, 'annotations.json'), { - version: n, updatedAt: new Date().toISOString(), - annotations: mergeIncoming(n, body.annotations || []), - }) - const round = nextRound(n, body.feedback?.comments || [], path.join(dir, 'feedback.md')) - writeJSON(path.join(dir, 'feedback.json'), { ...(body.feedback || {}), roundId: round.id }) - fs.writeFileSync(path.join(dir, 'feedback.md'), String(body.markdown || '').replaceAll('', round.id)) - const prev = fs.existsSync(P.pending()) ? readJSON(P.pending(), {}) : null - const stillOut = prev?.roundId === round.id && prev?.sentAt && Date.now() - Date.parse(prev.sentAt) < 5 * 60e3 - writeJSON(P.pending(), { - roundId: round.id, - page: FILE || appOrigin(), app: appOrigin(), - name: pageName(), - version: n, - counts: { total: round.comments.length }, - // Live: the screens the comments were made on, so the round can be - // planned before the brief is even opened. - routes: body.feedback?.routes || [], - // Which comments went out, so a workspace opened later — or reloaded - // mid-round — can put the progress back on the right ones instead of - // showing a round that looks like it never happened. - comments: round.comments.map(comment => comment.id), - feedback: path.join(dir, 'feedback.md'), - sentAt: stillOut ? prev.sentAt : new Date().toISOString(), - }) - console.log(`\n● ${round.id} sent for v${n} — ${round.comments.length} comment(s) → ${path.join(dir, 'feedback.md')}`) - return sendJSON(res, 200, { ok: true, roundId: round.id }) - }) - } - /** - * The reviewer changed their mind while you were working. This is a request to - * stop, not a hard kill — nothing here can reach into a running turn. The agent - * notices it either through watch_stream or on its next check, and answers for - * whatever it had already done. - */ /** * "Give me a link I can send to someone." The workspace cannot publish a * public URL — only the agent via Host op `share` can — so this raises the ask @@ -1502,30 +1481,24 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr const body = JSON.parse(await readBody(req) || '{}') const n = Number(body.version) || loadState().version return withStoreLock(() => { - const openComments = unresolvedComments() + const stillOpen = openComments() const expected = Number.isInteger(Number(body.expectedOpenCount)) ? Number(body.expectedOpenCount) : Array.isArray(body.openComments) ? body.openComments.length : null - if (expected !== null && expected !== openComments.length) { + if (expected !== null && expected !== stillOpen.length) { return sendJSON(res, 409, { error: 'The open-comment count changed. Review the current list before approving.', - openComments, + openComments: stillOpen, }) } writeJSON(P.approved(), { page: FILE || appOrigin(), app: appOrigin(), name: pageName(), version: n, - openComments, + openComments: stillOpen, at: new Date().toISOString(), }) - const active = loadActiveRound() - if (active) finishActiveRound(active, 'approved', { - approvedVersion: n, - outcomes: Object.fromEntries((active.comments || []).map(comment => [comment.id, 'left_open_on_approval'])), - }) - fs.rmSync(P.pending(), { force: true }) - const left = openComments.length + const left = stillOpen.length console.log(`\n✓ Approved at v${n}${left ? ` — ${left} comment(s) left unapplied` : ''} — the review is closed`) sendJSON(res, 200, { ok: true }) // Let the response land before the socket goes away with the process. @@ -1564,15 +1537,19 @@ async function cmdServe () { // same startup transaction upgrades feedback left by a pre-ledger server. withStoreLock(() => { if (loadState().version === 0) cmdPublish(true) - migrateLegacyPending() }) - if (LIVE) { - // Whoever picks this store up later — publish, reply, a second serve — needs - // to know it is an app and which one, without being told again. + { + /* Whoever picks this store up later — publish, reply, a second serve, a + watcher covering reviews it did not start — needs to know what this + review is of, without being told again. It is what lets one watcher hand + over the comments for every review it covers, and name the commands to + answer them with. */ const state = loadState() - state.app = APP.origin state.name = pageName() - if (args.start && args.start !== true) state.start = String(args.start).startsWith('/') ? args.start : '/' + args.start + if (LIVE) { + state.app = APP.origin + if (args.start && args.start !== true) state.start = String(args.start).startsWith('/') ? args.start : '/' + args.start + } else state.file = FILE saveState(state) } // Terminal signals belong to the review that raised them. A new one starts @@ -1599,7 +1576,10 @@ async function cmdServe () { workspace starts holding new comments back instead of sending into the round. Without this the menu sits on "publishing the link…" forever and "queued" never becomes "being worked on". */ - try { fs.watch(STORE, (_e, name) => { if (name === 'state.json' || name === 'share' || name === 'pending') touch() }) } catch {} + /* The agent writes into the same store from its own process — closing a + comment, answering one, taking delivery — and the page has to hear about it + without asking. */ + try { fs.watch(STORE, (_e, name) => { if (['state.json', 'share', 'comments.json'].includes(name)) touch() }) } catch {} server.on('error', e => { if (e.code === 'EADDRINUSE') { @@ -1675,15 +1655,13 @@ async function cmdServe () { switch (args._) { case 'publish': withStoreLock(() => cmdPublish()); break - case 'claim': withStoreLock(cmdClaim); break case 'reply': withStoreLock(cmdReply); break case 'ack': withStoreLock(cmdAck); break case 'share': withStoreLock(cmdShare); break case 'status': cmdStatus(); break - case 'check': cmdCheck(); break case 'watch': cmdWatch(); break case 'serve': cmdServe(); break default: - console.error(`Unknown command "${args._}". Use: serve | claim | publish | reply | ack | share | status | check | watch`) + console.error(`Unknown command "${args._}". Use: serve | watch | publish | reply | ack | share | status`) process.exit(1) } diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index 3b23108..b072f53 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -1013,8 +1013,6 @@ aria-label="More">▾
- -
@@ -1651,7 +1649,7 @@

appears — mark, list card, composer. Each of those sets `--mk` once and every part it is made of picks the colour up from there. */ const MARK_DONE = 'var(--ok)'; -const markColour = a => a.status === 'addressed' ? MARK_DONE : MARK; +const markColour = a => isClosed(a) ? MARK_DONE : MARK; /* ── language ───────────────────────────────────────────────────────── The workspace chrome speaks two languages; the page under review is @@ -1671,7 +1669,7 @@

del: 'Delete comment', clearAll: 'Clear all', cleared: n => `Cleared ${n} comment${n > 1 ? 's' : ''}`, clearDialogTitle: 'Clear all comments?', - clearImpact: n => `This removes ${n} comment${n === 1 ? '' : 's'} from the review, including any carried from earlier versions.`, + clearImpact: n => `This takes back ${n} comment${n === 1 ? '' : 's'} still waiting here. Anything {agent} already has stays — reply on those to ask for them back.`, clearKept: 'The wireframe and version history will stay.', clearCancel: 'Cancel', clearConfirm: 'Clear all', clearHistory: 'Clear history', @@ -1731,9 +1729,6 @@

notPickedUp: n => `${n} comment${n > 1 ? 's' : ''} sent — not picked up yet`, workingAndQueued: (w, q) => `{agent} is working on ${w} · ${q} waiting`, queuedTag: 'queued', - heldOn: n => `${n} comment${n > 1 ? 's' : ''} queued — sends when this round ends`, - sendNow: 'Send the queue now', - sendNowDesc: n => `${n} queued comment${n > 1 ? 's' : ''} — don't wait for this round to finish`, addressedGroup: n => `Addressed (${n})`, earlierGroup: n => `Earlier (${n})`, revert: 'Revert', refine: 'Refine', revertTitle: 'Ask {agent} to put this back the way it was', @@ -1743,12 +1738,11 @@

dismiss: 'Dismiss', dismissTitle: 'Take this off the list', more: 'More', sendOne: 'Send just this one to {agent}', - landedTag: v => 'refresh to see', - landedTitle: '{agent} changed this. Bring the new version in to see it.', - dismissed: 'Dismissed', + dismissed: 'Taken back', + withdrawByReply: '{agent} already has this one — say what you want undone.', + closedSome: n => `{agent} closed ${n} comment${n > 1 ? 's' : ''}`, undoReply: 'Take back this reply', revertNote: 'Revert this change — put it back the way it was before.', - wantsRevert: 'Revert requested', approve: 'Approve & finish', approveSure: 'Approve & close the review?', approvedTitle: 'Approved — the review is closed', approvedBody: '{agent} has been told the design is signed off and can carry on. You can close this tab.', @@ -1764,7 +1758,6 @@

sendReply: 'Reply', addReply: 'Reply', coversN: n => `${n} element${n > 1 ? 's' : ''} inside`, offscreen: 'not on screen', offscreenToast: 'Not on the page right now', - fromEarlier: cap => `from ${cap}`, anchorGone: 'not on screen', anchorLoose: 'moved since this version', inRegion: (k, l) => k === 'region' ? (l ? `in “${l}”` : '') : (l ? `in ${k} “${l}”` : `in ${k}`), /* live review */ @@ -1790,7 +1783,7 @@

del: '删除批注', clearAll: '全部清除', cleared: n => `已清除 ${n} 条批注`, clearDialogTitle: '清除所有批注?', - clearImpact: n => `这会从评审中移除 ${n} 条批注,包括从过往版本延续的批注。`, + clearImpact: n => `这会收回还在等待的 ${n} 条批注。{agent} 已收到的不受影响 — 请在那些批注上回复说明。`, clearKept: '线框图和版本历史都会保留。', clearCancel: '取消', clearConfirm: '全部清除', clearHistory: '清除历史', @@ -1845,9 +1838,6 @@

notPickedUp: n => `${n} 条批注已发送,尚未被接收`, workingAndQueued: (w, q) => `{agent} 正在处理 ${w} 条 · ${q} 条等待中`, queuedTag: '等待中', - heldOn: n => `${n} 条已排队 — 本轮结束后发送`, - sendNow: '立即发送队列', - sendNowDesc: n => `${n} 条排队中 — 不等本轮结束`, addressedGroup: n => `已处理(${n})`, earlierGroup: n => `更早(${n})`, revert: '撤回', refine: '继续完善', revertTitle: '让 {agent} 把这处改回原样', @@ -1857,12 +1847,11 @@

dismiss: '不用管了', dismissTitle: '从列表中移除', more: '更多', sendOne: '只发送这一条给 {agent}', - landedTag: v => '刷新查看', - landedTitle: '{agent} 改过这处。加载新版本即可看到。', - dismissed: '已移除', + dismissed: '已收回', + withdrawByReply: '{agent} 已收到这条 — 请说明需要撤销什么。', + closedSome: n => `{agent} 关闭了 ${n} 条批注`, undoReply: '撤回这条回复', revertNote: '撤销这处改动——恢复成修改之前的样子。', - wantsRevert: '要求撤回', approve: '批准并结束', approveSure: '确定批准并关闭评审?', approvedTitle: '已批准 — 评审已关闭', approvedBody: '{agent} 已收到定稿通知,可以继续下一步。你可以关闭此标签页。', @@ -1878,7 +1867,6 @@

sendReply: '发送', addReply: '回复', coversN: n => `框内 ${n} 个元素`, offscreen: '当前不可见', offscreenToast: '页面上当前看不到这个元素', - fromEarlier: cap => `来自 ${cap}`, anchorGone: '当前不可见', anchorLoose: '页面已改动,位置为大致位置', inRegion: (k, l) => k === 'region' ? (l ? `位于「${l}」` : '') : (l ? `位于 ${k}「${l}」` : `位于 ${k}`), /* 实时评审 */ @@ -1927,7 +1915,7 @@

const S = { runtime: 'local', name: 'Review', fileName: 'page.html', - html: '', versions: [], reviews: {}, + html: '', versions: [], comments: [], version: 1, viewing: 1, historyClearedAt: null, clearingHistory: false, /* `mode` is what the pointer does right now — View, or one of the annotate @@ -1938,25 +1926,13 @@

// `fitted` says the zoom is the one that fills the canvas rather than one the // reviewer chose, so it is free to follow the canvas when the canvas changes. zoom: 1, fitted: true, - ann: [], carried: [], + ann: [], sel: null, // Comments whose element is not on the page as it stands right now. offscreen: new Set(), // Threads opened in the panel, and which reply box the cursor is in. threadOpen: new Set(), focusReply: null, - awaiting: false, pendingUpdate: null, sentSig: null, - activeRoundId: null, - queued: new Set(), // sent, but the brief has not been collected yet - collected: new Set(), // ids Claude has taken delivery of - landed: new Set(), // dealt with by a version this page has not adopted yet - landedVersion: null, - // Which comments went out with the last send and have not come back yet. - working: new Set(), - /* Sent while a round was already collected and underway. Nothing goes on the - wire: the ids wait here — and as a `held` flag on the comment itself, which - is what survives a reload — then go out as one batch when the round ends. */ - held: new Set(), - // A stop has been asked for and the round has not ended yet. + pendingUpdate: null, linked: null, // null until the connection has actually said one way or other // The shareable Artifact: asked for here, published by Claude, link comes back. share: { url: null, version: null, pending: false }, @@ -1990,7 +1966,7 @@

S.fileName = data.fileName || 'page.html'; S.html = data.html || ''; S.versions = data.versions || []; - S.reviews = data.reviews || {}; + S.comments = data.comments || []; S.version = S.viewing = data.currentVersion || 1; S.historyClearedAt = data.historyClearedAt || null; S.app = data.app || null; @@ -2002,28 +1978,11 @@

VSShell.setServerVersion(data.version); const phase = S.runtime === 'phase'; + /* Work in flight belongs to the review, not to the tab that started it. Each + comment carries whether it has been sent and whether Claude has been handed + it, so a reload — or a second tab — picks the progress back up instead of + showing a workspace where nothing ever happened. */ loadAnnotations(); - /* A round in flight belongs to the review, not to the tab that started it. - The brief on disk names the comments that went out, so a reload — or a - second tab — picks the progress back up instead of showing a workspace - where nothing ever happened. */ - S.activeRoundId = data.activeReview?.id || null; - const out = data.activeReview?.comments || data.pendingReview?.comments; - if (out?.length) { - S.awaiting = true; - const sentAt = data.pendingReview?.sentAt || data.activeReview?.createdAt; - const at = sentAt || new Date().toISOString(); - for (const id of out) { const a = annById(id); if (a && !a.sentAt) a.sentAt = at } - setWorking(out); - } - readFlight(data); - /* Holds outlive the tab that made them: the flag rides the saved annotation. - A round still out keeps them held; a review at rest gets them now — the - send the closing tab still owed. */ - S.held = new Set(S.ann - .filter(a => a.held && a.status === 'open' && !a.dismissed && hasSubstance(a)) - .map(a => a.id)); - if (S.held.size && !S.working.size && served()) flushHeld(); // Review is the whole product for now, so the word beside the mark says the // product rather than which of one tool you are in. Which page you are on is // already on the window below, twice. Phase preview is a different tool and @@ -2040,42 +1999,31 @@

if (served()) liveReload(); } -/** Claude spoke last and nobody has answered — the one state that stalls a round. */ -const awaitsReply = a => a.status === 'question' || - (a.status !== 'addressed' && isAgent((a.replies || []).at(-1)?.by)); +/* Everything the panel says about a comment is read off the comment. A comment + is open or closed; two timestamps say where it has got to between the + reviewer and Claude. Nothing here is remembered separately, so a reload and a + second tab see the same review as the tab that wrote it. */ +const isClosed = a => a.state === 'closed'; +const isOpen = a => !isClosed(a); +/** Let go of by the reviewer: it is Claude's to answer, and its words are set. */ +const sent = a => !!a.sentAt; +/** Written and released, but Claude has not been handed it yet. */ +const isQueued = a => !!a.sentAt && !a.deliveredAt; +/** In Claude's hands: it went out with a delivery and has not come back closed. */ +const isWorking = a => !!a.deliveredAt && isOpen(a); +/** Claude spoke last and nobody has answered — the one state that waits on you. */ +const awaitsReply = a => isOpen(a) && isAgent((a.replies || []).at(-1)?.by); function loadAnnotations () { const local = S.runtime === 'artifact' ? lsGet() : null; - S.ann = (local ?? S.reviews[S.version]?.annotations ?? []).map(normalise); - /* What earlier versions still have to say. Open comments ride along because - they are unfinished, addressed ones because "Claude changed it" is not the - same as "that was the change I wanted", and questions because they are the - one thing waiting on the reviewer — leaving those behind took Claude's - question off the screen at the next version and left nobody to answer it. - A comment leaves the screen when the reviewer dismisses it, and not before. - A later copy overwrites an earlier one, so walk the versions in order. */ - const ghosts = new Map(); - const earlier = Object.entries(S.reviews) - .map(([v, rev]) => [Number(v), rev]) - .filter(([v]) => v < S.version) - .sort(([a], [b]) => a - b); - for (const [v, rev] of earlier) { - for (const a of rev.annotations || []) { - if (!['open', 'addressed', 'question'].includes(a.status)) continue; - ghosts.set(a.id, { ...normalise(a), fromVersion: v }); - } - } - for (const a of S.ann) ghosts.delete(a.id); // this version's copy is the live one - S.carried = [...ghosts.values()].filter(a => !a.dismissed); - // Anything Claude has said back is waiting on you, whether or not it was - // filed as a question — open the thread so the words are visible and the box - // to answer in is already there. A question asked several versions ago is - // still a question, so the carried ones count too. - for (const a of S.ann.concat(S.carried)) if (awaitsReply(a)) S.threadOpen.add(a.id); -} -// status: open (waiting on Claude) · question (Claude asked, waiting on you) · -// addressed (Claude changed it). Only Claude moves a comment to addressed. -const normalise = a => ({ status: 'open', note: '', size: 'desktop', replies: [], ...a }); + S.ann = (local ?? S.comments ?? []).map(normalise); + // Anything Claude has said back is waiting on you: open the thread so the + // words are visible and the box to answer in is already there. + for (const a of S.ann) if (awaitsReply(a)) S.threadOpen.add(a.id); +} +// state: open (still to be dealt with) · closed (Claude says it is done). +// Only Claude closes one; answering a closed one puts it back to open. +const normalise = a => ({ state: 'open', note: '', size: 'desktop', replies: [], sentAt: null, deliveredAt: null, ...a }); const lsKey = () => `vstack:review:${S.fileName}:v${S.version}`; const lsGet = () => { try { return JSON.parse(localStorage.getItem(lsKey())) } catch { return null } }; @@ -2088,9 +2036,11 @@

const real = S.ann.filter(hasSubstance); if (S.runtime === 'artifact') { try { localStorage.setItem(lsKey(), JSON.stringify(real)) } catch {} ; return } try { - await fetch(API + '/annotations', { + // The server keeps what this tab is not allowed to change: a comment + // already sent keeps its words, and only the thread grows on it. + await fetch(API + '/comments', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ version: S.version, annotations: real }), + body: JSON.stringify({ comments: real }), }); } catch {} }, 700); @@ -2132,26 +2082,17 @@

toast(T('historyCleared')); return; } - /* A missing brief means Claude picked it up and deleted it, which is the - *start* of the work, not the end of it — reading that as "round over" is - what took the progress bars off comments the moment anything else touched - the store. */ - const finishedRound = readFlight(data); // collected, active, or complete? const bumped = (data.currentVersion || 1) !== S.version; if (!bumped && data.html === S.html) { - // Only the conversation moved — fold it in without touching the page. - const latest = new Map(); - for (const version of Object.keys(data.reviews || {}).map(Number).sort((a, b) => a - b)) { - for (const comment of data.reviews?.[version]?.annotations || []) latest.set(comment.id, comment); - } - const merged = mergeThreads([...latest.values()]); - if (finishedRound) roundEnded(); + // Only the comments moved — fold them in without touching the page. + const merged = mergeComments(data.comments || []); if (merged.changed) { render(); if (S.sel) openComposer(S.sel, false); // The reviewer's own reply comes back the same way Claude's does. Only // announce the one the reviewer did not write. if (merged.agentSpoke) toast(T('replied')); + if (merged.closed) toast(T('closedSome')(merged.closed)); } return; } @@ -2159,11 +2100,14 @@

// Mid-edit saves are not news — the comments being worked on already say so. // Only a version that has actually landed is worth interrupting for. if (bumped) { - closeAddressed(data); + /* What Claude closed is news whether or not the reviewer brings the new + page in — the cards say so straight away, and the banner is only about + the picture. */ + if (mergeComments(data.comments || []).changed) render(); const meta = (data.versions || []).find(v => v.n === data.currentVersion); showWork((live() ? T('roundReady')(data.currentVersion) : T('ready')(data.currentVersion)) + (meta?.label ? ' — ' + esc(meta.label) : '')); - } else if (!S.awaiting) showWork(live() ? T('appChanged') : T('changed')); + } else if (!S.ann.some(isWorking)) showWork(live() ? T('appChanged') : T('changed')); } function showWork (html) { $('#workBanner').classList.add('on'); @@ -2180,121 +2124,64 @@

} /* ─────────────── work in flight ─────────────── - A sent comment is out of the reviewer's hands until Claude publishes or - answers. Saying so on the comment itself — and offering to call it off there — - beats a banner that covers the page it is talking about. */ -const setWorking = ids => { S.working = new Set(ids); renderPanel() }; - -/* Sent is not the same as being worked on. A brief sits in the store until - Claude collects it, and a comment added to a round already underway waits in - the next brief — so the workspace can tell the two apart without guessing: - anything in a brief still on disk is queued; everything else that went out - has been collected, and is being worked on. */ -function readFlight (data) { - const brief = data?.pendingReview?.comments; - const active = data?.activeReview; - const wasActive = S.activeRoundId; - if (active) { - S.activeRoundId = active.id; - S.working = new Set(active.comments || []); - S.awaiting = true; - } else if (wasActive) { - S.activeRoundId = null; - S.working.clear(); - } - const next = new Set(brief ? brief.filter(id => !S.collected.has(id)) : []); - // The cards carry this, not just the strip: collecting a brief turns "queued" - // into "being worked on", and repainting only the strip left every card - // saying queued while the strip said Claude was working on them. - const moved = next.size !== S.queued.size || [...next].some(id => !S.queued.has(id)); - S.queued = next; - if (active && !data?.pendingReview) for (const id of S.working) S.collected.add(id); - moved ? renderPanel() : renderWork(); - return !!wasActive && !active; -} -function clearWorking () { - if (!S.working.size) return; - S.working.clear(); - renderPanel(); -} + Where a comment has got to is written on the comment, so this reads it rather + than remembering it: sent and not yet handed over is queued, handed over is + being worked on. A reload, a second tab and the tab that pressed Send all see + the same thing. */ function renderWork () { - // A comment Claude has finished with, or asked about, is no longer in flight. - // Carried comments go out with a round too, so look for them as well — a - // reloaded workspace reads its in-flight list from the brief, which has both. - for (const id of [...S.working]) { - const a = annById(id); - if (!a || a.dismissed || a.status !== 'open') S.working.delete(id); - } - for (const id of [...S.queued]) if (!S.working.has(id)) S.queued.delete(id); - // Held comments are waiting too — just here rather than in a brief on disk. - const n = S.working.size, q = S.queued.size, h = S.held.size; - $('#pwork').hidden = !n; - if (n) $('#pworkText').textContent = - q === n && !h ? (S.watching === false ? T('notPickedUp')(q) : T('queuedOn')(q)) - : q + h ? T('workingAndQueued')(n - q, q + h) - : T('workingOn')(n); - composer.classList.toggle('working', !!S.sel && S.working.has(S.sel)); -} - -/** The round is over — however it ended. Claude publishing, replying or - closing the review all land here, and the button goes back to Send. */ -function roundEnded () { - S.awaiting = false; - clearWorking(); - renderCounts(); - // The queue fires as the round ends — one round out at a time is the deal. - flushHeld(); -} - -/** Everything held back during the round, out as one send. The set is cleared - before the send starts, so a second call is a no-op rather than a second - brief. */ -function flushHeld () { - if (!S.held.size) return; - const ids = [...S.held].filter(id => { - const a = annById(id); - return a && !a.dismissed && a.status !== 'addressed' && hasSubstance(a); - }); - S.held.clear(); - for (const a of S.ann.concat(S.carried)) delete a.held; - if (ids.length) openSend(ids); - else { save(); renderPanel(); } -} - -/** Fold in what arrived from the server without rolling back a local action - that is still inside the autosave window. The longer thread wins; a local - dismissal or explicit reopen also wins until the server has received it. */ -function mergeThreads (serverAnn) { - let changed = false, agentSpoke = false; - for (const sa of serverAnn) { - const local = annById(sa.id); - if (!local) { S.ann.push(normalise(sa)); changed = true; continue } - // Dismissal is a deliberate tombstone. A stale reload may still carry the - // visible server copy, but it must never make the card reappear. - if (local.dismissed) continue; - const sr = (sa.replies || []).length, lr = (local.replies || []).length; - // Claude has said something — open that thread in the list, where the - // answer is going to be typed. A shorter server thread is simply older - // than the reply the reviewer just wrote, so leave the local one alone. - if (sr > lr) { - local.replies = sa.replies || []; + const working = S.ann.filter(isWorking).length; + const queued = S.ann.filter(a => isQueued(a) && isOpen(a)).length; + $('#pwork').hidden = !working && !queued; + if (working || queued) $('#pworkText').textContent = + !working ? (S.watching === false ? T('notPickedUp')(queued) : T('queuedOn')(queued)) + : queued ? T('workingAndQueued')(working, queued) + : T('workingOn')(working); + composer.classList.toggle('working', !!S.sel && isWorking(annById(S.sel) || {})); +} + +/** + * Fold in the server's list without rolling back something typed here a moment + * ago and not yet saved. + * + * The thread is append-only on both sides, so the union of the two copies is + * the whole of it and neither can lose a line by being stale. State is the + * server's alone: this tab never closes a comment and never reopens one, so + * whatever it says goes. + */ +function mergeComments (serverComments) { + let changed = false, agentSpoke = false, closed = 0; + const seen = new Set(); + for (const incoming of serverComments) { + seen.add(incoming.id); + const local = annById(incoming.id); + if (!local) { S.ann.push(normalise(incoming)); changed = true; continue } + const merged = mergeReplies(local.replies, incoming.replies); + if (merged.length !== (local.replies || []).length) { + local.replies = merged; S.threadOpen.add(local.id); changed = true; - if (isAgent((sa.replies || []).at(-1)?.by)) agentSpoke = true; + if (isAgent(merged.at(-1)?.by)) agentSpoke = true; } - const localAhead = lr > sr; - const locallyReopened = local.status === 'open' && !!local.reopenedAt && sa.status === 'addressed'; - if (sa.status !== local.status && !localAhead && !locallyReopened) { - local.status = sa.status; - if (sa.status === 'question') { S.threadOpen.add(local.id); agentSpoke = true } - // A comment that has been addressed again starts clean: whatever was - // asked for on the way here has now been answered. - if (sa.status === 'addressed') { delete local.revert; delete local.reopenedAt } - changed = true; + if (incoming.state !== local.state) { + if (isClosed(incoming)) closed++; + local.state = incoming.state; changed = true; } + // Delivery and sending are the server's to stamp — it is the one that knows. + if (incoming.deliveredAt !== local.deliveredAt) { local.deliveredAt = incoming.deliveredAt; changed = true } + if (incoming.sentAt !== local.sentAt) { local.sentAt = incoming.sentAt; changed = true } } - // A question stalls the round, so it should not wait behind a closed drawer. + // Withdrawn somewhere else — another tab, or this one before a reload. + const gone = S.ann.filter(a => !seen.has(a.id) && sent(a)); + if (gone.length) { S.ann = S.ann.filter(a => seen.has(a.id) || !sent(a)); changed = true } + // A question waits on the reviewer, so it should not sit behind a closed drawer. if (agentSpoke) setPanel(true); - return { changed, agentSpoke }; + return { changed, agentSpoke, closed }; +} + +/** Two copies of one append-only thread, merged into the whole of it. */ +function mergeReplies (mine = [], theirs = []) { + const byKey = new Map(); + for (const reply of [...mine, ...theirs]) byKey.set(`${reply.by}|${reply.at}|${reply.text}`, reply); + return [...byKey.values()].sort((a, b) => Date.parse(a.at || 0) - Date.parse(b.at || 0)); } /** @@ -2306,36 +2193,19 @@

* one left the other putting comments back to Open the moment you looked at the * change they were not part of. */ -function closeAddressed (data) { - const closed = (data.versions || []).find(v => v.n === data.currentVersion)?.addressed || []; - /* A landed version has already dealt with these, but the page you are looking - at is still the old one and their status here is still open. The banner - announces the version; the cards say which comments it was about, and are - the second way to bring it in. Cleared when the new version is adopted. */ - for (const id of closed) S.landed.add(id); - if (closed.length) S.landedVersion = data.currentVersion; - for (const id of closed) { S.working.delete(id); S.queued.delete(id) } - if (!S.working.size) roundEnded(); - /* Always repaint. `roundEnded` only refreshes the counts, and `clearWorking` - returns early when the set is already empty — so a version that finished - everything left the cards exactly as they were: still queued, still open, - still claiming to be worked on, next to a banner saying it was all done. */ - renderPanel(); -} - function adoptUpdate () { const data = S.pendingUpdate; S.pendingUpdate = null; hideWork(); if (!data) { loadFrame(true); return } const bumped = (data.currentVersion || 1) !== S.version; - // Looking at a change is not finishing the work: a mid-round save moves the - // page and nothing else. - if (bumped) { closeAddressed(data); S.landed.clear(); S.landedVersion = null } - S.html = data.html; S.versions = data.versions; S.reviews = data.reviews; + S.html = data.html; S.versions = data.versions; S.comments = data.comments; S.version = data.currentVersion; S.name = data.name || S.name; - if (bumped) { S.viewing = S.version; loadAnnotations(); S.sentSig = null } + /* A version is a picture of the page, not a verdict on the comments: which + of those are done was already said by Claude closing them, and is on the + cards before this banner is touched. */ + mergeComments(data.comments || []); + if (bumped) S.viewing = S.version; closeComposer(); - readFlight(data); // collected, or still sitting in a brief? buildTimeline(); loadFrame(); render(); if (bumped) toast(live() ? T('nowRound')(S.version) : T('nowReviewing')(S.version)); } @@ -3256,7 +3126,7 @@

if (!a.anchor || !fdoc) return { rect: drawn, show: true }; const el = findAnchor(a); if (!el) { - const madeHere = (a.anchorVersion ?? a.fromVersion ?? S.viewing) === S.viewing; + const madeHere = (a.anchorVersion ?? S.viewing) === S.viewing; return madeHere ? { show: false } : { rect: drawn, show: true, loose: true }; } if (!isShown(el)) return { show: false, el }; @@ -3462,11 +3332,10 @@

function removeComment (id) { S.ann = S.ann.filter(a => a.id !== id); - S.held.delete(id); if (S.sel === id) { S.sel = null; composer.classList.remove('on') } save(); render(); } -const annById = id => S.ann.find(a => a.id === id) || S.carried.find(a => a.id === id); +const annById = id => S.ann.find(a => a.id === id); /** * A comment is its words. Never typing any, or clearing the ones that were * there, means there is no comment — dismissing it takes it away. @@ -3475,32 +3344,21 @@

struck out. Words on top of one are welcome and never required. */ const SELF_EVIDENT = new Set(['move', 'strike']); const hasSubstance = a => !!(a.note || '').trim() || SELF_EVIDENT.has(a.kind); -/** Everything the current panel can actually clear. Carried comments are just - as present as current-version comments, despite living in an older file. */ -const activeComments = () => S.ann.concat(S.carried) - .filter(a => !a.dismissed && hasSubstance(a)); +/** Everything the panel can actually clear: what is still queued here. Once + Claude has been handed a comment, asking for it back is a reply on it. */ +const activeComments = () => S.ann.filter(a => hasSubstance(a) && !a.deliveredAt); /** A general comment that has just been made and has nothing in it yet. */ const blank = a => !!a._fresh && a.kind === 'general'; -/* Once a comment has gone to Claude it is a record of what was asked, not a - draft: editing it here would change the words without changing the brief - that already left. Reply to add to it. */ -/* Having gone out is a fact about the comment, not a phase of this tab's - memory. Deriving it from the in-flight set meant that when a round ended — - Claude publishing a version that did not name this comment — every general - comment already handed over turned back into an open text box, inviting an - edit that would never reach the brief that had already left. */ -const sent = a => !!a.sentAt || a.status !== 'open' || - !!(a.replies || []).length || !!a.reopenedAt || - S.working.has(a.id) || S.queued.has(a.id); -/* One sequence over every comment on screen, this version's and the ones - carried in from earlier ones. Which version a comment came from is the - group it sits under, not a different kind of number on its badge. */ +/* Once a comment is sent it is a record of what was asked, not a draft: the + words are what Claude was given, and the server keeps them whatever this tab + saves. Reply to add to it. `sent` is defined with the state helpers above. */ +/* One sequence over every comment on screen. */ let numbers = new Map(); function numberComments () { numbers = new Map(); let n = 0; - for (const a of S.ann.concat(S.carried)) { - if ((!hasSubstance(a) && !blank(a)) || a.dismissed) continue; + for (const a of S.ann) { + if (!hasSubstance(a) && !blank(a)) continue; numbers.set(a.id, ++n); } } @@ -3538,8 +3396,8 @@

composer.querySelector('.ckind').textContent = kindLabel(a); const st = composer.querySelector('.cstatus'); - st.className = 'cstatus' + (a.status === 'open' ? '' : ' ' + a.status); - st.textContent = a.status === 'addressed' ? T('statusAddressed') : a.status === 'question' ? T('statusAsked') : ''; + st.className = 'cstatus' + (isClosed(a) ? ' addressed' : awaitsReply(a) ? ' question' : ''); + st.textContent = isClosed(a) ? T('statusAddressed') : awaitsReply(a) ? T('statusAsked') : ''; // Say what this is attached to, so "it did not know what I meant" is answered // while the note is being written rather than after the next round. @@ -3576,17 +3434,17 @@

`).join(''); const reply = composer.querySelector('.creply'); - const canReply = !isHistory() && (replies.length > 0 || a.status === 'question'); + const canReply = !isHistory() && (replies.length > 0 || awaitsReply(a)); reply.classList.toggle('on', canReply); reply.value = ''; - reply.placeholder = T(a.status === 'question' ? 'answerPlaceholder' : 'replyPlaceholder'); + reply.placeholder = T(awaitsReply(a) ? 'answerPlaceholder' : 'replyPlaceholder'); // Nothing written yet means dismissing already throws it away — a second // button for the same outcome is just noise. composer.querySelector('.cdel').style.display = hasSubstance(a) && !isHistory() ? '' : 'none'; composer.querySelector('.cdel').title = T('del'); composer.querySelector('.csave').style.display = isHistory() ? 'none' : ''; - composer.classList.toggle('working', S.working.has(id)); + composer.classList.toggle('working', isWorking(a)); placeComposer(); if (focus !== false) setTimeout(() => (canReply && a.note ? reply : note).focus(), 0); drawMarks(); renderPanel(); @@ -3600,7 +3458,7 @@

// Both of these write, so both work on this version's copy — an edit to a // comment carried in from an earlier version is saved nowhere otherwise. if (reply) a = postReply(a, reply); - if (note !== (a.note || '')) { a = adopt(a); a.note = note; save() } + if (!sent(a) && note !== (a.note || '')) { a.note = note; save() } // No words and no thread is not feedback — clearing a comment removes it, // which is also how you take one back. if (!hasSubstance(a)) S.ann = S.ann.filter(x => x.id !== a.id); @@ -3615,100 +3473,63 @@

is no separate button for it, because a reply nobody reads is worse than no button at all. */ function postReply (a, text) { - /* Onto this version's copy, always. Answering is the one thing a carried - comment invites — it is on the list because Claude asked something — and a - reply written onto the ghost was saved nowhere, since `save()` posts only - `S.ann`. The answer was on screen until the next reload took it away, and - the question came back unanswered with nobody able to tell it had been. */ - const live = adopt(a); - live.replies = (live.replies || []).concat({ by: 'reviewer', text, at: new Date().toISOString() }); - if (live.status === 'question') live.status = 'open'; - else if (live.status === 'addressed') { live.status = 'open'; live.reopenedAt = new Date().toISOString() } - // A reply is new review input regardless of which reply surface wrote it. - // Reset this here so both the canvas composer and panel thread enable Send. - S.sentSig = null; + a.replies = (a.replies || []).concat({ by: 'reviewer', text, at: new Date().toISOString() }); + /* Answering something Claude called done says it is not done. The server + turns that into reopening it — the one place the rule lives — and this tab + hears the state back on the next refresh. */ save(); - return live; -} - -/** - * A comment from an earlier version becomes this version's business the moment - * you act on it — copy it in, because `save()` only ever writes the round you - * are in, and a change made to a ghost would vanish with the next reload. - */ -function adopt (a) { - const live = S.ann.find(x => x.id === a.id); - if (live) return live; - const copy = { ...a }; - delete copy.fromVersion; - S.ann.push(copy); - S.carried = S.carried.filter(x => x.id !== a.id); - return copy; + return a; } /** - * The × on a card, and the one way anything leaves this list. A comment you - * wrote and have not handed over is simply taken back; one that has entered a - * conversation, been addressed, or came from an earlier round is kept on file - * and hidden — the record of what was asked outlives the list it was asked in. + * The × on a card. A comment still waiting here is simply taken back. One + * Claude already holds is not: it may already have been acted on, so asking for + * it back is a reply saying so, and Claude closes it when the undoing is done. */ -function takeOff (a) { +async function takeOff (a) { if (isHistory()) return; - // Only a draft that has never left this tab can disappear outright. Once it - // has words it has been autosaved, and once Claude has replied, asked, or - // addressed it there is a thread — either way keep a dismissed record, so - // neither the server nor a slightly older snapshot brings it back. - if (!a.fromVersion && !sent(a) && !hasSubstance(a)) { removeComment(a.id); return } - const live = adopt(a); - live.dismissed = true; - delete live.reopenedAt; delete live.revert; - S.threadOpen.delete(live.id); - replyDrafts.delete(live.id); - if (S.sel === live.id) closeComposer(); - S.sentSig = null; - save(); - render(); + if (!sent(a)) { removeComment(a.id); return } + if (a.deliveredAt) { + S.threadOpen.add(a.id); + S.focusReply = a.id; + render(); + toast(T('withdrawByReply')); + return; + } + S.threadOpen.delete(a.id); + replyDrafts.delete(a.id); + if (S.sel === a.id) closeComposer(); + try { + await fetch(API + '/comments/dismiss', { + method: 'POST', headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id: a.id }), + }); + } catch {} + removeComment(a.id); toast(T('dismissed')); } /** Take back the reply you just wrote, while Claude has yet to see it. */ function undoReply (a, i) { if (isHistory()) return; - const live = adopt(a); - const reps = live.replies || []; + const reps = a.replies || []; if (i !== reps.length - 1 || reps[i]?.by !== 'reviewer') return; reps.splice(i, 1); - // Unsaying the answer puts the question back — it is unanswered again. - if (isAgent(reps.at(-1)?.by)) live.status = 'question'; - S.sentSig = null; save(); render(); } /** - * Addressed is Claude's word for it, not the last word. Reopening a comment puts - * it back in play for the next round: refine adds to what was asked, revert asks - * for the change to be undone. `reopenedAt` is what lets the server take a - * status going backwards from a client — nothing else can un-address a comment. + * Closed is Claude's word for it, not the last word. Both ways back in are the + * same act — saying something on the comment — so both write into the thread + * and let the server reopen it: revert writes the line for you, refine leaves + * the cursor where your own words go. */ function reopen (a, mode) { if (isHistory()) return; - a = adopt(a); - a.status = 'open'; - a.reopenedAt = new Date().toISOString(); - if (mode === 'revert') { - a.revert = true; - postReply(a, T('revertNote')); - } else { - delete a.revert; - save(); - } - /* Both of these are things to say, so both are said in the thread: revert has - already written its line, refine leaves the cursor where yours goes. The - thread opens either way, so the ask is visible where the answer will be. */ + if (mode === 'revert') postReply(a, T('revertNote')); S.threadOpen.add(a.id); S.focusReply = a.id; - S.sentSig = null; render(); toast(T(mode === 'revert' ? 'revertAsked' : 'refineAsked')); } @@ -3760,11 +3581,10 @@

/** The one line the list shows about a comment's conversation — and the way in. */ function threadNote (a, open) { const n = (a.replies || []).length; - const asked = a.status === 'question' || (a.revert && a.status !== 'addressed'); + const asked = awaitsReply(a); // Nothing here says "addressed" — the green rule along the foot of the card // says it already, and saying it twice on one card is once too many. - const txt = a.revert && a.status !== 'addressed' ? T('wantsRevert') - : a.status === 'question' ? T('claudeAsked') + const txt = awaitsReply(a) ? T('claudeAsked') : n ? `${n} ${T(n > 1 ? 'replies' : 'reply')}` : T('addReply'); if (isHistory()) return `
${esc(txt)}
`; @@ -3788,7 +3608,7 @@

return `
${msgs}
+ placeholder="${esc(T(awaitsReply(a) ? 'answerPlaceholder' : 'replyPlaceholder'))}"> ` : ''} - ${S.landed.has(a.id) ? `` : ''} ${done && !isHistory() ? `` : ''} ${isHistory() ? '' : `
+ + +
@@ -685,14 +692,34 @@ } /* ── a toast: the page saying "done" without stopping anyone ── */ + /* Long enough for the opacity transition in shell.css to finish before the + toast leaves the top layer, so it fades rather than vanishing. */ + const TOAST_FADE_MS = 300; let toastTimer = null; function toast (msg, ms = 2200) { let el = document.querySelector('.vs-toast'); - if (!el) { el = document.createElement('div'); el.className = 'vs-toast'; document.body.appendChild(el) } + if (!el) { + el = document.createElement('div'); + el.className = 'vs-toast'; + /* A modal dialog paints in the top layer, above every z-index there is, + and its backdrop blurs what lies under it. A toast raised while one is + open has to join the top layer or it is unreadable behind the very + dialog whose failure it is reporting. */ + el.popover = 'manual'; + document.body.appendChild(el); + } el.textContent = msg; + /* Promoted on each toast rather than left open, because the top layer + stacks in the order things entered it: one promoted before a dialog + would sit under it. Older browsers have no popover and lose nothing but + the stacking. */ + try { el.showPopover() } catch {} el.classList.add('on'); clearTimeout(toastTimer); - toastTimer = setTimeout(() => el.classList.remove('on'), ms); + toastTimer = setTimeout(() => { + el.classList.remove('on'); + toastTimer = setTimeout(() => { try { el.hidePopover() } catch {} }, TOAST_FADE_MS); + }, ms); } /* ── two-step confirm on one button ── @@ -800,6 +827,9 @@ const btn = $('#settingsBtn'), menu = $('#settingsMenu'); if (!btn || !menu) return; const open = on => { menu.hidden = !on; btn.setAttribute('aria-expanded', String(on)) }; + // A control in the cog's slot can act on the page behind it, so the page + // needs a way to put the menu away first. + closeSettings = () => open(false); btn.addEventListener('click', e => { e.stopPropagation(); open(menu.hidden) }); menu.addEventListener('click', e => e.stopPropagation()); document.addEventListener('click', () => open(false)); @@ -833,9 +863,12 @@ return api; } + let closeSettings = () => {}; + const api = { init, setTheme, setLang, setLink, setWatching, setServerVersion, hideLink, name, wip, connect, toast, armConfirm, esc, + closeSettings: () => closeSettings(), get theme () { return theme }, get lang () { return lang }, onLang (fn) { langListeners.push(fn) }, diff --git a/plugins/vstack/experimental/spec/assets/spec-tree.html b/plugins/vstack/experimental/spec/assets/spec-tree.html index d2d0092..a0fb16c 100644 --- a/plugins/vstack/experimental/spec/assets/spec-tree.html +++ b/plugins/vstack/experimental/spec/assets/spec-tree.html @@ -237,8 +237,10 @@ .banner.good .tick{color:var(--ok);font-weight:700} /* the toast — VSShell.toast(); one element, appended on first use */ -.vs-toast{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; - background:var(--ink);color:var(--surface);padding:8px 14px;border-radius:8px; +/* It is a popover, so the browser's own [popover] rules apply first: inset, + margin and border are theirs to set and ours to put back. */ +.vs-toast{position:fixed;inset:auto;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; + background:var(--ink);color:var(--surface);border:0;margin:0;padding:8px 14px;border-radius:8px; font-size:12.5px;box-shadow:var(--shadow-pop);opacity:0;pointer-events:none;transition:opacity .25s} .vs-toast.on{opacity:1} @@ -565,6 +567,11 @@ + + +
@@ -914,14 +921,34 @@

} /* ── a toast: the page saying "done" without stopping anyone ── */ + /* Long enough for the opacity transition in shell.css to finish before the + toast leaves the top layer, so it fades rather than vanishing. */ + const TOAST_FADE_MS = 300; let toastTimer = null; function toast (msg, ms = 2200) { let el = document.querySelector('.vs-toast'); - if (!el) { el = document.createElement('div'); el.className = 'vs-toast'; document.body.appendChild(el) } + if (!el) { + el = document.createElement('div'); + el.className = 'vs-toast'; + /* A modal dialog paints in the top layer, above every z-index there is, + and its backdrop blurs what lies under it. A toast raised while one is + open has to join the top layer or it is unreadable behind the very + dialog whose failure it is reporting. */ + el.popover = 'manual'; + document.body.appendChild(el); + } el.textContent = msg; + /* Promoted on each toast rather than left open, because the top layer + stacks in the order things entered it: one promoted before a dialog + would sit under it. Older browsers have no popover and lose nothing but + the stacking. */ + try { el.showPopover() } catch {} el.classList.add('on'); clearTimeout(toastTimer); - toastTimer = setTimeout(() => el.classList.remove('on'), ms); + toastTimer = setTimeout(() => { + el.classList.remove('on'); + toastTimer = setTimeout(() => { try { el.hidePopover() } catch {} }, TOAST_FADE_MS); + }, ms); } /* ── two-step confirm on one button ── @@ -1029,6 +1056,9 @@

const btn = $('#settingsBtn'), menu = $('#settingsMenu'); if (!btn || !menu) return; const open = on => { menu.hidden = !on; btn.setAttribute('aria-expanded', String(on)) }; + // A control in the cog's slot can act on the page behind it, so the page + // needs a way to put the menu away first. + closeSettings = () => open(false); btn.addEventListener('click', e => { e.stopPropagation(); open(menu.hidden) }); menu.addEventListener('click', e => e.stopPropagation()); document.addEventListener('click', () => open(false)); @@ -1062,9 +1092,12 @@

return api; } + let closeSettings = () => {}; + const api = { init, setTheme, setLang, setLink, setWatching, setServerVersion, hideLink, name, wip, connect, toast, armConfirm, esc, + closeSettings: () => closeSettings(), get theme () { return theme }, get lang () { return lang }, onLang (fn) { langListeners.push(fn) }, diff --git a/plugins/vstack/experimental/start/assets/chooser.html b/plugins/vstack/experimental/start/assets/chooser.html index c64c6da..ec15484 100644 --- a/plugins/vstack/experimental/start/assets/chooser.html +++ b/plugins/vstack/experimental/start/assets/chooser.html @@ -226,8 +226,10 @@ .banner.good .tick{color:var(--ok);font-weight:700} /* the toast — VSShell.toast(); one element, appended on first use */ -.vs-toast{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; - background:var(--ink);color:var(--surface);padding:8px 14px;border-radius:8px; +/* It is a popover, so the browser's own [popover] rules apply first: inset, + margin and border are theirs to set and ours to put back. */ +.vs-toast{position:fixed;inset:auto;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; + background:var(--ink);color:var(--surface);border:0;margin:0;padding:8px 14px;border-radius:8px; font-size:12.5px;box-shadow:var(--shadow-pop);opacity:0;pointer-events:none;transition:opacity .25s} .vs-toast.on{opacity:1} @@ -490,6 +492,11 @@ + + +
@@ -782,14 +789,34 @@

} /* ── a toast: the page saying "done" without stopping anyone ── */ + /* Long enough for the opacity transition in shell.css to finish before the + toast leaves the top layer, so it fades rather than vanishing. */ + const TOAST_FADE_MS = 300; let toastTimer = null; function toast (msg, ms = 2200) { let el = document.querySelector('.vs-toast'); - if (!el) { el = document.createElement('div'); el.className = 'vs-toast'; document.body.appendChild(el) } + if (!el) { + el = document.createElement('div'); + el.className = 'vs-toast'; + /* A modal dialog paints in the top layer, above every z-index there is, + and its backdrop blurs what lies under it. A toast raised while one is + open has to join the top layer or it is unreadable behind the very + dialog whose failure it is reporting. */ + el.popover = 'manual'; + document.body.appendChild(el); + } el.textContent = msg; + /* Promoted on each toast rather than left open, because the top layer + stacks in the order things entered it: one promoted before a dialog + would sit under it. Older browsers have no popover and lose nothing but + the stacking. */ + try { el.showPopover() } catch {} el.classList.add('on'); clearTimeout(toastTimer); - toastTimer = setTimeout(() => el.classList.remove('on'), ms); + toastTimer = setTimeout(() => { + el.classList.remove('on'); + toastTimer = setTimeout(() => { try { el.hidePopover() } catch {} }, TOAST_FADE_MS); + }, ms); } /* ── two-step confirm on one button ── @@ -897,6 +924,9 @@

const btn = $('#settingsBtn'), menu = $('#settingsMenu'); if (!btn || !menu) return; const open = on => { menu.hidden = !on; btn.setAttribute('aria-expanded', String(on)) }; + // A control in the cog's slot can act on the page behind it, so the page + // needs a way to put the menu away first. + closeSettings = () => open(false); btn.addEventListener('click', e => { e.stopPropagation(); open(menu.hidden) }); menu.addEventListener('click', e => e.stopPropagation()); document.addEventListener('click', () => open(false)); @@ -930,9 +960,12 @@

return api; } + let closeSettings = () => {}; + const api = { init, setTheme, setLang, setLink, setWatching, setServerVersion, hideLink, name, wip, connect, toast, armConfirm, esc, + closeSettings: () => closeSettings(), get theme () { return theme }, get lang () { return lang }, onLang (fn) { langListeners.push(fn) }, diff --git a/plugins/vstack/hooks/hooks.json b/plugins/vstack/hooks/hooks.json new file mode 100644 index 0000000..fe6c5b5 --- /dev/null +++ b/plugins/vstack/hooks/hooks.json @@ -0,0 +1,16 @@ +{ + "description": "Hold a turn open while a review round is still unanswered.", + "hooks": { + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/round-gate.mjs\"", + "timeout": 10 + } + ] + } + ] + } +} diff --git a/plugins/vstack/hooks/round-gate.mjs b/plugins/vstack/hooks/round-gate.mjs new file mode 100644 index 0000000..24da024 --- /dev/null +++ b/plugins/vstack/hooks/round-gate.mjs @@ -0,0 +1,41 @@ +#!/usr/bin/env node +/* + * round-gate.mjs — the Stop hook that keeps a review round from ending halfway. + * + * Claude Code is the one Host that can gate the end of a turn, so this sits + * outside the engine with the rest of the host-specific wiring. It decides + * nothing itself: `review-server.mjs check` owns what an unfinished round is, + * and this turns its answer into the block Claude Code understands. + */ + +import { spawnSync } from 'node:child_process' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const HERE = path.dirname(fileURLToPath(import.meta.url)) +const SERVER = path.join(HERE, '..', 'skills', 'review', 'assets', 'review-server.mjs') + +const chunks = [] +for await (const chunk of process.stdin) chunks.push(chunk) +let input = {} +try { input = JSON.parse(Buffer.concat(chunks).toString('utf8') || '{}') } catch {} + +/* One block per turn. The gate names what is missing once; a session that means + to stop with a round open — because the reviewer asked it to — must still be + able to. Nothing is lost either way: an unanswered comment stays open and + comes back on the next delivery. */ +if (input.stop_hook_active) process.exit(0) + +const check = spawnSync(process.execPath, [SERVER, 'check', '--all'], { + cwd: input.cwd || process.cwd(), encoding: 'utf8', timeout: 5000, +}) + +/* Exit 1 with something to say is the only answer that blocks. A check that + could not run knows nothing about the round, and a hook that turned a broken + check into a stuck turn would be the worse failure by far. */ +if (check.status !== 1 || !check.stdout?.trim()) process.exit(0) + +console.log(JSON.stringify({ + decision: 'block', + reason: `A review round is open and you have not handed it back.\n\n${check.stdout.trim()}`, +})) diff --git a/plugins/vstack/lib/shell/shell.css b/plugins/vstack/lib/shell/shell.css index 9aa50f4..44107e0 100644 --- a/plugins/vstack/lib/shell/shell.css +++ b/plugins/vstack/lib/shell/shell.css @@ -153,8 +153,10 @@ .banner.good .tick{color:var(--ok);font-weight:700} /* the toast — VSShell.toast(); one element, appended on first use */ -.vs-toast{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; - background:var(--ink);color:var(--surface);padding:8px 14px;border-radius:8px; +/* It is a popover, so the browser's own [popover] rules apply first: inset, + margin and border are theirs to set and ours to put back. */ +.vs-toast{position:fixed;inset:auto;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; + background:var(--ink);color:var(--surface);border:0;margin:0;padding:8px 14px;border-radius:8px; font-size:12.5px;box-shadow:var(--shadow-pop);opacity:0;pointer-events:none;transition:opacity .25s} .vs-toast.on{opacity:1} diff --git a/plugins/vstack/lib/shell/shell.js b/plugins/vstack/lib/shell/shell.js index 1d46b94..cc1ac10 100644 --- a/plugins/vstack/lib/shell/shell.js +++ b/plugins/vstack/lib/shell/shell.js @@ -160,14 +160,34 @@ window.VSShell = (function () { } /* ── a toast: the page saying "done" without stopping anyone ── */ + /* Long enough for the opacity transition in shell.css to finish before the + toast leaves the top layer, so it fades rather than vanishing. */ + const TOAST_FADE_MS = 300; let toastTimer = null; function toast (msg, ms = 2200) { let el = document.querySelector('.vs-toast'); - if (!el) { el = document.createElement('div'); el.className = 'vs-toast'; document.body.appendChild(el) } + if (!el) { + el = document.createElement('div'); + el.className = 'vs-toast'; + /* A modal dialog paints in the top layer, above every z-index there is, + and its backdrop blurs what lies under it. A toast raised while one is + open has to join the top layer or it is unreadable behind the very + dialog whose failure it is reporting. */ + el.popover = 'manual'; + document.body.appendChild(el); + } el.textContent = msg; + /* Promoted on each toast rather than left open, because the top layer + stacks in the order things entered it: one promoted before a dialog + would sit under it. Older browsers have no popover and lose nothing but + the stacking. */ + try { el.showPopover() } catch {} el.classList.add('on'); clearTimeout(toastTimer); - toastTimer = setTimeout(() => el.classList.remove('on'), ms); + toastTimer = setTimeout(() => { + el.classList.remove('on'); + toastTimer = setTimeout(() => { try { el.hidePopover() } catch {} }, TOAST_FADE_MS); + }, ms); } /* ── two-step confirm on one button ── @@ -275,6 +295,9 @@ window.VSShell = (function () { const btn = $('#settingsBtn'), menu = $('#settingsMenu'); if (!btn || !menu) return; const open = on => { menu.hidden = !on; btn.setAttribute('aria-expanded', String(on)) }; + // A control in the cog's slot can act on the page behind it, so the page + // needs a way to put the menu away first. + closeSettings = () => open(false); btn.addEventListener('click', e => { e.stopPropagation(); open(menu.hidden) }); menu.addEventListener('click', e => e.stopPropagation()); document.addEventListener('click', () => open(false)); @@ -308,9 +331,12 @@ window.VSShell = (function () { return api; } + let closeSettings = () => {}; + const api = { init, setTheme, setLang, setLink, setWatching, setServerVersion, hideLink, name, wip, connect, toast, armConfirm, esc, + closeSettings: () => closeSettings(), get theme () { return theme }, get lang () { return lang }, onLang (fn) { langListeners.push(fn) }, diff --git a/plugins/vstack/lib/shell/topbar.html b/plugins/vstack/lib/shell/topbar.html index ce1bde4..455fbdf 100644 --- a/plugins/vstack/lib/shell/topbar.html +++ b/plugins/vstack/lib/shell/topbar.html @@ -68,6 +68,11 @@ + + +
diff --git a/plugins/vstack/skills/review/SKILL.md b/plugins/vstack/skills/review/SKILL.md index 0aa6616..659ab81 100644 --- a/plugins/vstack/skills/review/SKILL.md +++ b/plugins/vstack/skills/review/SKILL.md @@ -143,6 +143,7 @@ The page opens in **its own browser window** on the canvas — own viewport, own | **Link status** | a dot beside Send — linked to your session, or link lost. Nothing is said until the connection has actually answered | | **Send to {agent}** (⌘⏎) | sends straight through — no preview step — and wakes you up. Label uses the Host profile name. Greys out until something actually changes | | **In flight** | every comment you were sent keeps an indeterminate progress bar until you publish or reply. No banner covers the page any more — the progress is on the comments it belongs to | +| **Stalled** | after a minute with nothing listening, the strip stops claiming progress and says you have stalled. **Send again** puts those comments back in the queue, and the next session to pick up is handed them. Refused while your watcher is alive, because then you still have them | | **Addressed** | comments you closed stay in the list in their own section, each offering **Revert** or **Refine** | | **Publish a link to this wireframe** (the ▾ beside Send) | only when Host `capabilities.share` is `artifact`. Asks you to publish **the wireframe** (Host op `share`) and hand the URL back. Hidden on hosts without public share, and in a live review | | **Approve & finish** (the ▾ beside Send) | sign-off. Ends the review, closes the server, and tells you the design is settled — behind a confirm that warns how many comments are being left unapplied | @@ -235,7 +236,15 @@ On a delivery: ``` Anything you do not name stays open and comes back. Publish tells you what it left open — close those or reply asking about them, because the delivery will not raise them again on its own. -6. Leave **`watch_stream` running** and say what changed in a few lines. Then wait — don't ask "shall I +6. **Check you left nothing hanging**, before you finish your turn: + ```bash + node "$SKILL/assets/review-server.mjs" check --all + ``` + It exits 1 and names every comment you were handed and then said nothing about — neither closed + nor replied to. Those are the ones nothing will remind you of again, because the next delivery + only comes when the reviewer writes. On Claude Code a Stop hook runs this for you and holds your + turn open until it is clean. +7. Leave **`watch_stream` running** and say what changed in a few lines. Then wait — don't ask "shall I continue?", the loop is the point. (Only re-arm if you used one-shot `watch` without `--stream`.) **Closing the browser tab closes the review.** The workspace holds an SSE diff --git a/plugins/vstack/skills/review/assets/review-server.mjs b/plugins/vstack/skills/review/assets/review-server.mjs index 2e845a6..fd6d658 100644 --- a/plugins/vstack/skills/review/assets/review-server.mjs +++ b/plugins/vstack/skills/review/assets/review-server.mjs @@ -135,7 +135,7 @@ if (LIVE) { console.error(' are rewritten to stay inside the proxy, but bot protection, a login wall or a') console.error(' strict CSRF check can still refuse it. If the site misbehaves, say so.') } -} else if (['watch', 'ack'].includes(args._) && (args.all === true || args.all === 'true')) { +} else if (['watch', 'ack', 'check'].includes(args._) && (args.all === true || args.all === 'true')) { /* `watch --all` names no subject on purpose — it finds the live ones itself, so a session with several pages open arms one waiter instead of one each. */ DIR = process.cwd(); NAME = 'all'; STORE = workDir(DIR, TOOL.review) @@ -510,7 +510,11 @@ function listVersions () { function cmdPublish (quiet) { const ids = [...new Set(String(args.close ?? args.addressed ?? '').split(',').map(s => s.trim()).filter(Boolean))] const label = args.label && args.label !== true ? String(args.label) : null - const snapshot = !!label || (!ids.length && args.close === undefined && args.addressed === undefined) + /* A version is a frozen copy of the page under review, and a running app has + no such thing: what a capture of one produces is a likeness with its scripts + stripped and half its styling missing, which is worse than not offering it. + So a live review has no versions — only comments. */ + const snapshot = !LIVE && (!!label || (!ids.length && args.close === undefined && args.addressed === undefined)) const comments = loadComments() if (ids.length) { @@ -541,6 +545,13 @@ function cmdPublish (quiet) { } let n = loadState().version + if (LIVE && !n) { + // Live has one version and it is the app itself, so the number never moves. + const state = loadState() + state.version = n = 1 + state.name = pageName() + saveState(state) + } if (snapshot) { const replace = args.replace === true || args.replace === 'true' n = replace ? Math.max(1, n) : n + 1 @@ -575,6 +586,38 @@ function cmdPublish (quiet) { touch() } +/** + * Start the review over. Everything a version of this tool wrote about it goes: + * the comments, the brief, the snapshots, and the directories a store filled by + * an older version keeps its comments in — which would otherwise be adopted + * straight back on the next read. What the review *is* stays: the page or app + * under it, and its name. + * + * It is a command as well as a button because the reason to want it is a tool + * update that changed what a review keeps on disk, and that is exactly when the + * workspace may not be the thing that can ask for it. + */ +function cmdReset (quiet) { + saveComments([]) + fs.rmSync(P.brief(), { force: true }) + fs.rmSync(path.join(STORE, 'reviews'), { recursive: true, force: true }) + fs.rmSync(P.versions(), { recursive: true, force: true }) + fs.rmSync(P.approved(), { force: true }) + fs.rmSync(P.share(), { force: true }) + const state = loadState() + saveState({ + name: state.name, version: 0, + ...(state.file ? { file: state.file } : {}), + ...(state.app ? { app: state.app, start: state.start } : {}), + }) + // A file review with no version has nothing for the workspace to show, so the + // page as it stands becomes v1 again. A live review has no versions at all. + cmdPublish(true) + console.log('\n⟲ Reset — the review starts again at v1') + touch() + if (!quiet) console.log('Every comment and version for this review is gone.') +} + /** * Answer a comment in its own thread. Use it when a comment is ambiguous — * asking beats guessing, and the reviewer sees the question on the mark itself. @@ -1011,6 +1054,56 @@ function cmdStatus () { }, null, 2)) } +/* ───────────────────────────── check ────────────────────────────── */ + +/** + * A comment the agent was handed and has said nothing about since. + * + * A delivered comment is answered by closing it or by replying to it. One that + * has neither is a round that stopped halfway, and nothing else in the protocol + * notices: the next tick only fires when the reviewer writes again, so an + * unanswered comment sits there for as long as they stay quiet. + * + * Any reply after delivery clears it. A reviewer's reply is not the agent going + * quiet — that comment is already waiting for the next tick to hand it back. + */ +const unanswered = comment => comment.state === 'open' && comment.deliveredAt && + !(comment.replies || []).some(reply => Date.parse(reply.at || '') > Date.parse(comment.deliveredAt)) + +const oneLine = note => { + const text = String(note || '').replace(/\s+/g, ' ').trim() + return text.length > 72 ? text.slice(0, 71) + '…' : text +} + +/** + * What the agent still owes, said as the commands that settle it. Exits 1 when + * a round is unfinished, so a Host that can gate the end of a turn holds the + * session open until the round is handed back. + * + * `--all` reads every review with a server behind it, which is also the test + * for whether a round is in flight at all: a review whose tab has gone is over, + * and there is nothing left to owe. + */ +function cmdCheck () { + const stores = args.all === true || args.all === 'true' ? liveStores() : [STORE] + const bin = process.argv[1] + let owing = 0 + for (const store of stores) { + const subject = subjectOf(store) + const owed = loadComments(subject).filter(unanswered) + if (!owed.length) continue + owing += owed.length + const them = owed.length > 1 ? 'them' : 'it' + console.log(`Review "${subject.name}" — you took delivery of ${owed.length} comment${owed.length > 1 ? 's' : ''} and have not answered ${them}:`) + for (const comment of owed) console.log(` ${comment.id} ${oneLine(comment.note)}`) + console.log(`\nDo what each one asks and close it, or reply to ask what ${them} means:`) + console.log(` node "${bin}" publish ${subject.flags} --close ${owed.map(comment => comment.id).join(',')} --label "what changed"`) + console.log(` node "${bin}" reply ${subject.flags} --comment ${owed[0].id} --text "your question"`) + } + if (!owing) console.log('Nothing outstanding — every comment you were handed is closed or answered.') + process.exit(owing ? 1 : 0) +} + /* ───────────────────────────── serve ────────────────────────────── */ const clients = new Set() @@ -1386,26 +1479,6 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr * no file to freeze, so the workspace hands one up: it is what the timeline * scrubs back to, and what gets published when they ask for a shareable link. */ - if (p === '/api/snapshot' && req.method === 'POST') { - // File reviews freeze the file themselves; accepting a body here would let - // a stray POST overwrite a published version. - if (!LIVE) return sendJSON(res, 404, { error: 'not a live review' }) - const body = JSON.parse(await readBody(req) || '{}') - const n = Number(body.version) || loadState().version - if (!body.html) return sendJSON(res, 400, { error: 'no html' }) - return withStoreLock(() => { - fs.mkdirSync(P.versions(), { recursive: true }) - fs.writeFileSync(P.version(n), String(body.html)) - const meta = readJSON(path.join(P.versions(), `v${n}.meta.json`), { n }) || { n } - writeJSON(path.join(P.versions(), `v${n}.meta.json`), { - ...meta, n, capturedAt: new Date().toISOString(), route: body.route || '/', - }) - return sendJSON(res, 200, { ok: true }) - }) - } - /* Everything the workspace writes: a comment being drafted, a comment the - reviewer has just let go of, and an answer typed into a thread. The rules - about which of those may change what are in acceptFromReviewer. */ if (p === '/api/comments' && req.method === 'POST') { const body = JSON.parse(await readBody(req) || '{}') return withStoreLock(() => { @@ -1436,6 +1509,41 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr return sendJSON(res, 200, { ok: true }) }) } + /* Give a stranded round back to the queue. + A delivered comment is not `unseen`, so a watcher armed after the session + behind it died blocks and hands over nothing: the round sits where no agent + can reach it and no tick will raise it. Clearing `deliveredAt` puts those + comments back where the state table says a sent, undelivered comment + belongs, and the next tick takes them. + Refused while a heartbeat says someone is listening, because then the round + is not stranded — an agent holds it, and pulling it out from under one is + the same race the dismiss endpoint refuses. */ + if (p === '/api/comments/requeue' && req.method === 'POST') { + return withStoreLock(() => { + if (agentListening()) { + return sendJSON(res, 409, { + error: 'The agent is listening — it still has these. Reply on one to ask for it back.', + }) + } + const comments = loadComments() + const stranded = comments.filter(comment => comment.state === 'open' && comment.deliveredAt) + for (const comment of stranded) comment.deliveredAt = null + saveComments(comments) + touch() + return sendJSON(res, 200, { ok: true, requeued: stranded.map(comment => comment.id) }) + }) + } + /* Start the review over. Everything a version of this tool wrote about this + review goes — the comments, the brief, the snapshots, and the directories a + store filled by an older version keeps its comments in, which would + otherwise be adopted straight back on the next read. What the review *is* + stays: the page or app under it, and its name. */ + if (p === '/api/reset' && req.method === 'POST') { + return withStoreLock(() => { + cmdReset(true) + return sendJSON(res, 200, { ok: true }) + }) + } if (p === '/api/history/clear' && req.method === 'POST') { return withStoreLock(() => { clearHistory() @@ -1659,9 +1767,11 @@ switch (args._) { case 'ack': withStoreLock(cmdAck); break case 'share': withStoreLock(cmdShare); break case 'status': cmdStatus(); break + case 'check': cmdCheck(); break + case 'reset': withStoreLock(cmdReset); break case 'watch': cmdWatch(); break case 'serve': cmdServe(); break default: - console.error(`Unknown command "${args._}". Use: serve | watch | publish | reply | ack | share | status`) + console.error(`Unknown command "${args._}". Use: serve | watch | publish | reply | ack | share | status | check | reset`) process.exit(1) } diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index b072f53..9279851 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -316,8 +316,10 @@ .banner.good .tick{color:var(--ok);font-weight:700} /* the toast — VSShell.toast(); one element, appended on first use */ -.vs-toast{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; - background:var(--ink);color:var(--surface);padding:8px 14px;border-radius:8px; +/* It is a popover, so the browser's own [popover] rules apply first: inset, + margin and border are theirs to set and ours to put back. */ +.vs-toast{position:fixed;inset:auto;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; + background:var(--ink);color:var(--surface);border:0;margin:0;padding:8px 14px;border-radius:8px; font-size:12.5px;box-shadow:var(--shadow-pop);opacity:0;pointer-events:none;transition:opacity .25s} .vs-toast.on{opacity:1} @@ -662,6 +664,14 @@ #pwork .spin{width:12px;height:12px;border-radius:50%;border:2px solid var(--brand-line); border-top-color:var(--brand);animation:spin .7s linear infinite;flex:none} #pwork .ptxt{flex:1;min-width:0;font-size:11.5px;color:var(--ink-2);line-height:1.35} +/* Stalled is the absence of progress, so the strip stops claiming any: the + spinner goes, and the brand tint that says "in hand" goes with it. */ +#pwork.stalled{background:var(--surface-2)} +#pwork.stalled .spin{display:none} +#pwork .again{font-size:11.5px;color:var(--ink-3);text-decoration:underline;white-space:nowrap;flex:none} +#pwork .again:hover:not(:disabled){color:var(--brand)} +#pwork .again:disabled{opacity:.35;cursor:default;text-decoration:none} +#pwork .again[hidden]{display:none} @keyframes spin{to{transform:rotate(360deg)}} @keyframes sweep{0%{left:-38%}55%{left:100%}100%{left:100%}} #pfoot{border-top:1px solid var(--line);padding:9px 10px;display:flex;gap:7px;align-items:center} @@ -898,6 +908,9 @@ border:1px solid var(--line);color:var(--ink-2)} .confirmDialog .modalactions{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px; border-top:1px solid var(--line);background:var(--surface-2)} +/* Ours, in the slot the shell offers inside its settings menu. */ +.cogmenu .row.reset{display:block} +.cogmenu .row.reset .btn{width:100%;justify-content:center} .confirmDialog .danger{background:var(--brand);border-color:var(--brand);color:#fff} .confirmDialog .danger:hover{filter:brightness(1.08)} .confirmDialog .danger:disabled{opacity:.45;filter:none} @@ -1001,6 +1014,14 @@ + + +
+ +
+
@@ -1146,6 +1167,7 @@
@@ -1156,6 +1178,17 @@
+ +
+

+

+

+
+
+ + +
+

@@ -1354,14 +1387,34 @@

} /* ── a toast: the page saying "done" without stopping anyone ── */ + /* Long enough for the opacity transition in shell.css to finish before the + toast leaves the top layer, so it fades rather than vanishing. */ + const TOAST_FADE_MS = 300; let toastTimer = null; function toast (msg, ms = 2200) { let el = document.querySelector('.vs-toast'); - if (!el) { el = document.createElement('div'); el.className = 'vs-toast'; document.body.appendChild(el) } + if (!el) { + el = document.createElement('div'); + el.className = 'vs-toast'; + /* A modal dialog paints in the top layer, above every z-index there is, + and its backdrop blurs what lies under it. A toast raised while one is + open has to join the top layer or it is unreadable behind the very + dialog whose failure it is reporting. */ + el.popover = 'manual'; + document.body.appendChild(el); + } el.textContent = msg; + /* Promoted on each toast rather than left open, because the top layer + stacks in the order things entered it: one promoted before a dialog + would sit under it. Older browsers have no popover and lose nothing but + the stacking. */ + try { el.showPopover() } catch {} el.classList.add('on'); clearTimeout(toastTimer); - toastTimer = setTimeout(() => el.classList.remove('on'), ms); + toastTimer = setTimeout(() => { + el.classList.remove('on'); + toastTimer = setTimeout(() => { try { el.hidePopover() } catch {} }, TOAST_FADE_MS); + }, ms); } /* ── two-step confirm on one button ── @@ -1469,6 +1522,9 @@

const btn = $('#settingsBtn'), menu = $('#settingsMenu'); if (!btn || !menu) return; const open = on => { menu.hidden = !on; btn.setAttribute('aria-expanded', String(on)) }; + // A control in the cog's slot can act on the page behind it, so the page + // needs a way to put the menu away first. + closeSettings = () => open(false); btn.addEventListener('click', e => { e.stopPropagation(); open(menu.hidden) }); menu.addEventListener('click', e => e.stopPropagation()); document.addEventListener('click', () => open(false)); @@ -1502,9 +1558,12 @@

return api; } + let closeSettings = () => {}; + const api = { init, setTheme, setLang, setLink, setWatching, setServerVersion, hideLink, name, wip, connect, toast, armConfirm, esc, + closeSettings: () => closeSettings(), get theme () { return theme }, get lang () { return lang }, onLang (fn) { langListeners.push(fn) }, @@ -1674,6 +1733,19 @@

clearCancel: 'Cancel', clearConfirm: 'Clear all', clearHistory: 'Clear history', clearHistoryTitle: 'Delete past versions', + reset: 'Hard reset', + resetTitle: 'Delete every comment and version, and start this review at v1', + resetWorking: 'Resetting…', + resetDialogTitle: 'Hard reset this review?', + resetImpact: (c, v) => `This deletes ${c} comment${c === 1 ? '' : 's'} and ${v} version${v === 1 ? '' : 's'}, including everything {agent} has already answered. It cannot be undone.`, + resetImpactLive: c => `This deletes ${c} comment${c === 1 ? '' : 's'}, including everything {agent} has already answered. It cannot be undone.`, + resetKept: 'The page under review stays as it is, and becomes v1 again.', + resetKeptLive: 'The app stays exactly as it is — only the review starts again.', + resetCancel: 'Keep it', + resetConfirm: 'Hard reset', + resetDone: 'The review starts again at v1', + resetFail: 'Could not reset — is the review server still running?', + resetOld: 'This review server started before Hard reset existed. Restart it, or run `review-server.mjs reset` yourself.', clearHistoryDialogTitle: 'Clear version history?', clearHistoryImpact: n => `This permanently deletes ${n} past version${n === 1 ? '' : 's'}. You will no longer be able to scrub back to ${n === 1 ? 'it' : 'them'}.`, clearHistoryKept: 'The current version and all comments will stay.', @@ -1728,6 +1800,10 @@

queuedOn: n => `${n} comment${n > 1 ? 's' : ''} waiting to be picked up`, notPickedUp: n => `${n} comment${n > 1 ? 's' : ''} sent — not picked up yet`, workingAndQueued: (w, q) => `{agent} is working on ${w} · ${q} waiting`, + stalled: n => `{agent} has stalled — ${n} comment${n > 1 ? 's' : ''} still with it`, + sendAgain: 'Send again', + sentAgain: 'Back in the queue — the next session to pick up gets them.', + sendAgainRefused: '{agent} is listening again, so it still has them.', queuedTag: 'queued', addressedGroup: n => `Addressed (${n})`, earlierGroup: n => `Earlier (${n})`, revert: 'Revert', refine: 'Refine', @@ -1788,6 +1864,19 @@

clearCancel: '取消', clearConfirm: '全部清除', clearHistory: '清除历史', clearHistoryTitle: '删除过往版本', + reset: '硬重置', + resetTitle: '删除所有批注与版本,本次评审从 v1 重新开始', + resetWorking: '正在重置…', + resetDialogTitle: '硬重置本次评审?', + resetImpact: (c, v) => `这会删除 ${c} 条批注和 ${v} 个版本,包括 {agent} 已处理的内容,且无法撤销。`, + resetImpactLive: c => `这会删除 ${c} 条批注,包括 {agent} 已处理的内容,且无法撤销。`, + resetKept: '被评审的页面保持不变,并重新成为 v1。', + resetKeptLive: '应用本身保持不变 — 只有评审重新开始。', + resetCancel: '保留', + resetConfirm: '硬重置', + resetDone: '评审已从 v1 重新开始', + resetFail: '重置失败 — 评审服务器还在运行吗?', + resetOld: '这个评审服务器启动于「硬重置」加入之前。请重启它,或自行运行 `review-server.mjs reset`。', clearHistoryDialogTitle: '清除版本历史?', clearHistoryImpact: n => `这会永久删除 ${n} 个过往版本,之后将无法再切换回这些版本。`, clearHistoryKept: '当前版本和所有批注都会保留。', @@ -1837,6 +1926,10 @@

queuedOn: n => `${n} 条批注等待接收`, notPickedUp: n => `${n} 条批注已发送,尚未被接收`, workingAndQueued: (w, q) => `{agent} 正在处理 ${w} 条 · ${q} 条等待中`, + stalled: n => `{agent} 已停止响应 — ${n} 条批注仍在它那里`, + sendAgain: '重新发送', + sentAgain: '已重新排队 — 下一个接手的会话会收到。', + sendAgainRefused: '{agent} 已重新连接,这些仍在它那里。', queuedTag: '等待中', addressedGroup: n => `已处理(${n})`, earlierGroup: n => `更早(${n})`, revert: '撤回', refine: '继续完善', @@ -1917,7 +2010,7 @@

name: 'Review', fileName: 'page.html', html: '', versions: [], comments: [], version: 1, viewing: 1, - historyClearedAt: null, clearingHistory: false, + historyClearedAt: null, clearingHistory: false, resetting: false, /* `mode` is what the pointer does right now — View, or one of the annotate tools. `tool` remembers which tool that was, so leaving for View and coming back returns the tool rather than resetting to Comment. */ @@ -1932,6 +2025,8 @@

offscreen: new Set(), // Threads opened in the panel, and which reply box the cursor is in. threadOpen: new Set(), focusReply: null, + // Deleted in this tab — never to be folded back in by a refresh. + forgotten: new Set(), pendingUpdate: null, linked: null, // null until the connection has actually said one way or other // The shareable Artifact: asked for here, published by Claude, link comes back. @@ -1974,7 +2069,7 @@

if (live()) S.route = S.startPath; adoptShare(data); VSShell.setWatching(data.watching); - S.watching = data.watching; + noteWatching(data.watching); VSShell.setServerVersion(data.version); const phase = S.runtime === 'phase'; @@ -2062,8 +2157,7 @@

presence: ev => { let watching; try { watching = JSON.parse(ev.data).watching } catch { return } - if (S.watching === watching) return; - S.watching = watching; + if (!noteWatching(watching)) return; renderWork(); }, }, @@ -2075,7 +2169,7 @@

// The link can land on its own, without the page or the review moving. adoptShare(data, true); VSShell.setWatching(data.watching); - S.watching = data.watching; + noteWatching(data.watching); VSShell.setServerVersion(data.version); if (data.historyClearedAt && data.historyClearedAt !== S.historyClearedAt) { applyHistoryClear(data); @@ -2128,15 +2222,74 @@

than remembering it: sent and not yet handed over is queued, handed over is being worked on. A reload, a second tab and the tab that pressed Send all see the same thing. */ + +/* How long nothing may be listening before a round in hand is called stalled. + A stream watcher keeps its heartbeat up for the whole time the agent works, + so a heartbeat that stopped is a session that went away rather than a slow + one. The wait is what keeps a session restarting mid-round from reading as a + dead one. */ +const STALL_MS = 60000; +let stallTimer = null; +/** Remember when the heartbeat went quiet. Says whether anything changed. */ +function noteWatching (value) { + if (S.watching === value) return false; + S.watching = value; + S.unwatchedAt = value === false ? Date.now() : null; + return true; +} + +/** How long nothing has been listening. Zero while something is. */ +const quietFor = () => S.watching === false && S.unwatchedAt ? Date.now() - S.unwatchedAt : 0; +/** A round in hand, quiet long enough to call the session behind it gone. + Everything that would animate progress asks this before claiming any. */ +const isStalled = () => quietFor() >= STALL_MS && S.ann.some(isWorking); + function renderWork () { const working = S.ann.filter(isWorking).length; const queued = S.ann.filter(a => isQueued(a) && isOpen(a)).length; + const quiet = working > 0 ? quietFor() : 0; + const stalled = isStalled(); + /* Nothing else calls this while the page sits there waiting, so the strip has + to wake itself up to change its own mind. */ + clearTimeout(stallTimer); + stallTimer = quiet && !stalled ? setTimeout(renderWork, STALL_MS - quiet) : null; $('#pwork').hidden = !working && !queued; + $('#pwork').classList.toggle('stalled', stalled); + const again = $('#btnAgain'); + again.hidden = !stalled || !served() || isHistory(); + again.textContent = T('sendAgain'); if (working || queued) $('#pworkText').textContent = - !working ? (S.watching === false ? T('notPickedUp')(queued) : T('queuedOn')(queued)) + stalled ? T('stalled')(working) + : !working ? (S.watching === false ? T('notPickedUp')(queued) : T('queuedOn')(queued)) : queued ? T('workingAndQueued')(working, queued) : T('workingOn')(working); - composer.classList.toggle('working', !!S.sel && isWorking(annById(S.sel) || {})); + composer.classList.toggle('working', !stalled && !!S.sel && isWorking(annById(S.sel) || {})); +} + +/** + * Give a stalled round back to the queue. + * + * A comment already handed over is not something a new watcher will ever be + * given, so a session that died holding one strands it where nobody can reach + * it. This drops only the record of the handover: the comments stay open and + * still say what they said, and the next session to pick up is given them like + * any other delivery. + */ +async function sendAgain () { + const again = $('#btnAgain'); + again.disabled = true; + try { + const response = await fetch(API + '/comments/requeue', { method: 'POST' }); + // The agent came back while the button was on screen. It holds them after + // all, so nothing is taken off it. + if (response.status === 409) { toast(T('sendAgainRefused')); return } + if (!response.ok) throw new Error(`requeue failed (${response.status})`); + const back = new Set((await response.json()).requeued || []); + for (const a of S.ann) if (back.has(a.id)) a.deliveredAt = null; + toast(T('sentAgain')); + render(); + } catch { toast(T('sendFail')) } + finally { again.disabled = false } } /** @@ -2152,6 +2305,8 @@

let changed = false, agentSpoke = false, closed = 0; const seen = new Set(); for (const incoming of serverComments) { + // Deleted here a moment ago, and the server has not been told yet. + if (S.forgotten.has(incoming.id)) continue; seen.add(incoming.id); const local = annById(incoming.id); if (!local) { S.ann.push(normalise(incoming)); changed = true; continue } @@ -2260,6 +2415,7 @@

} $('#hiNew .lbl').textContent = T('hiNew'); $('#hiNew').title = T('hiNewTitle'); + renderReset(); $('#btnReload').title = T('reloadTitle'); $('#btnNow').textContent = T('backToCurrent'); $('#btnRefresh').textContent = T('reviewChanges'); @@ -2312,6 +2468,14 @@

$('#clearDialog').onclick = e => { if (e.target === $('#clearDialog')) $('#clearDialog').close() }; $('#clearDialog').addEventListener('cancel', e => { e.preventDefault(); $('#clearDialog').close() }); $('#btnClearHistory').onclick = openHistoryDialog; + $('#btnReset').onclick = () => { VSShell.closeSettings?.(); openResetDialog() }; + $('#btnCancelReset').onclick = () => $('#resetDialog').close(); + $('#btnConfirmReset').onclick = confirmReset; + $('#resetDialog').onclick = e => { if (e.target === $('#resetDialog') && !S.resetting) $('#resetDialog').close() }; + $('#resetDialog').addEventListener('cancel', e => { + e.preventDefault(); + if (!S.resetting) $('#resetDialog').close(); + }); $('#btnCancelHistory').onclick = () => $('#historyDialog').close(); $('#btnConfirmHistory').onclick = confirmClearReviewHistory; $('#historyDialog').onclick = e => { if (e.target === $('#historyDialog') && !S.clearingHistory) $('#historyDialog').close() }; @@ -2330,6 +2494,7 @@

// back, so there is never a second control saying the same thing elsewhere. $('#panelHandle').onclick = () => setPanel(!document.body.classList.contains('panelopen')); $('#btnGeneral').onclick = addGeneral; + $('#btnAgain').onclick = sendAgain; // Open beside the page when there is room for it, away when there is not — // and back to that default whenever the window crosses the line, rather than // carrying a choice made about one shape over into the other. @@ -3330,6 +3495,19 @@

save(); render(); // the card's own field takes the cursor } +/* Deleting a comment is its own request. A save says what this tab holds, not + what the review contains — the server keeps whatever a save leaves out, which + is what a second tab depends on — so a comment dropped from the payload is + not deleted, and would come back on the next refresh. */ +function forgetOnServer (id) { + S.forgotten.add(id); + if (S.runtime === 'artifact') return; + fetch(API + '/comments/dismiss', { + method: 'POST', headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id }), + }).catch(() => {}); +} + function removeComment (id) { S.ann = S.ann.filter(a => a.id !== id); if (S.sel === id) { S.sel = null; composer.classList.remove('on') } @@ -3444,7 +3622,7 @@

composer.querySelector('.cdel').style.display = hasSubstance(a) && !isHistory() ? '' : 'none'; composer.querySelector('.cdel').title = T('del'); composer.querySelector('.csave').style.display = isHistory() ? 'none' : ''; - composer.classList.toggle('working', isWorking(a)); + composer.classList.toggle('working', isWorking(a) && !isStalled()); placeComposer(); if (focus !== false) setTimeout(() => (canReply && a.note ? reply : note).focus(), 0); drawMarks(); renderPanel(); @@ -3461,7 +3639,7 @@

if (!sent(a) && note !== (a.note || '')) { a.note = note; save() } // No words and no thread is not feedback — clearing a comment removes it, // which is also how you take one back. - if (!hasSubstance(a)) S.ann = S.ann.filter(x => x.id !== a.id); + if (!hasSubstance(a)) { S.ann = S.ann.filter(x => x.id !== a.id); forgetOnServer(a.id) } delete a._fresh; } composer.classList.remove('on'); @@ -3488,7 +3666,6 @@

*/ async function takeOff (a) { if (isHistory()) return; - if (!sent(a)) { removeComment(a.id); return } if (a.deliveredAt) { S.threadOpen.add(a.id); S.focusReply = a.id; @@ -3499,12 +3676,7 @@

S.threadOpen.delete(a.id); replyDrafts.delete(a.id); if (S.sel === a.id) closeComposer(); - try { - await fetch(API + '/comments/dismiss', { - method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ id: a.id }), - }); - } catch {} + forgetOnServer(a.id); removeComment(a.id); toast(T('dismissed')); } @@ -3974,7 +4146,7 @@

${threadNote(a, open)} ${open ? threadBox(a) : ''} ${done ? '
' : ''} - ${working && !queued ? '
' : ''}`; + ${working && !queued && !isStalled() ? '
' : ''}`; const menu = $('.imenu', el), more = $('.imore', el); if (more) more.onclick = e => { e.stopPropagation(); @@ -4141,12 +4313,7 @@

been acted on, so taking that one back is a reply asking for it — clearing a queue cannot speak for those. */ const going = activeComments().map(a => a.id); - for (const id of going) { - fetch(API + '/comments/dismiss', { - method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ id }), - }).catch(() => {}); - } + for (const id of going) forgetOnServer(id); S.ann = S.ann.filter(a => !going.includes(a.id)); save(); render(); toast(T('cleared')(going.length)); @@ -4201,7 +4368,7 @@

function renderHistoryButton () { const btn = $('#btnClearHistory'); if (!btn) return; - btn.hidden = !served() || S.runtime === 'phase'; + btn.hidden = !served() || S.runtime === 'phase' || live(); if (btn.hidden) return; btn.disabled = S.clearingHistory || !hasVersionHistory(); btn.textContent = S.clearingHistory ? T('clearHistoryWorking') : T('clearHistory'); @@ -4209,6 +4376,65 @@

btn.setAttribute('aria-label', btn.textContent); } +/* Starting over. A tool update that changes what a review keeps on disk leaves + a store written by the version before it, and reading one is a courtesy, not + a promise — this is the way out when the courtesy is not enough. It is behind + the cog because it is not part of reviewing, and behind a confirmation + because nothing it deletes comes back. */ +function renderReset () { + const btn = $('#btnReset'); + if (!btn) return; + btn.textContent = S.resetting ? T('resetWorking') : T('reset'); + btn.title = T('resetTitle'); + btn.disabled = S.resetting || !served(); +} + +function renderResetDialog () { + const dialog = $('#resetDialog'); + if (!dialog.open) return; + $('#resetDialogTitle').textContent = T('resetDialogTitle'); + const comments = S.ann.filter(hasSubstance).length; + // A live review has no versions and no page of its own to speak for. + $('#resetDialogImpact').textContent = live() + ? T('resetImpactLive')(comments) + : T('resetImpact')(comments, S.versions.length); + $('#resetDialogKept').textContent = live() ? T('resetKeptLive') : T('resetKept'); + $('#btnCancelReset').textContent = T('resetCancel'); + $('#btnCancelReset').disabled = S.resetting; + $('#btnConfirmReset').textContent = S.resetting ? T('resetWorking') : T('resetConfirm'); + $('#btnConfirmReset').disabled = S.resetting; +} + +function openResetDialog () { + if (!served() || S.resetting) return; + const dialog = $('#resetDialog'); + if (!dialog.open) dialog.showModal(); + renderResetDialog(); + $('#btnCancelReset').focus(); +} + +async function confirmReset () { + if (S.resetting) return; + S.resetting = true; + renderReset(); renderResetDialog(); + try { + const response = await fetch(API + '/reset', { method: 'POST' }); + if (response.status === 404) throw new Error('old'); + if (!response.ok) throw new Error(`reset failed (${response.status})`); + } catch (error) { + const old = error?.message === 'old'; + S.resetting = false; + renderReset(); renderResetDialog(); + toast(T(old ? 'resetOld' : 'resetFail')); + return; + } + /* Everything this tab holds is about the review that just went — the frame, + the timeline, the cards, the drafts. Reading it back in is the reload it + would take anyway, and it is the one moment where losing the page is the + point rather than a rudeness. */ + location.reload(); +} + function renderHistoryDialog () { const dialog = $('#historyDialog'); if (!dialog.open) return; @@ -4294,10 +4520,18 @@

+ (n === S.version ? ' · ' + T('current') : ''); } const capFor = n => S.runtime === 'phase' ? `P${n}` : live() ? `r${n}` : `v${n}`; +/* A version is a frozen copy of the page under review. A running app has none — + what a capture of one produces is a likeness, and scrubbing back to it showed + something that was never really there — so a live review has comments and no + timeline at all. */ const scrubItems = () => - versionList().map(n => ({ id: n, cap: capFor(n), label: labelFor(n), sub: subFor(n) })); + live() ? [] : versionList().map(n => ({ id: n, cap: capFor(n), label: labelFor(n), sub: subFor(n) })); function buildTimeline () { + /* A live review has no versions to move between, so the whole row goes rather + than sitting there empty with a track that does nothing. */ + const timeline = $('#timeline'); + if (timeline) timeline.hidden = live(); VSScrub.set({ items: scrubItems(), active: S.viewing }); syncTimeline(); } @@ -4495,55 +4729,6 @@

} -/* ─────────────── live: keeping a copy of what they saw ─────────────── - A file review freezes the file on every publish. There is nothing to freeze - here — the app moves on the moment the code does — so the workspace takes - the picture instead: the DOM as it stands, with its stylesheets folded in so - it still looks like itself. It is what the timeline scrubs back to, and what - gets published when someone asks for a link they can send on. - - A capture is a likeness, not the app: scripts are dropped, and anything the - page would have fetched later never arrives. */ -function captureDOM () { - if (!fdoc) return null; - let doc; - try { doc = fdoc.documentElement.cloneNode(true) } catch { return null } - for (const n of doc.querySelectorAll('script')) n.remove(); - // Same-origin means the rules are readable — which is the only reason a - // capture of a real app looks like anything at all. - const css = []; - try { - for (const sheet of fdoc.styleSheets) { - let rules = null; - try { rules = sheet.cssRules } catch { continue } // a cross-origin sheet stays out - if (rules) css.push([...rules].map(r => r.cssText).join('\n')); - } - } catch {} - for (const n of doc.querySelectorAll('link[rel~="stylesheet"],style')) n.remove(); - const head = doc.querySelector('head') || doc; - // Absolute paths in the capture still point at this origin, which is the - // proxy — so a capture opened outside it shows structure, not artwork. - const base = doc.ownerDocument.createElement('base'); - base.href = location.origin + '/'; - head.prepend(base); - const style = doc.ownerDocument.createElement('style'); - style.textContent = css.join('\n'); - head.append(style); - return '\n' + doc.outerHTML; -} -/** Best-effort — a round with no capture is still a round. */ -async function pushCapture () { - if (!live() || isHistory()) return; - const html = captureDOM(); - if (!html) return; - try { - await fetch(API + '/snapshot', { - method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ version: S.version, route: S.route, html }), - }); - } catch {} -} - /** * Let go of what has been written. With no argument that is everything still * here; with an id it is that one, which joins whatever Claude already has. @@ -4569,8 +4754,6 @@

return; } try { - // Take the picture of what they were looking at before Claude changes it. - if (!S.ann.some(isWorking)) await pushCapture(); /* Letting go of a comment is the whole of sending it. It joins the list the server already holds and goes out on the next tick, so there is no batch to time and nothing to hold back — Claude gets everything still open, @@ -4685,9 +4868,6 @@

if (s.url && s.version === S.version) { copy(s.url); closeSendMenu(); return } S.share.pending = true; renderShare(); try { - // A running app cannot be sent to anyone. What can is a capture of the - // screen they are on — so take one now, and let Claude publish that. - await pushCapture(); await fetch(API + '/share', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ version: S.version }), diff --git a/plugins/vstack/skills/review/hosts/claude.md b/plugins/vstack/skills/review/hosts/claude.md index 2dedc50..471e6e5 100644 --- a/plugins/vstack/skills/review/hosts/claude.md +++ b/plugins/vstack/skills/review/hosts/claude.md @@ -22,7 +22,7 @@ Default when unset is `claude`, so existing installs keep working without this. | `background(cmd)` | Bash / shell with `run_in_background: true` | `node …/review-server.mjs serve …` must outlive the turn | | `watch_stream(cmd)` | **Monitor** tool, `persistent: true` | `node …/review-server.mjs watch --all --stream` — Monitor delivers each line to the session as it arrives | | `stop(handle)` | TaskStop / stop the background task | After approve or when ending the session | -| `run(cmd)` | Bash (foreground) | `publish`, `reply`, `ack`, `share`, `status` | +| `run(cmd)` | Bash (foreground) | `publish`, `reply`, `ack`, `share`, `status`, `check` | | `edit` | Edit / Write tools | Change the HTML file or app source | | `share(file)` | **Artifact** tool (favicon 🎨) | Publish the wireframe file; then `share --url ` | | `browser_capture` | Claude-in-Chrome / browser tools | Navigate, screenshot, run `harvest-reference.js` | @@ -67,6 +67,20 @@ Offline remote comments: `bundle-artifact.mjs` — Send becomes copy (no session --- +## Round gate + +Claude Code is the only Host that can gate the end of a turn, so the plugin +ships a Stop hook at `plugins/vstack/hooks/hooks.json`. It runs +`review-server.mjs check --all` and blocks the turn while a comment you took +delivery of is still unanswered, telling you which one and which command +settles it. Rule 14 of [review-loop.md](../../../contracts/review-loop.md) is +what it enforces. + +It blocks at most once per turn, and it stands aside whenever no review has a +server behind it. + +--- + ## Notes - Update detection uses Claude’s install record (`capabilities.updateDetect: claude-install`). diff --git a/plugins/vstack/skills/review/tests/review-lifecycle.mjs b/plugins/vstack/skills/review/tests/review-lifecycle.mjs index 44c88f7..6c872c5 100644 --- a/plugins/vstack/skills/review/tests/review-lifecycle.mjs +++ b/plugins/vstack/skills/review/tests/review-lifecycle.mjs @@ -132,6 +132,31 @@ try { assert.match(briefText(), /They replied:\*\* Not like that/) assert.match(briefText(), /### c2/) + /* ── a stranded round goes back to the queue ── */ + + const watching = path.join(store, 'watching') + fs.writeFileSync(watching, String(Date.now())) + const held = await post('/api/comments/requeue', {}) + assert.equal(held.response.status, 409, 'nothing is taken off an agent that is listening') + assert.ok(byId('c1').deliveredAt, 'and the handover stands') + + /* Nothing listening: both comments are delivered and neither is unseen, so no + watcher started after this point would ever be handed them. */ + const note = byId('c1').note + fs.rmSync(watching, { force: true }) + const requeued = await post('/api/comments/requeue', {}) + assert.equal(requeued.response.status, 200) + assert.deepEqual(requeued.body.requeued.sort(), ['c1', 'c2']) + assert.equal(byId('c1').deliveredAt, null, 'only the record of the handover goes') + assert.equal(byId('c1').state, 'open', 'the comment itself is untouched') + assert.equal(byId('c1').note, note, 'and it still says what it said') + + out = tick() + assert.match(out, /REVIEW/, 'the next session to pick up is handed the stranded round') + // New to the session receiving them, which is the whole point of putting them + // back: the one that was given them first is gone. + assert.match(out, /2 open, 2 new/) + /* ── the thread is append-only, from either side ── */ assert.equal(cli('reply', '--comment', 'c2', '--text', 'Which card?').status, 0) diff --git a/plugins/vstack/skills/review/tests/round-gate.mjs b/plugins/vstack/skills/review/tests/round-gate.mjs new file mode 100644 index 0000000..7c77b0b --- /dev/null +++ b/plugins/vstack/skills/review/tests/round-gate.mjs @@ -0,0 +1,126 @@ +#!/usr/bin/env node +/* + * What `check` calls an unfinished round, and what the Stop hook does with it. + * + * The rule under test: a comment the agent took delivery of is answered by + * closing it or by replying to it, and until one of those happens the round has + * not been handed back. + */ + +import assert from 'node:assert/strict' +import { spawn, spawnSync } from 'node:child_process' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const HERE = path.dirname(fileURLToPath(import.meta.url)) +const SERVER = path.resolve(HERE, '../assets/review-server.mjs') +const GATE = path.resolve(HERE, '../../../hooks/round-gate.mjs') +const temp = fs.mkdtempSync(path.join(os.tmpdir(), 'vstack-gate-test-')) +const page = path.join(temp, 'page.html') +const port = 19000 + (process.pid % 1000) +const origin = `http://127.0.0.1:${port}` +let server = null + +const cli = (...argv) => spawnSync(process.execPath, [SERVER, ...argv], { + encoding: 'utf8', cwd: temp, timeout: 20_000, +}) + +/** The gate as Claude Code runs it: the Stop payload on stdin, a decision out. */ +const gate = (input = {}) => { + const run = spawnSync(process.execPath, [GATE], { + encoding: 'utf8', cwd: temp, timeout: 20_000, + input: JSON.stringify({ hook_event_name: 'Stop', cwd: temp, ...input }), + }) + assert.equal(run.status, 0, `the hook itself must never fail: ${run.stderr}`) + return run.stdout.trim() ? JSON.parse(run.stdout) : null +} + +const post = (pathname, body) => fetch(origin + pathname, { + method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(body), +}) + +const comment = (id, note, extra = {}) => ({ + id, kind: 'area', note, size: 'desktop', replies: [], + sentAt: new Date().toISOString(), ...extra, +}) + +/** One tick: block until there is something to hand over, take it, and exit. */ +const tick = () => cli('watch', '--file', page) + +async function waitForServer () { + for (let attempt = 0; attempt < 60; attempt++) { + try { if ((await fetch(origin + '/api/project')).ok) return } catch {} + await new Promise(resolve => setTimeout(resolve, 100)) + } + throw new Error('review server did not start') +} + +try { + fs.writeFileSync(page, 'Page

Hi

') + server = spawn(process.execPath, [SERVER, 'serve', '--file', page, '--port', String(port), + '--idle-timeout', '0', '--no-open'], { cwd: temp, stdio: ['ignore', 'pipe', 'pipe'] }) + await waitForServer() + + // Nothing has been written, so there is nothing to owe. + assert.equal(cli('check', '--all').status, 0, 'a review with no comments is finished') + assert.equal(gate(), null, 'the gate lets a quiet turn end') + + // Queued but not delivered: the agent has not been handed it, so it owes + // nothing yet. The watcher is what hands it over. + await post('/api/comments', { comments: [comment('c1', 'Make the hero bigger')] }) + assert.equal(cli('check', '--all').status, 0, 'a queued comment is not the agent\'s to answer') + + // Delivered and untouched — the round stopped halfway. + assert.match(tick().stdout, /REVIEW/, 'the tick hands the comment over') + const owed = cli('check', '--all') + assert.equal(owed.status, 1, 'a delivered comment with nothing said about it is outstanding') + assert.match(owed.stdout, /c1/, 'it names the comment') + assert.match(owed.stdout, /publish .* --close c1/, 'it names the command that settles it') + + const blocked = gate() + assert.equal(blocked?.decision, 'block', 'the gate holds the turn open') + assert.match(blocked.reason, /c1/, 'the agent is told which comment it left') + + // Having already blocked once this turn, the gate stands aside. + assert.equal(gate({ stop_hook_active: true }), null, 'the gate blocks at most once per turn') + + // Replying answers it without closing it: the agent asked a question, which + // is a legitimate way to end a round. + assert.equal(cli('reply', '--file', page, '--comment', 'c1', '--text', 'How much bigger?').status, 0) + assert.equal(cli('check', '--all').status, 0, 'a reply hands the round back') + + // The reviewer answers. That comment is waiting for the next tick, not for + // the agent, so it must not hold the turn open. + const answered = { by: 'reviewer', text: 'Twice', at: new Date().toISOString() } + await post('/api/comments', { comments: [comment('c1', 'Make the hero bigger', { replies: [answered] })] }) + assert.equal(cli('check', '--all').status, 0, 'a comment awaiting delivery is not outstanding') + + // Delivered again, and now unanswered again. + assert.match(tick().stdout, /REVIEW/, 'the answer comes back round') + assert.equal(cli('check', '--all').status, 1, 'the agent owes an answer once more') + + // Closing it finishes the round. + assert.equal(cli('publish', '--file', page, '--close', 'c1', '--label', 'Hero doubled').status, 0) + assert.equal(cli('check', '--all').status, 0, 'closing hands the round back') + assert.equal(gate(), null, 'the gate lets the turn end') + + // A review nobody is looking at is over. `--all` reads live stores only, so + // the gate cannot strand a session on a round whose tab has gone. + await post('/api/comments', { comments: [comment('c2', 'And centre it')] }) + assert.match(tick().stdout, /REVIEW/, 'the second comment is handed over') + assert.equal(cli('check', '--all').status, 1, 'outstanding while the review is live') + server.kill('SIGTERM') + for (let attempt = 0; attempt < 60 && server.exitCode === null; attempt++) { + await new Promise(resolve => setTimeout(resolve, 100)) + } + assert.equal(cli('check', '--all').status, 0, 'a closed review owes nothing') + assert.equal(cli('check', '--file', page).status, 1, + 'the named form still reports it, because a person asking about one review means it') + + console.log('round gate: ok') +} finally { + server?.kill('SIGTERM') + fs.rmSync(temp, { recursive: true, force: true }) +} diff --git a/plugins/vstack/skills/user-story-map/assets/story-map-template.html b/plugins/vstack/skills/user-story-map/assets/story-map-template.html index ec7616f..916cead 100644 --- a/plugins/vstack/skills/user-story-map/assets/story-map-template.html +++ b/plugins/vstack/skills/user-story-map/assets/story-map-template.html @@ -256,8 +256,10 @@ .banner.good .tick{color:var(--ok);font-weight:700} /* the toast — VSShell.toast(); one element, appended on first use */ -.vs-toast{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; - background:var(--ink);color:var(--surface);padding:8px 14px;border-radius:8px; +/* It is a popover, so the browser's own [popover] rules apply first: inset, + margin and border are theirs to set and ours to put back. */ +.vs-toast{position:fixed;inset:auto;left:50%;bottom:18px;transform:translateX(-50%);z-index:80; + background:var(--ink);color:var(--surface);border:0;margin:0;padding:8px 14px;border-radius:8px; font-size:12.5px;box-shadow:var(--shadow-pop);opacity:0;pointer-events:none;transition:opacity .25s} .vs-toast.on{opacity:1} @@ -522,6 +524,11 @@
+ + +
@@ -801,14 +808,34 @@

} /* ── a toast: the page saying "done" without stopping anyone ── */ + /* Long enough for the opacity transition in shell.css to finish before the + toast leaves the top layer, so it fades rather than vanishing. */ + const TOAST_FADE_MS = 300; let toastTimer = null; function toast (msg, ms = 2200) { let el = document.querySelector('.vs-toast'); - if (!el) { el = document.createElement('div'); el.className = 'vs-toast'; document.body.appendChild(el) } + if (!el) { + el = document.createElement('div'); + el.className = 'vs-toast'; + /* A modal dialog paints in the top layer, above every z-index there is, + and its backdrop blurs what lies under it. A toast raised while one is + open has to join the top layer or it is unreadable behind the very + dialog whose failure it is reporting. */ + el.popover = 'manual'; + document.body.appendChild(el); + } el.textContent = msg; + /* Promoted on each toast rather than left open, because the top layer + stacks in the order things entered it: one promoted before a dialog + would sit under it. Older browsers have no popover and lose nothing but + the stacking. */ + try { el.showPopover() } catch {} el.classList.add('on'); clearTimeout(toastTimer); - toastTimer = setTimeout(() => el.classList.remove('on'), ms); + toastTimer = setTimeout(() => { + el.classList.remove('on'); + toastTimer = setTimeout(() => { try { el.hidePopover() } catch {} }, TOAST_FADE_MS); + }, ms); } /* ── two-step confirm on one button ── @@ -916,6 +943,9 @@

const btn = $('#settingsBtn'), menu = $('#settingsMenu'); if (!btn || !menu) return; const open = on => { menu.hidden = !on; btn.setAttribute('aria-expanded', String(on)) }; + // A control in the cog's slot can act on the page behind it, so the page + // needs a way to put the menu away first. + closeSettings = () => open(false); btn.addEventListener('click', e => { e.stopPropagation(); open(menu.hidden) }); menu.addEventListener('click', e => e.stopPropagation()); document.addEventListener('click', () => open(false)); @@ -949,9 +979,12 @@

return api; } + let closeSettings = () => {}; + const api = { init, setTheme, setLang, setLink, setWatching, setServerVersion, hideLink, name, wip, connect, toast, armConfirm, esc, + closeSettings: () => closeSettings(), get theme () { return theme }, get lang () { return lang }, onLang (fn) { langListeners.push(fn) }, From 5eeb21d71920e5ec3bd596dca06aa2c617c4db14 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Thu, 6 Aug 2026 14:07:52 +0800 Subject: [PATCH 05/19] The command that reports an unfinished round is named `unanswered` `check` was the wrong name to give it: 6.0.0 removes a command called `check`, so the same release would have retired the name and brought it back meaning something else. `unanswered` is the word the contract rule and the command's own output already use. The 6.0.0 entry now covers what landed after it was written: the round gate, Send again, Hard reset, and the message that could not be read over a dialog. --- CHANGELOG.md | 22 +++++++++++++++++++ CLAUDE.md | 6 ++--- plugins/vstack/contracts/review-loop.md | 4 ++-- plugins/vstack/hooks/round-gate.mjs | 4 ++-- plugins/vstack/skills/review/SKILL.md | 2 +- .../skills/review/assets/review-server.mjs | 10 ++++----- plugins/vstack/skills/review/hosts/claude.md | 4 ++-- .../vstack/skills/review/tests/round-gate.mjs | 22 +++++++++---------- 8 files changed, 48 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04b2327..802ca64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,8 +28,30 @@ compares against to decide an update is available. See the release checklist in - **A version records no comments.** `versions/v.meta.json` is a label and a date. Snapshots are for looking at. +**Added** + +- **A round the agent took is finished before its turn can end.** `unanswered` + reports every comment the agent was handed and then said nothing about — + neither closed nor replied to. On Claude Code a Stop hook runs it and holds the + turn open until the round is answered. Nothing else caught this: a delivery + only fires when the reviewer writes again, so a comment the agent went quiet on + sat there for as long as they stayed quiet too. +- **Send again, when the agent stops responding.** After a minute with nothing + listening, the workspace says the agent has stalled rather than animating + progress that is not happening, and offers to put those comments back in the + queue. A comment already delivered is invisible to a watcher started + afterwards, so a restarted session used to sit idle on a review it could not be + handed. Refused while a heartbeat says an agent still holds them. +- **Hard reset**, in the cog. Starts a review over, behind a confirm that says how + many comments and versions go. The page under review is left alone and becomes + v1 again. + **Fixed** +- **What a failed action had to say could not be read.** A message raised while a + dialog was open sat under that dialog's own backdrop, dimmed and blurred by it. + Messages now join the top layer, so they arrive on top of the thing that + failed. - **A comment could stop being closable.** Replying to one changed the fingerprint its round had recorded, so the reviewer answering the agent's own question was what blocked the comment from ever closing — and the workspace diff --git a/CLAUDE.md b/CLAUDE.md index 966d752..53ed711 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -29,7 +29,7 @@ Tests are standalone Node scripts — run them directly, one file per suite: node plugins/vstack/skills/review/tests/review-lifecycle.mjs # end-to-end review server round-trip node plugins/vstack/skills/review/tests/host-profiles.mjs # host profiles conform to host.schema.json node plugins/vstack/skills/review/tests/workdir.mjs # .vstack/local working-dir resolution -node plugins/vstack/skills/review/tests/round-gate.mjs # `check` and the Stop hook that runs it +node plugins/vstack/skills/review/tests/round-gate.mjs # `unanswered` and the Stop hook that runs it ``` The shared UI shell is stamped into pages, not linked (see below): @@ -113,7 +113,7 @@ The layering rule that everything else follows (`plugins/vstack/contracts/README Code's only entry point into the plugin, and no other host reads it. It registers one Stop hook, `hooks/round-gate.mjs`, which blocks the end of a turn while a review comment the agent took delivery of is still unanswered. - The hook decides nothing itself: `review-server.mjs check` owns what an + The hook decides nothing itself: `review-server.mjs unanswered` owns what an unfinished round is, so every host gets the same answer by running it. Rule 14 of `contracts/review-loop.md` is what it enforces. @@ -124,7 +124,7 @@ The layering rule that everything else follows (`plugins/vstack/contracts/README app (`--app`) so the workspace shares an origin with what it annotates (that origin-sharing is why comments can attach to elements, not coordinates). CLI subcommands (`serve`, `watch`, `publish`, `reply`, `ack`, `share`, `status`, - `check`, `reset`) drive the protocol; sentinels and round records live on disk. + `unanswered`, `reset`) drive the protocol; sentinels and round records live on disk. - `lib/json-bridge.mjs` — the live link for JSON-document pages (user-story-map, plus the experimental spec and phase-build tools): the page POSTs saves and bumps a seq counter the agent's watcher wakes on; agent edits are pushed back diff --git a/plugins/vstack/contracts/review-loop.md b/plugins/vstack/contracts/review-loop.md index 05f34c1..99a952e 100644 --- a/plugins/vstack/contracts/review-loop.md +++ b/plugins/vstack/contracts/review-loop.md @@ -143,7 +143,7 @@ Host selection: `--host ` or `VSTACK_HOST=` (affects UI injection only). | `reply --file/name … --comment --text "…"` | Append `{ by: "agent", text, at }` | | `share --file/name … --url ` | Record public URL; clear the `share` sentinel | | `status --file/name …` | Human/debug snapshot | -| `check [--all] [--file/name …]` | What the agent still owes. Exits 1 when a delivered comment is unanswered | +| `unanswered [--all] [--file/name …]` | Comments the agent was handed and has not answered. Exits 1 while any remain | --- @@ -202,7 +202,7 @@ Rules: 11. One `watch_stream` per session is enough with `--all`. 12. Presence is proven. A stream watcher writes its `watching` heartbeat from the moment its handshake is answered, so **Linked** means a session is receiving the stream. Default window 120 s (`--handshake-timeout `). 13. Presence is per review, and per watcher. A watcher heartbeats only the stores it covers, and goes live only on an answer carrying its own token. -14. An agent that took delivery answers. A comment it was handed is answered by closing it or by replying to it. Neither is a round that stopped halfway, because no tick will raise that comment again until the reviewer writes. `check` names them, and exits 1 while any remain. +14. An agent that took delivery answers. A comment it was handed is answered by closing it or by replying to it. Neither is a round that stopped halfway, because no tick will raise that comment again until the reviewer writes. `unanswered` names them, and exits 1 while any remain. 15. A delivered comment goes back to the queue when nothing is listening. That is the way out of a round whose agent session died: those comments are not `unseen`, so no new watcher would ever hand them over. `deliveredAt` is cleared and the comment is Queued again. The engine refuses this while a `watching` heartbeat is fresh, because then an agent still holds it and rule 9 applies instead. Rule 14 is an obligation on the agent, not a refusal by the engine. Rule 3 diff --git a/plugins/vstack/hooks/round-gate.mjs b/plugins/vstack/hooks/round-gate.mjs index 24da024..e35e5dd 100644 --- a/plugins/vstack/hooks/round-gate.mjs +++ b/plugins/vstack/hooks/round-gate.mjs @@ -4,7 +4,7 @@ * * Claude Code is the one Host that can gate the end of a turn, so this sits * outside the engine with the rest of the host-specific wiring. It decides - * nothing itself: `review-server.mjs check` owns what an unfinished round is, + * nothing itself: `review-server.mjs unanswered` owns what an unfinished round is, * and this turns its answer into the block Claude Code understands. */ @@ -26,7 +26,7 @@ try { input = JSON.parse(Buffer.concat(chunks).toString('utf8') || '{}') } catch comes back on the next delivery. */ if (input.stop_hook_active) process.exit(0) -const check = spawnSync(process.execPath, [SERVER, 'check', '--all'], { +const check = spawnSync(process.execPath, [SERVER, 'unanswered', '--all'], { cwd: input.cwd || process.cwd(), encoding: 'utf8', timeout: 5000, }) diff --git a/plugins/vstack/skills/review/SKILL.md b/plugins/vstack/skills/review/SKILL.md index 659ab81..60ae384 100644 --- a/plugins/vstack/skills/review/SKILL.md +++ b/plugins/vstack/skills/review/SKILL.md @@ -238,7 +238,7 @@ On a delivery: those or reply asking about them, because the delivery will not raise them again on its own. 6. **Check you left nothing hanging**, before you finish your turn: ```bash - node "$SKILL/assets/review-server.mjs" check --all + node "$SKILL/assets/review-server.mjs" unanswered --all ``` It exits 1 and names every comment you were handed and then said nothing about — neither closed nor replied to. Those are the ones nothing will remind you of again, because the next delivery diff --git a/plugins/vstack/skills/review/assets/review-server.mjs b/plugins/vstack/skills/review/assets/review-server.mjs index fd6d658..39b287e 100644 --- a/plugins/vstack/skills/review/assets/review-server.mjs +++ b/plugins/vstack/skills/review/assets/review-server.mjs @@ -135,7 +135,7 @@ if (LIVE) { console.error(' are rewritten to stay inside the proxy, but bot protection, a login wall or a') console.error(' strict CSRF check can still refuse it. If the site misbehaves, say so.') } -} else if (['watch', 'ack', 'check'].includes(args._) && (args.all === true || args.all === 'true')) { +} else if (['watch', 'ack', 'unanswered'].includes(args._) && (args.all === true || args.all === 'true')) { /* `watch --all` names no subject on purpose — it finds the live ones itself, so a session with several pages open arms one waiter instead of one each. */ DIR = process.cwd(); NAME = 'all'; STORE = workDir(DIR, TOOL.review) @@ -1054,7 +1054,7 @@ function cmdStatus () { }, null, 2)) } -/* ───────────────────────────── check ────────────────────────────── */ +/* ────────────────────────── unanswered ─────────────────────────── */ /** * A comment the agent was handed and has said nothing about since. @@ -1084,7 +1084,7 @@ const oneLine = note => { * for whether a round is in flight at all: a review whose tab has gone is over, * and there is nothing left to owe. */ -function cmdCheck () { +function cmdUnanswered () { const stores = args.all === true || args.all === 'true' ? liveStores() : [STORE] const bin = process.argv[1] let owing = 0 @@ -1767,11 +1767,11 @@ switch (args._) { case 'ack': withStoreLock(cmdAck); break case 'share': withStoreLock(cmdShare); break case 'status': cmdStatus(); break - case 'check': cmdCheck(); break + case 'unanswered': cmdUnanswered(); break case 'reset': withStoreLock(cmdReset); break case 'watch': cmdWatch(); break case 'serve': cmdServe(); break default: - console.error(`Unknown command "${args._}". Use: serve | watch | publish | reply | ack | share | status | check | reset`) + console.error(`Unknown command "${args._}". Use: serve | watch | publish | reply | ack | share | status | unanswered | reset`) process.exit(1) } diff --git a/plugins/vstack/skills/review/hosts/claude.md b/plugins/vstack/skills/review/hosts/claude.md index 471e6e5..28aa2fb 100644 --- a/plugins/vstack/skills/review/hosts/claude.md +++ b/plugins/vstack/skills/review/hosts/claude.md @@ -22,7 +22,7 @@ Default when unset is `claude`, so existing installs keep working without this. | `background(cmd)` | Bash / shell with `run_in_background: true` | `node …/review-server.mjs serve …` must outlive the turn | | `watch_stream(cmd)` | **Monitor** tool, `persistent: true` | `node …/review-server.mjs watch --all --stream` — Monitor delivers each line to the session as it arrives | | `stop(handle)` | TaskStop / stop the background task | After approve or when ending the session | -| `run(cmd)` | Bash (foreground) | `publish`, `reply`, `ack`, `share`, `status`, `check` | +| `run(cmd)` | Bash (foreground) | `publish`, `reply`, `ack`, `share`, `status`, `unanswered` | | `edit` | Edit / Write tools | Change the HTML file or app source | | `share(file)` | **Artifact** tool (favicon 🎨) | Publish the wireframe file; then `share --url ` | | `browser_capture` | Claude-in-Chrome / browser tools | Navigate, screenshot, run `harvest-reference.js` | @@ -71,7 +71,7 @@ Offline remote comments: `bundle-artifact.mjs` — Send becomes copy (no session Claude Code is the only Host that can gate the end of a turn, so the plugin ships a Stop hook at `plugins/vstack/hooks/hooks.json`. It runs -`review-server.mjs check --all` and blocks the turn while a comment you took +`review-server.mjs unanswered --all` and blocks the turn while a comment you took delivery of is still unanswered, telling you which one and which command settles it. Rule 14 of [review-loop.md](../../../contracts/review-loop.md) is what it enforces. diff --git a/plugins/vstack/skills/review/tests/round-gate.mjs b/plugins/vstack/skills/review/tests/round-gate.mjs index 7c77b0b..783eb7e 100644 --- a/plugins/vstack/skills/review/tests/round-gate.mjs +++ b/plugins/vstack/skills/review/tests/round-gate.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node /* - * What `check` calls an unfinished round, and what the Stop hook does with it. + * What `unanswered` calls an unfinished round, and what the Stop hook does with it. * * The rule under test: a comment the agent took delivery of is answered by * closing it or by replying to it, and until one of those happens the round has @@ -64,17 +64,17 @@ try { await waitForServer() // Nothing has been written, so there is nothing to owe. - assert.equal(cli('check', '--all').status, 0, 'a review with no comments is finished') + assert.equal(cli('unanswered', '--all').status, 0, 'a review with no comments is finished') assert.equal(gate(), null, 'the gate lets a quiet turn end') // Queued but not delivered: the agent has not been handed it, so it owes // nothing yet. The watcher is what hands it over. await post('/api/comments', { comments: [comment('c1', 'Make the hero bigger')] }) - assert.equal(cli('check', '--all').status, 0, 'a queued comment is not the agent\'s to answer') + assert.equal(cli('unanswered', '--all').status, 0, 'a queued comment is not the agent\'s to answer') // Delivered and untouched — the round stopped halfway. assert.match(tick().stdout, /REVIEW/, 'the tick hands the comment over') - const owed = cli('check', '--all') + const owed = cli('unanswered', '--all') assert.equal(owed.status, 1, 'a delivered comment with nothing said about it is outstanding') assert.match(owed.stdout, /c1/, 'it names the comment') assert.match(owed.stdout, /publish .* --close c1/, 'it names the command that settles it') @@ -89,34 +89,34 @@ try { // Replying answers it without closing it: the agent asked a question, which // is a legitimate way to end a round. assert.equal(cli('reply', '--file', page, '--comment', 'c1', '--text', 'How much bigger?').status, 0) - assert.equal(cli('check', '--all').status, 0, 'a reply hands the round back') + assert.equal(cli('unanswered', '--all').status, 0, 'a reply hands the round back') // The reviewer answers. That comment is waiting for the next tick, not for // the agent, so it must not hold the turn open. const answered = { by: 'reviewer', text: 'Twice', at: new Date().toISOString() } await post('/api/comments', { comments: [comment('c1', 'Make the hero bigger', { replies: [answered] })] }) - assert.equal(cli('check', '--all').status, 0, 'a comment awaiting delivery is not outstanding') + assert.equal(cli('unanswered', '--all').status, 0, 'a comment awaiting delivery is not outstanding') // Delivered again, and now unanswered again. assert.match(tick().stdout, /REVIEW/, 'the answer comes back round') - assert.equal(cli('check', '--all').status, 1, 'the agent owes an answer once more') + assert.equal(cli('unanswered', '--all').status, 1, 'the agent owes an answer once more') // Closing it finishes the round. assert.equal(cli('publish', '--file', page, '--close', 'c1', '--label', 'Hero doubled').status, 0) - assert.equal(cli('check', '--all').status, 0, 'closing hands the round back') + assert.equal(cli('unanswered', '--all').status, 0, 'closing hands the round back') assert.equal(gate(), null, 'the gate lets the turn end') // A review nobody is looking at is over. `--all` reads live stores only, so // the gate cannot strand a session on a round whose tab has gone. await post('/api/comments', { comments: [comment('c2', 'And centre it')] }) assert.match(tick().stdout, /REVIEW/, 'the second comment is handed over') - assert.equal(cli('check', '--all').status, 1, 'outstanding while the review is live') + assert.equal(cli('unanswered', '--all').status, 1, 'outstanding while the review is live') server.kill('SIGTERM') for (let attempt = 0; attempt < 60 && server.exitCode === null; attempt++) { await new Promise(resolve => setTimeout(resolve, 100)) } - assert.equal(cli('check', '--all').status, 0, 'a closed review owes nothing') - assert.equal(cli('check', '--file', page).status, 1, + assert.equal(cli('unanswered', '--all').status, 0, 'a closed review owes nothing') + assert.equal(cli('unanswered', '--file', page).status, 1, 'the named form still reports it, because a person asking about one review means it') console.log('round gate: ok') From b000dc425034fe0a6b7f3d636d6f5f526479462d Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 8 Aug 2026 11:37:17 +0800 Subject: [PATCH 06/19] A change to the plugin carries its own version, and merging publishes it This repo is what a user installs, so merging to main is the release: the code is live the moment it lands. The version and the changelog entry now travel in the pull request that changes the plugin, instead of in a release commit after the fact. check-version.mjs fails a pull request that touches plugins/ without raising `version` in the manifest and adding the matching CHANGELOG.md entry. Nothing downstream can catch that, because by then the code has already shipped to everyone and told no one: a host decides an update exists by comparing the version it installed against the one main declares. release.yml then tags main and publishes the GitHub release from what the tree already says, with the changelog entry as the notes. It keys on whether the version is already tagged, so it is safe to re-run and does nothing on a merge that changed no version. It creates a tag rather than pushing to a branch, so it needs no exception to the main ruleset. CI also rehearses the install a user performs, which it previously did not. --- .github/PULL_REQUEST_TEMPLATE.md | 1 + .github/scripts/check-version.mjs | 92 +++++++++++++++++++++++++++++ .github/scripts/publish-release.mjs | 59 ++++++++++++++++++ .github/workflows/ci.yml | 32 ++++++++++ .github/workflows/release.yml | 43 ++++++-------- CLAUDE.md | 78 ++++++++++++------------ CONTRIBUTING.md | 18 +++--- 7 files changed, 253 insertions(+), 70 deletions(-) create mode 100644 .github/scripts/check-version.mjs create mode 100644 .github/scripts/publish-release.mjs diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d485f7f..06498a9 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,3 +19,4 @@ drove it on. - [ ] Edited `lib/shell/` rather than a stamped region, ran `node plugins/vstack/lib/build-shell.mjs stamp`, and committed both. - [ ] Added or renamed a plugin, and updated `.claude-plugin/marketplace.json` in the same commit. - [ ] Renamed a tool, and added its former directory name to the `LEGACY` map in `lib/workdir.mjs`. +- [ ] Changed something under `plugins/`, and raised `version` in both host manifests with a matching `CHANGELOG.md` entry. Merging this publishes it. diff --git a/.github/scripts/check-version.mjs b/.github/scripts/check-version.mjs new file mode 100644 index 0000000..b5bee4b --- /dev/null +++ b/.github/scripts/check-version.mjs @@ -0,0 +1,92 @@ +#!/usr/bin/env node +/* + * check-version.mjs — "does this pull request ship what it changed?" + * + * A host decides an update exists by comparing the `version` in plugin.json on + * main against the version it installed. Everything under plugins/ reaches a + * user the moment it lands on main, so a change there that leaves the version + * alone ships to nobody: the code is live, and every installed copy still + * believes it is current. + * + * Nothing downstream can catch that. The release is already out by then, and + * the repair is another release. So it is caught here, on the pull request, + * while there is still one commit to add. + * + * Run on a pull request with BASE_SHA set to the base of the branch. + */ +import { execFileSync } from "node:child_process" +import { readFileSync } from "node:fs" + +const MANIFEST = "plugins/vstack/.claude-plugin/plugin.json" +const CHANGELOG = "CHANGELOG.md" +const SHIPPED_TO_USERS = "plugins/" +const SEMVER = /^(\d+)\.(\d+)\.(\d+)$/ + +const git = (...args) => execFileSync("git", args, { encoding: "utf8" }) + +const fail = (...lines) => { + for (const line of lines) console.error(line) + process.exit(1) +} + +const parse = (version, where) => { + const match = SEMVER.exec(version ?? "") + if (!match) fail(`${where} declares ${JSON.stringify(version)}, which is not a MAJOR.MINOR.PATCH version.`) + return match.slice(1, 4).map(Number) +} + +const isHigher = (candidate, current) => { + for (let part = 0; part < 3; part++) { + if (candidate[part] !== current[part]) return candidate[part] > current[part] + } + return false +} + +const base = process.env.BASE_SHA +if (!base) fail("BASE_SHA is not set, so there is nothing to compare this branch against.") + +const changed = git("diff", "--name-only", `${base}...HEAD`).split("\n").filter(Boolean) +const shipped = changed.filter(file => file.startsWith(SHIPPED_TO_USERS)) + +if (shipped.length === 0) { + console.log(`Nothing under ${SHIPPED_TO_USERS} changed, so this ships nothing and needs no version.`) + process.exit(0) +} + +const declared = JSON.parse(readFileSync(MANIFEST, "utf8")).version +// A branch that adds the manifest has nothing to be higher than. +let previous = null +try { + previous = JSON.parse(git("show", `${base}:${MANIFEST}`)).version +} catch { + console.log(`${MANIFEST} does not exist at the base of this branch.`) +} + +if (previous !== null && !isHigher(parse(declared, MANIFEST), parse(previous, `${MANIFEST} at the base`))) { + fail( + `${shipped.length} file(s) under ${SHIPPED_TO_USERS} changed, and every one of them reaches a user`, + `as soon as this merges. This branch declares ${declared} against ${previous} on the base, so no`, + "host will offer the update and the change ships to nobody.", + "", + "Raise `version` in BOTH host manifests and add the matching CHANGELOG.md entry:", + " plugins/vstack/.claude-plugin/plugin.json", + " plugins/vstack/.codex-plugin/plugin.json", + "", + "MAJOR for a breaking change to a skill name, an on-disk path, or a protocol.", + "MINOR for new behaviour. PATCH for a fix.", + "", + "Changed here:", + ...shipped.map(file => ` ${file}`), + ) +} + +const heading = new RegExp(`^## ${declared.replace(/\./g, "\\.")}\\b`, "m") +if (!heading.test(readFileSync(CHANGELOG, "utf8"))) { + fail( + `${CHANGELOG} has no entry for ${declared}, and that entry is published as the release notes.`, + "", + `Add a section starting "## ${declared}" above the previous release.`, + ) +} + +console.log(`Ships ${declared}, and ${CHANGELOG} says what is in it.`) diff --git a/.github/scripts/publish-release.mjs b/.github/scripts/publish-release.mjs new file mode 100644 index 0000000..bfe28f8 --- /dev/null +++ b/.github/scripts/publish-release.mjs @@ -0,0 +1,59 @@ +#!/usr/bin/env node +/* + * publish-release.mjs — tag main at the version it declares, and publish it. + * + * The plugin is distributed by the repository itself, so merging to main is + * what ships it. The tag and the GitHub release are the record of what shipped, + * written from what is already in the tree: the version in plugin.json and its + * CHANGELOG.md entry. + * + * Keyed on the tag rather than the diff, so it is safe to re-run and does not + * care how the commit reached main. A commit whose version is already tagged + * publishes nothing. + * + * Run on a push to main with GH_TOKEN set. + */ +import { execFileSync } from "node:child_process" +import { readFileSync } from "node:fs" + +const MANIFEST = "plugins/vstack/.claude-plugin/plugin.json" +const CHANGELOG = "CHANGELOG.md" + +const gh = (...args) => execFileSync("gh", args, { encoding: "utf8" }) + +const version = JSON.parse(readFileSync(MANIFEST, "utf8")).version +const tag = `v${version}` + +try { + gh("release", "view", tag, "--json", "tagName") + console.log(`${tag} is already published. Nothing to do.`) + process.exit(0) +} catch { + // No release under that tag yet, which is the case this runs for. +} + +// Everything from this version's heading up to the next one. Written by a +// person, so it is published as-is rather than regenerated from commits. +const changelog = readFileSync(CHANGELOG, "utf8") +const heading = new RegExp(`^## ${version.replace(/\./g, "\\.")}\\b.*$`, "m") +const start = changelog.search(heading) + +if (start === -1) { + console.error(`${CHANGELOG} has no entry for ${version}, so there are no notes to publish.`) + console.error("A pull request cannot merge without one, so this commit did not come through one.") + process.exit(1) +} + +const rest = changelog.slice(start) +const nextRelease = rest.indexOf("\n## ", 1) +const section = (nextRelease === -1 ? rest : rest.slice(0, nextRelease)).trim() +const notes = section.slice(section.indexOf("\n") + 1).trim() + +gh( + "release", "create", tag, + "--target", process.env.GITHUB_SHA, + "--title", tag, + "--notes", notes, +) + +console.log(`Published ${tag}.`) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0e0e35..a3f9b43 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,6 +58,18 @@ jobs: run: claude plugin validate . --strict - name: Validate the plugin run: claude plugin validate ./plugins/vstack --strict + # The path a user takes. CLAUDE_CONFIG_DIR points it at a throwaway + # directory so the local marketplace entry is never written to a real one, + # where it would shadow the published cavalry-collective. The source must + # be ./ and not . + - name: Rehearse the install + run: | + SANDBOX=$(mktemp -d) + export CLAUDE_CONFIG_DIR="$SANDBOX/.claude" + claude plugin marketplace add ./ + claude plugin install vstack@cavalry-collective + claude plugin details vstack + rm -rf "$SANDBOX" # Both hosts read a version out of their own manifest, so they can drift # apart silently and ship the same commit under two version numbers. - name: Host manifests declare the same version @@ -73,3 +85,23 @@ jobs: } console.log(`Both host manifests declare ${claude}.`) ' + + version: + name: Plugin changes ship a version + # Only a pull request has a base to compare against. A push to main has + # already been through this. + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + permissions: + contents: read + steps: + # The check reads the manifest at the base of the branch, which a shallow + # clone does not have. + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 0 + persist-credentials: false + - name: Compare against the base of the branch + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + run: node .github/scripts/check-version.mjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59b6607..2a8a232 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,32 +2,25 @@ name: Release on: push: - tags: ['v*'] - -permissions: - contents: read + branches: [main] jobs: - version-matches-tag: - name: Tag matches the manifest version + publish: + name: Tag and publish the version main declares runs-on: ubuntu-latest + # Creates a tag and a release. The `main` ruleset guards the branch, not + # tags, so nothing here needs to bypass it. + permissions: + contents: write steps: - - uses: actions/checkout@v4 - # An explicit version in plugin.json is what Claude Code compares against - # to decide an update exists. Tagging a release without bumping it leaves - # every installed copy believing it is already current. - - name: Compare the tag against plugin.json - run: | - node -e ' - const { readFileSync } = require("node:fs") - const tag = process.env.GITHUB_REF_NAME.replace(/^v/, "") - const declared = JSON.parse( - readFileSync("plugins/vstack/.claude-plugin/plugin.json", "utf8") - ).version - if (declared !== tag) { - console.error(`Tag ${process.env.GITHUB_REF_NAME} does not match plugin.json version ${declared}.`) - console.error("Bump the version in both host manifests, commit, then move the tag.") - process.exit(1) - } - console.log(`Tag and manifest agree on ${declared}.`) - ' + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + # Publishes the version already in the tree, with its CHANGELOG.md entry + # as the notes. Does nothing when that version is already tagged, which is + # every merge that did not change the plugin. + - name: Publish the release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_SHA: ${{ github.sha }} + run: node .github/scripts/publish-release.mjs diff --git a/CLAUDE.md b/CLAUDE.md index 6166d01..1d282dd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -48,7 +48,7 @@ claude plugin validate ./plugins/vstack --strict # the plugin manifest `.github/workflows/ci.yml` runs all of the above on every pull request. -CI cannot install the plugin, so rehearse that locally before a release. +CI rehearses the install, and you can run the same thing locally. `CLAUDE_CONFIG_DIR` keeps it out of the real config: without it, a local-path marketplace is written to user settings and shadows the published `cavalry-collective` until it is removed. The source must be `./`, not `.`. @@ -180,10 +180,11 @@ hosts, and `.claude-plugin/marketplace.json` repeats the Claude entry. `version` is declared, so it is what a host compares against to decide an update exists. **Pushing commits without bumping it ships nothing to anyone.** -- Bump `version` in both host manifests, and add the release to `CHANGELOG.md`, - in the release commit. -- Tag `vX.Y.Z` on the commit that lands on `main`. - `.github/workflows/release.yml` fails when the tag and the manifest disagree. +- Bump `version` in both host manifests, and add the `CHANGELOG.md` entry, in + the pull request that changes the plugin — not in a release commit afterwards. + `.github/scripts/check-version.mjs` fails the PR when either is missing. +- Never tag by hand. `.github/workflows/release.yml` tags `main` and publishes + the release from what the merge already declares. - MAJOR for a breaking change to a skill name, an on-disk path, or a protocol. MINOR for new behaviour. PATCH for a fix. - Orphaning a user's in-flight state is MAJOR, and it needs a `LEGACY` entry in @@ -193,38 +194,41 @@ exists. **Pushing commits without bumping it ships nothing to anyone.** installed before a version existed. Changing how the version is declared means changing that file. -### Cutting a release when asked - -When the user says to cut, ship, or publish a release, run this end to end. The -`main` ruleset requires a pull request, so nothing lands directly on `main`. - -1. **Decide the version.** Read the commits since the last tag, apply the semver - rule above, and tell the user the number you picked and why in one line. - Proceed on that number. Stop and ask only when the same set of commits reads - as either MINOR or MAJOR depending on how a breaking change is judged. -2. **Verify before proposing anything.** Run the tests, the shell check, both - validate commands, and the install rehearsal from *Commands*. A failure here - ends the release. Report it and fix it first. -3. **Branch.** `release/vX.Y.Z` off current `main`. -4. **Bump and record.** `version` in both host manifests, and a `CHANGELOG.md` - entry written from the merged commits, newest first, with breaking changes - called out. -5. **Open the PR.** Title `vX.Y.Z — `. The body is - the changelog entry, so it can be reused as the release notes. -6. **Watch CI.** `gh pr checks --watch`. Every check must pass. A red - check means fix it on the branch and watch again, never merge past it. -7. **Merge when green.** Squash. The user has standing approval for this merge - and for the tag and release that follow, so do not ask again for a release - they asked for. -8. **Tag `main`.** Pull the squashed commit, tag it `vX.Y.Z`, and push the tag. - The release workflow re-checks the tag against the manifest. -9. **Publish the GitHub release** with the changelog entry as its notes, then - give the user the release URL. - -Stop and report rather than working around a problem: a red check that is not -yours to fix, a ruleset that rejects the merge, or a tag that already exists. - -Nothing here is a dry run. Every step from 5 onward is public. +### Releasing + +Merging to `main` is the release: this repository is what a user installs, so +the code is live the moment it lands. The version and the changelog entry +therefore belong in the pull request that changes the plugin, and a release is +not a separate piece of work. + +When a pull request touches `plugins/`, include in the same branch: + +1. `version` raised to the same value in both host manifests, by the semver rule + above. +2. The matching `CHANGELOG.md` entry, newest first, breaking changes called out. + This is published verbatim as the release notes, so write it for a user. + +The `Plugin changes ship a version` check fails the PR without both. Nothing +downstream can catch this: a merge that leaves the version alone publishes the +code and tells nobody, and the only repair is a second release. + +After the merge, `.github/workflows/release.yml` tags `main` as `vX.Y.Z` and +publishes the GitHub release. It keys on whether that version is already tagged, +so it is safe to re-run and does nothing on a merge that changed no version. + +When the user asks to cut, ship, or publish a release, there is no release to +cut. Find out what state things are in and say so: + +- `gh release list --limit 3` and `git log --oneline origin/main -3`. A merge + that carried a version bump has already published. +- If the version on `main` is untagged, the workflow failed. `gh run list + --workflow Release --limit 3` says why. Fix the workflow. +- If nothing has changed under `plugins/` since the last release, there is + nothing to ship. Say that rather than inventing a version. + +Never tag by hand, never publish a GitHub release by hand, and never bump a +version on `main` outside a pull request. A wrong version is fixed by the next +release. ### Contributor-facing files diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index de78968..2a0737a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,7 +27,7 @@ claude plugin validate ./plugins/vstack --strict Nothing runs end to end in CI, so a green build is not a tested skill. -CI also cannot install the plugin. Rehearse that locally before a release, with `CLAUDE_CONFIG_DIR` pointed at a throwaway directory so the local-path marketplace is not written to your real settings, where it would shadow the published `cavalry-collective`: +CI rehearses the install a user performs. Run the same thing locally when you touch a manifest, with `CLAUDE_CONFIG_DIR` pointed at a throwaway directory so the local-path marketplace is not written to your real settings, where it would shadow the published `cavalry-collective`: ```bash SANDBOX=$(mktemp -d) @@ -41,19 +41,21 @@ rm -rf $SANDBOX ## Cutting a release -Both host manifests declare a `version`, and that version is what Claude Code and Codex compare against to decide an update exists. **Pushing commits without bumping it ships nothing to anyone.** +There is nothing to cut. Merging to `main` is the release, because this repository is what a user installs — the code is live for everyone as soon as it lands. -1. Branch `release/vX.Y.Z` off `main`. -2. Bump `version` to the same value in `plugins/vstack/.claude-plugin/plugin.json` and `plugins/vstack/.codex-plugin/plugin.json`. -3. Add the release to `CHANGELOG.md`, newest first. -4. Open a PR. `main` takes no direct pushes, and a release is not an exception. -5. Merge when CI is green, then tag `vX.Y.Z` on the squashed commit on `main`. The release workflow fails when the tag and the manifest disagree. -6. Publish the GitHub release with the changelog entry as its notes. +So the version travels with the change rather than following it. A pull request that touches `plugins/` must also carry: + +1. `version` raised to the same value in `plugins/vstack/.claude-plugin/plugin.json` and `plugins/vstack/.codex-plugin/plugin.json`. +2. The matching entry in `CHANGELOG.md`, newest first. It is published verbatim as the release notes, so write it for a user rather than for a reviewer. + +CI fails the PR when either is missing. Nothing downstream can catch it: a merge that leaves the version alone publishes your code and tells nobody, because a host decides an update exists by comparing the version it installed against the one `main` declares. The only repair is a second release. Version to semantic versioning: MAJOR for a breaking change to a skill name, an on-disk path, or a protocol; MINOR for new behaviour; PATCH for a fix. Orphaning a user's in-flight state is a MAJOR change, and it needs a `LEGACY` entry in `lib/workdir.mjs` rather than a migration. +Once it merges, `.github/workflows/release.yml` tags `main` as `vX.Y.Z` and publishes the GitHub release with your changelog entry as its notes. Do not tag by hand and do not write a release by hand. A merge that changed no version publishes nothing, which is what a docs or CI change should do. + ## Reporting problems - A bug or an unclear skill: open an issue. From 4b6e0fe01535d455847165b0bff0a2618a2a271c Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 8 Aug 2026 11:43:19 +0800 Subject: [PATCH 07/19] /ship drives a branch to green and merges it The procedure lives in CLAUDE.md, which already owns what a release is. The command points at it rather than restating it, so the two cannot drift. .claude/commands/ is carved out of the rule against installing anything into this repo. It holds tooling for working on the repo, which ships to nobody and mirrors no part of the plugin. --- .claude/commands/ship.md | 13 ++++++++ CLAUDE.md | 64 +++++++++++++++++++++++++++++++++------- 2 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 .claude/commands/ship.md diff --git a/.claude/commands/ship.md b/.claude/commands/ship.md new file mode 100644 index 0000000..bbcc2f7 --- /dev/null +++ b/.claude/commands/ship.md @@ -0,0 +1,13 @@ +--- +description: Open a pull request for the current branch, drive it green, and merge it +argument-hint: [what the change is, if the branch name does not say] +--- + +Ship the work on the current branch by following **Shipping a change when +asked** in `CLAUDE.md`. That section owns the procedure; this command only +invokes it. + +$ARGUMENTS + +Before you start, report in one line: the branch, whether anything under +`plugins/` changed, and — if it did — the version you are shipping and why. diff --git a/CLAUDE.md b/CLAUDE.md index 1d282dd..c6c9e53 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -17,6 +17,11 @@ also ships a Codex manifest (`.codex-plugin/`) and a Grok host adapter host that discovers skills from a project directory gets instructions in its host adapter, not a checked-in skill directory that then has to be kept in sync. +`.claude/commands/` is the one exception, and it holds maintainer tooling only: +commands for working *on* this repo, which ship to nobody and mirror no part of +the plugin. `/ship` is the only one. A command there states no rule of its own — +it points at the section of this file that owns the rule. + Plain Node ≥ 18 ES modules, standard library only. There is no package.json, build step, bundler, or linter. (`node_modules/` at the root appears only when recording the README demo, which installs playwright-core.) @@ -216,20 +221,59 @@ After the merge, `.github/workflows/release.yml` tags `main` as `vX.Y.Z` and publishes the GitHub release. It keys on whether that version is already tagged, so it is safe to re-run and does nothing on a merge that changed no version. -When the user asks to cut, ship, or publish a release, there is no release to -cut. Find out what state things are in and say so: - -- `gh release list --limit 3` and `git log --oneline origin/main -3`. A merge - that carried a version bump has already published. -- If the version on `main` is untagged, the workflow failed. `gh run list - --workflow Release --limit 3` says why. Fix the workflow. -- If nothing has changed under `plugins/` since the last release, there is - nothing to ship. Say that rather than inventing a version. - Never tag by hand, never publish a GitHub release by hand, and never bump a version on `main` outside a pull request. A wrong version is fixed by the next release. +When the user asks about a release that has already happened, read the state +rather than doing anything. `gh release list --limit 3` and `git log --oneline +origin/main -3` say whether it published. A version on `main` with no tag means +the Release workflow failed, and `gh run list --workflow Release --limit 3` says +why. Nothing changed under `plugins/` means there is nothing to ship, which is an +answer rather than a reason to invent a version. + +### Shipping a change when asked + +`/ship` runs this. It is also what to do whenever the user says to ship, land, +release, or merge the work on the current branch. The user asking for it is +standing approval for the pull request and the merge, so do not ask again. + +Everything from step 2 is public. + +1. **Check the branch carries what it must.** Run the tests, the shell check and + both validate commands locally first — a red check you could have caught is + wasted round-trips. If anything under `plugins/` changed, the version and the + `CHANGELOG.md` entry go in now, per *Releasing* above. Say which version you + picked and why, in one line. +2. **Open the pull request.** Branch off `main` if the work is not already on + one. The title is the sentence a reader sees in `git log`; the body says what + changed and how it was driven end to end. +3. **Watch both channels until they settle.** + - `gh pr checks --watch`. Every required check must pass. + - `gh pr view --comments` and `gh api + repos/Cavalry-Collective/visual-stack/pulls//comments` for review + threads. SonarQube and the review bots comment here rather than only failing + a check, so a green check list is not the whole picture. +4. **Fix on the branch and push.** Then watch again. A security finding is fixed, + never silenced or ignored. Answer a review comment that you are not acting on, + rather than leaving it unanswered. +5. **Merge when everything is green.** Squash. +6. **Confirm what it published.** A version bump tags `main` and publishes the + release within about a minute. Give the user the release URL. A merge that + carried no version bump publishes nothing, which is correct — say so. + +Stop and report instead of working around a problem: + +- The same check fails twice with the same error after your fix. Name what you + tried. +- A failure that is not yours: a service outage, a rate limit, a check that + passes on `main`. +- A review comment that asks for a decision the user has not made. +- The ruleset rejects the merge. + +Never merge with `--admin`, never bypass a ruleset, and never turn a check off to +get past it. + ### Contributor-facing files `CONTRIBUTING.md`, `.github/PULL_REQUEST_TEMPLATE.md`, and this file state the From e76d6ad60f529b658293127d22ab2bbb52db40ed Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sat, 8 Aug 2026 12:22:58 +0800 Subject: [PATCH 08/19] The review loop is driven end to end, under both hosts, on every pull request The Gherkin suite in `e2e/` runs the real review server and CLI with a mock agent in the agent's seat, so the whole round-trip is exercised without a model or an API key. The `@browser` scenarios drive the workspace in Chromium. It is the one directory with a `package.json`, kept outside `plugins/` so the plugin stays dependency-free. CI runs it as a matrix over the Claude and Codex profiles and publishes each run's summary. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 44 + CLAUDE.md | 13 + e2e/README.md | 48 + e2e/cucumber.mjs | 8 + e2e/features/browser.feature | 47 + e2e/features/clearing.feature | 42 + e2e/features/closing.feature | 36 + e2e/features/edge-cases.feature | 52 + e2e/features/host-matrix.feature | 15 + e2e/features/linking.feature | 16 + e2e/features/live.feature | 30 + e2e/features/sending.feature | 37 + e2e/package-lock.json | 1811 ++++++++++++++++++++++++++++++ e2e/package.json | 13 + e2e/steps/browser.steps.mjs | 110 ++ e2e/steps/linking.steps.mjs | 44 + e2e/steps/review.steps.mjs | 279 +++++ e2e/support/browser.mjs | 23 + e2e/support/mock-agent.mjs | 31 + e2e/support/world.mjs | 190 ++++ e2e/test-plan.html | 330 ++++++ 21 files changed, 3219 insertions(+) create mode 100644 e2e/README.md create mode 100644 e2e/cucumber.mjs create mode 100644 e2e/features/browser.feature create mode 100644 e2e/features/clearing.feature create mode 100644 e2e/features/closing.feature create mode 100644 e2e/features/edge-cases.feature create mode 100644 e2e/features/host-matrix.feature create mode 100644 e2e/features/linking.feature create mode 100644 e2e/features/live.feature create mode 100644 e2e/features/sending.feature create mode 100644 e2e/package-lock.json create mode 100644 e2e/package.json create mode 100644 e2e/steps/browser.steps.mjs create mode 100644 e2e/steps/linking.steps.mjs create mode 100644 e2e/steps/review.steps.mjs create mode 100644 e2e/support/browser.mjs create mode 100644 e2e/support/mock-agent.mjs create mode 100644 e2e/support/world.mjs create mode 100644 e2e/test-plan.html diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f1673a..b13cfad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,50 @@ jobs: - name: Round gate run: node plugins/vstack/skills/review/tests/round-gate.mjs + e2e: + name: E2E (${{ matrix.host }}) + runs-on: ubuntu-latest + permissions: + contents: read + strategy: + fail-fast: false + matrix: + host: [claude, codex] + defaults: + run: + working-directory: e2e + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: '22' + cache: npm + cache-dependency-path: e2e/package-lock.json + - name: Install the suite + run: npm ci + # The @browser scenarios drive the workspace in a real Chromium. + - name: Install Chromium + run: npx playwright install --with-deps chromium + # The Gherkin features in e2e/features/ drive the real review server and + # CLI; the host decides which profile the workspace is stamped with. + - name: Review loop end to end + env: + VSTACK_HOST: ${{ matrix.host }} + run: npx cucumber-js --format progress --format summary:cucumber-summary.txt + - name: Publish the result to the run summary + if: always() + env: + HOST: ${{ matrix.host }} + run: | + { + echo "### E2E ($HOST)" + echo '```' + cat cucumber-summary.txt 2>/dev/null || echo 'The suite did not produce a summary.' + echo '```' + } >> "$GITHUB_STEP_SUMMARY" + shell: name: Stamped shell is current runs-on: ubuntu-latest diff --git a/CLAUDE.md b/CLAUDE.md index 53ed711..a24b28a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,6 +32,19 @@ node plugins/vstack/skills/review/tests/workdir.mjs # .vstack/local w node plugins/vstack/skills/review/tests/round-gate.mjs # `unanswered` and the Stop hook that runs it ``` +The Gherkin end-to-end suite lives in `e2e/` — the one directory with a +`package.json`, kept outside `plugins/` so the plugin itself stays +dependency-free. It drives the real review server and CLI; a mock agent +(`e2e/support/mock-agent.mjs`) plays the agent role, so no model or API key is +involved. CI runs it under both hosts. + +```bash +cd e2e && npm ci +npx playwright install chromium # once, for the @browser scenarios +npx cucumber-js # VSTACK_HOST=claude (default) +VSTACK_HOST=codex npx cucumber-js # the same suite under the Codex profile +``` + The shared UI shell is stamped into pages, not linked (see below): ```bash diff --git a/e2e/README.md b/e2e/README.md new file mode 100644 index 0000000..7ef195f --- /dev/null +++ b/e2e/README.md @@ -0,0 +1,48 @@ +# End-to-end suite + +Gherkin scenarios that drive the review loop end to end: the real +`review-server.mjs` and its CLI, with reviewer actions going through the same +HTTP API the workspace uses. + +No model is involved. The agent role is played by `support/mock-agent.mjs`, +which runs the same CLI commands a real session would (`watch`, `publish`, +`reply`, `unanswered`) — the protocol never sees who is typing, so the mock is +a complete stand-in for Claude or Codex. Each scenario gets its own temp +directory and port. The `@browser` scenarios additionally drive the workspace +UI in a headless Chromium via Playwright. + +## Run it + +```bash +npm ci +npx playwright install chromium # once, for the @browser scenarios +npx cucumber-js # VSTACK_HOST=claude (default) +VSTACK_HOST=codex npx cucumber-js # same suite under the Codex profile +``` + +CI runs both hosts on every pull request (`E2E (claude)` and `E2E (codex)` +checks), with a result summary on the run page. + +## Tags + +| Tag | Meaning | +| --- | --- | +| `@round1` | Drives the server API and CLI headlessly. Runs by default. | +| `@browser` | Drives the workspace UI in Chromium via Playwright. Runs by default. | +| `@agent` | Puts a real model session behind the loop; costs money, excluded by default. | + +The defaults are set in `cucumber.mjs`. + +## Layout + +| Path | Role | +| --- | --- | +| `features/*.feature` | The scenarios, one file per feature | +| `steps/review.steps.mjs` | Step definitions for the protocol scenarios | +| `steps/browser.steps.mjs` | Step definitions for the `@browser` scenarios | +| `support/world.mjs` | Per-scenario server, temp dir, and helpers | +| `support/mock-agent.mjs` | The agent role, as CLI calls | +| `support/browser.mjs` | Chromium lifecycle for `@browser` scenarios | + +This is the only directory in the repo with a `package.json`. It stays outside +`plugins/` so the plugin ships without dependencies. diff --git a/e2e/cucumber.mjs b/e2e/cucumber.mjs new file mode 100644 index 0000000..5ac7032 --- /dev/null +++ b/e2e/cucumber.mjs @@ -0,0 +1,8 @@ +export default { + import: ['support/**/*.mjs', 'steps/**/*.mjs'], + // @agent spends money on a real model session, so it runs only when asked + // for by tag. @browser scenarios run by default and need Chromium once: + // npx playwright install chromium + tags: 'not @agent', + format: ['progress'], +} diff --git a/e2e/features/browser.feature b/e2e/features/browser.feature new file mode 100644 index 0000000..98e1a64 --- /dev/null +++ b/e2e/features/browser.feature @@ -0,0 +1,47 @@ +Feature: The workspace in a real browser + Playwright drives the same workspace a reviewer uses: the pin a click drops, + the on-canvas composer, View mode hiding the marks, Send handing the round + over, and the confirm dialog behind Clear all. + + Background: + Given a page is under review + And the reviewer opens the workspace + + @browser + Scenario: B1 — the workspace frames the page under review + Then the tab is titled for the review of "Review e2e page" + And the framed page shows the heading "Todo" + And the send button is labelled for the host + + @browser + Scenario: B2 — a click drops a pin and Enter saves the comment + When the reviewer clicks the page and writes "Make it pop" + Then a pin marks the comment on the canvas + And the comment "Make it pop" is a draft on the review + + @browser + Scenario: B3 — an empty note is discarded on dismiss + When the reviewer clicks the page and dismisses the empty note + Then the canvas shows no pins + And the review has no comments on disk + + @browser + Scenario: B4 — View mode hides every annotation + When the reviewer clicks the page and writes "Make it pop" + And the reviewer switches to View + Then the canvas shows no pins + + @browser + Scenario: B5 — Send hands the round to the agent + When the reviewer clicks the page and writes "Make it pop" + And the reviewer presses Send + Then the comment "Make it pop" is queued, not delivered + When the agent takes delivery + Then the delivery names 1 open comment, 1 new + + @browser + Scenario: B6 — Clear all sits behind a confirm + When the reviewer clicks the page and writes "Make it pop" + And the reviewer presses Send + And the reviewer clears all comments from the workspace + Then the workspace shows no comments diff --git a/e2e/features/clearing.feature b/e2e/features/clearing.feature new file mode 100644 index 0000000..7d4313e --- /dev/null +++ b/e2e/features/clearing.feature @@ -0,0 +1,42 @@ +Feature: Page review — clearing + Three distinct acts: Clear all takes every comment off the list, Clear + history removes past versions and keeps the present, and a hard reset + restarts the review at v1 without undoing the agent's edits. + + Background: + Given a page is under review + + @round1 + Scenario: S7 — Clear all empties the list without touching versions + Given the reviewer has sent a comment "C" + And the agent has taken delivery + And the agent closes "C" and publishes "C done" + And the reviewer has sent a comment "A" + And the agent has taken delivery + And the reviewer has sent a comment "B" + When the reviewer clears all comments + Then the workspace shows no comments + And no record remains of "B" + And the record of "A" is closed and marked dismissed + And the version history is untouched + And the agent can still close "A" + + @round1 + Scenario: S8 — Clear history deletes past versions and keeps the present + Given the review has reached version 3 + And the reviewer has sent a comment "A" + When the reviewer clears the history + Then only version 3 remains on the timeline + And the review is still at version 3 + And the comment "A" is still on the review + + @round1 + Scenario: S9 — a hard reset restarts the review at v1 + Given the reviewer has sent a comment "A" + And the agent has taken delivery + And the agent edits the page + And the agent closes "A" and publishes "Edited" + When the reviewer hard-resets the review + Then the review starts again at version 1 + And the workspace shows no comments + And the page keeps the agent's edits diff --git a/e2e/features/closing.feature b/e2e/features/closing.feature new file mode 100644 index 0000000..c69a1ef --- /dev/null +++ b/e2e/features/closing.feature @@ -0,0 +1,36 @@ +Feature: Page review — closing, versions, threads + Only the agent closes a comment. A publish freezes the page as the next + version; a reply keeps the conversation going without changing state, and a + reviewer reply to a closed comment reopens it. + + Background: + Given a page is under review + + @round1 + Scenario: S4 — publish closes the comment and freezes the next version + Given the reviewer has sent a comment "Make the title bigger" + And the agent has taken delivery + When the agent edits the page + And the agent closes "Make the title bigger" and publishes "Bigger title" + Then the review is at version 2 + And version 2 is a frozen copy of the page labelled "Bigger title" + And the comment "Make the title bigger" is closed + + @round1 + Scenario: S5 — an agent reply asks a question and keeps the comment open + Given the reviewer has sent a comment "Sort the list" + And the agent has taken delivery + When the agent replies "By date, or by name?" to "Sort the list" + Then the thread on "Sort the list" has an agent reply "By date, or by name?" + And the comment "Sort the list" is open + And nothing is left unanswered + + @round1 + Scenario: S6 — a reviewer reply to a closed comment reopens it + Given the reviewer has sent a comment "A" + And the agent has taken delivery + And the agent closes "A" and publishes "Done" + When the reviewer replies "Not quite — bolder too" to "A" + Then the comment "A" is open + When the agent takes delivery + Then the brief carries the reply "Not quite — bolder too" diff --git a/e2e/features/edge-cases.feature b/e2e/features/edge-cases.feature new file mode 100644 index 0000000..21cdaa8 --- /dev/null +++ b/e2e/features/edge-cases.feature @@ -0,0 +1,52 @@ +Feature: Edge cases + The liveness rules: nothing the reviewer does can stop the agent finishing, + a stranded round can be requeued only once nothing is listening, approval + ends the review deliberately, and a retried close is safe. + + Background: + Given a page is under review + + @round1 + Scenario: S13 — withdrawing a delivered comment never blocks the agent + Given the reviewer has sent a comment "A" + And the agent has taken delivery + When the reviewer withdraws "A" + Then the workspace shows no comments + And the record of "A" is closed and marked dismissed + And the agent can still close "A" + + @round1 + Scenario: S14a — requeue is refused while the agent is listening + Given the reviewer has sent a comment "A" + And the agent has taken delivery + And the agent's watching heartbeat is fresh + When the workspace asks to requeue + Then the server refuses the requeue + And the comment "A" has been sent and delivered + + @round1 + Scenario: S14b — requeue rescues a dead session's round + Given the reviewer has sent a comment "A" + And the agent has taken delivery + And nothing is listening + When the workspace asks to requeue + Then the comment "A" is queued, not delivered + When the agent takes delivery + Then the delivery names 1 open comment, 1 new + + @round1 + Scenario: S15 — approve ends the review deliberately + Given the reviewer has sent comments "A" and "B" + And the agent has taken delivery + When the reviewer approves the design expecting 2 open comments + Then the approval records 2 open comments + And the server exits on its own + + @round1 + Scenario: S16 — closing twice is a no-op + Given the reviewer has sent a comment "A" + And the agent has taken delivery + And the agent closes "A" and publishes "Done" + When the agent closes "A" again + Then the command succeeds + And the review is still at version 2 diff --git a/e2e/features/host-matrix.feature b/e2e/features/host-matrix.feature new file mode 100644 index 0000000..7ed13d7 --- /dev/null +++ b/e2e/features/host-matrix.feature @@ -0,0 +1,15 @@ +Feature: Host matrix — Claude and Codex + The protocol is host-independent; the host selects a profile that the server + stamps into the workspace. CI runs the whole suite under VSTACK_HOST=claude + and VSTACK_HOST=codex; these scenarios pin the differences that remain. + + @round1 + Scenario Outline: the workspace is stamped with the host profile + Given a page is under review with host "" + Then the workspace injects the "" profile named "" + And the injected share capability is "" + + Examples: + | host | name | share | + | claude | Claude | artifact | + | codex | Codex | copy | diff --git a/e2e/features/linking.feature b/e2e/features/linking.feature new file mode 100644 index 0000000..97cfbd9 --- /dev/null +++ b/e2e/features/linking.feature @@ -0,0 +1,16 @@ +Feature: The stream watcher links a session + How a real agent session stays wired: it arms `watch --all --stream`, answers + the HANDSHAKE with `ack`, and from then on rounds arrive as REVIEW events + while its heartbeat proves to the server that someone is listening. + + @round1 + Scenario: S17 — the stream watcher handshakes, links, and receives the round + Given a page is under review + When the agent arms the stream watcher + Then the watcher asks for a handshake + When the agent answers the handshake + Then the watcher reports LINKED + And the agent's presence is heartbeated + When the reviewer sends a comment "A" + Then the watcher receives a REVIEW event + And the workspace cannot requeue the round while the watcher lives diff --git a/e2e/features/live.feature b/e2e/features/live.feature new file mode 100644 index 0000000..b4930cb --- /dev/null +++ b/e2e/features/live.feature @@ -0,0 +1,30 @@ +Feature: Live app review + The same loop pointed at a running app. Comments carry the route they were + made on, a publish is a marker rather than a file snapshot, and nothing the + review does touches the app. + + Background: + Given an app is running and under live review + + @round1 + Scenario: S10 — a live comment carries the route it was made on + When the reviewer sends a comment "Tighten this" on route "/settings" + And the agent takes delivery + Then the delivery names 1 open comment, 1 new + And the brief names the route "/settings" on "Tighten this" + + @round1 + Scenario: S11 — a live publish is a marker, not a file snapshot + Given the reviewer has sent a comment "A" on route "/" + And the agent has taken delivery + When the agent closes "A" and publishes "Fixed spacing" + Then the comment "A" is closed + And no version file was frozen + + @round1 + Scenario: S12 — a hard reset in a live review deletes comments only + Given the reviewer has sent a comment "A" on route "/" + And the agent has taken delivery + When the reviewer hard-resets the review + Then the workspace shows no comments + And the app is untouched diff --git a/e2e/features/sending.feature b/e2e/features/sending.feature new file mode 100644 index 0000000..7a0c607 --- /dev/null +++ b/e2e/features/sending.feature @@ -0,0 +1,37 @@ +Feature: Page review — sending comments + A sent comment reaches the agent immediately when no round is in flight, + and queues behind the round when one is. Whatever the agent does not close + comes back on the next delivery. + + Background: + Given a page is under review + + @round1 + Scenario: S1 — send with no round in flight is delivered immediately + When the reviewer sends a comment "Make the title bigger" + And the agent takes delivery + Then the delivery names 1 open comment, 1 new + And the brief lists "Make the title bigger" as new + And the comment "Make the title bigger" has been sent and delivered + + @round1 + Scenario: S2 — a comment sent mid-round is queued and picked up after the round + Given the reviewer has sent a comment "A" + And the agent has taken delivery + When the reviewer sends a comment "B" + Then the comment "B" is queued, not delivered + When the agent closes "A" and publishes "Round one done" + And the agent takes delivery + Then the delivery names 1 open comment, 1 new + And the brief lists "B" as new + + @round1 + Scenario: S3 — whatever is not closed comes back + Given the reviewer has sent comments "A" and "B" + And the agent has taken delivery + When the agent closes "A" and publishes "Only A" + And the reviewer sends a comment "C" + And the agent takes delivery + Then the delivery names 2 open comments, 1 new + And the brief lists "B" as not new + And the brief lists "C" as new diff --git a/e2e/package-lock.json b/e2e/package-lock.json new file mode 100644 index 0000000..bbdc9ef --- /dev/null +++ b/e2e/package-lock.json @@ -0,0 +1,1811 @@ +{ + "name": "vstack-e2e", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vstack-e2e", + "devDependencies": { + "@cucumber/cucumber": "^11.2.0", + "playwright": "^1.50.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cucumber/ci-environment": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/ci-environment/-/ci-environment-10.0.1.tgz", + "integrity": "sha512-/+ooDMPtKSmvcPMDYnMZt4LuoipfFfHaYspStI4shqw8FyKcfQAmekz6G+QKWjQQrvM+7Hkljwx58MEwPCwwzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cucumber/cucumber": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-11.3.0.tgz", + "integrity": "sha512-1YGsoAzRfDyVOnRMTSZP/EcFsOBElOKa2r+5nin0DJAeK+Mp0mzjcmSllMgApGtck7Ji87wwy3kFONfHUHMn4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/ci-environment": "10.0.1", + "@cucumber/cucumber-expressions": "18.0.1", + "@cucumber/gherkin": "30.0.4", + "@cucumber/gherkin-streams": "5.0.1", + "@cucumber/gherkin-utils": "9.2.0", + "@cucumber/html-formatter": "21.10.1", + "@cucumber/junit-xml-formatter": "0.7.1", + "@cucumber/message-streams": "4.0.1", + "@cucumber/messages": "27.2.0", + "@cucumber/tag-expressions": "6.1.2", + "assertion-error-formatter": "^3.0.0", + "capital-case": "^1.0.4", + "chalk": "^4.1.2", + "cli-table3": "0.6.5", + "commander": "^10.0.0", + "debug": "^4.3.4", + "error-stack-parser": "^2.1.4", + "figures": "^3.2.0", + "glob": "^10.3.10", + "has-ansi": "^4.0.1", + "indent-string": "^4.0.0", + "is-installed-globally": "^0.4.0", + "is-stream": "^2.0.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash.merge": "^4.6.2", + "lodash.mergewith": "^4.6.2", + "luxon": "3.6.1", + "mime": "^3.0.0", + "mkdirp": "^2.1.5", + "mz": "^2.7.0", + "progress": "^2.0.3", + "read-package-up": "^11.0.0", + "semver": "7.7.1", + "string-argv": "0.3.1", + "supports-color": "^8.1.1", + "type-fest": "^4.41.0", + "util-arity": "^1.1.0", + "yaml": "^2.2.2", + "yup": "1.6.1" + }, + "bin": { + "cucumber-js": "bin/cucumber.js" + }, + "engines": { + "node": "18 || 20 || 22 || >=23" + }, + "funding": { + "url": "https://opencollective.com/cucumber" + } + }, + "node_modules/@cucumber/cucumber-expressions": { + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-18.0.1.tgz", + "integrity": "sha512-NSid6bI+7UlgMywl5octojY5NXnxR9uq+JisjOrO52VbFsQM6gTWuQFE8syI10KnIBEdPzuEUSVEeZ0VFzRnZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regexp-match-indices": "1.0.2" + } + }, + "node_modules/@cucumber/gherkin": { + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-30.0.4.tgz", + "integrity": "sha512-pb7lmAJqweZRADTTsgnC3F5zbTh3nwOB1M83Q9ZPbUKMb3P76PzK6cTcPTJBHWy3l7isbigIv+BkDjaca6C8/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/messages": ">=19.1.4 <=26" + } + }, + "node_modules/@cucumber/gherkin-streams": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-streams/-/gherkin-streams-5.0.1.tgz", + "integrity": "sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "9.1.0", + "source-map-support": "0.5.21" + }, + "bin": { + "gherkin-javascript": "bin/gherkin" + }, + "peerDependencies": { + "@cucumber/gherkin": ">=22.0.0", + "@cucumber/message-streams": ">=4.0.0", + "@cucumber/messages": ">=17.1.1" + } + }, + "node_modules/@cucumber/gherkin-streams/node_modules/commander": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.1.0.tgz", + "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@cucumber/gherkin-utils": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-utils/-/gherkin-utils-9.2.0.tgz", + "integrity": "sha512-3nmRbG1bUAZP3fAaUBNmqWO0z0OSkykZZotfLjyhc8KWwDSOrOmMJlBTd474lpA8EWh4JFLAX3iXgynBqBvKzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/gherkin": "^31.0.0", + "@cucumber/messages": "^27.0.0", + "@teppeis/multimaps": "3.0.0", + "commander": "13.1.0", + "source-map-support": "^0.5.21" + }, + "bin": { + "gherkin-utils": "bin/gherkin-utils" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/gherkin": { + "version": "31.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-31.0.0.tgz", + "integrity": "sha512-wlZfdPif7JpBWJdqvHk1Mkr21L5vl4EfxVUOS4JinWGf3FLRV6IKUekBv5bb5VX79fkDcfDvESzcQ8WQc07Wgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/messages": ">=19.1.4 <=26" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/gherkin/node_modules/@cucumber/messages": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-26.0.1.tgz", + "integrity": "sha512-DIxSg+ZGariumO+Lq6bn4kOUIUET83A4umrnWmidjGFl8XxkBieUZtsmNbLYgH/gnsmP07EfxxdTr0hOchV1Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/uuid": "10.0.0", + "class-transformer": "0.5.1", + "reflect-metadata": "0.2.2", + "uuid": "10.0.0" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cucumber/gherkin-utils/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cucumber/gherkin/node_modules/@cucumber/messages": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-26.0.1.tgz", + "integrity": "sha512-DIxSg+ZGariumO+Lq6bn4kOUIUET83A4umrnWmidjGFl8XxkBieUZtsmNbLYgH/gnsmP07EfxxdTr0hOchV1Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/uuid": "10.0.0", + "class-transformer": "0.5.1", + "reflect-metadata": "0.2.2", + "uuid": "10.0.0" + } + }, + "node_modules/@cucumber/gherkin/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@cucumber/html-formatter": { + "version": "21.10.1", + "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-21.10.1.tgz", + "integrity": "sha512-isaaNMNnBYThsvaHy7i+9kkk9V3+rhgdkt0pd6TCY6zY1CSRZQ7tG6ST9pYyRaECyfbCeF7UGH0KpNEnh6UNvQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@cucumber/messages": ">=18" + } + }, + "node_modules/@cucumber/junit-xml-formatter": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@cucumber/junit-xml-formatter/-/junit-xml-formatter-0.7.1.tgz", + "integrity": "sha512-AzhX+xFE/3zfoYeqkT7DNq68wAQfBcx4Dk9qS/ocXM2v5tBv6eFQ+w8zaSfsktCjYzu4oYRH/jh4USD1CYHfaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cucumber/query": "^13.0.2", + "@teppeis/multimaps": "^3.0.0", + "luxon": "^3.5.0", + "xmlbuilder": "^15.1.1" + }, + "peerDependencies": { + "@cucumber/messages": "*" + } + }, + "node_modules/@cucumber/message-streams": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/message-streams/-/message-streams-4.0.1.tgz", + "integrity": "sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@cucumber/messages": ">=17.1.1" + } + }, + "node_modules/@cucumber/messages": { + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-27.2.0.tgz", + "integrity": "sha512-f2o/HqKHgsqzFLdq6fAhfG1FNOQPdBdyMGpKwhb7hZqg0yZtx9BVqkTyuoNk83Fcvk3wjMVfouFXXHNEk4nddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/uuid": "10.0.0", + "class-transformer": "0.5.1", + "reflect-metadata": "0.2.2", + "uuid": "11.0.5" + } + }, + "node_modules/@cucumber/query": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/@cucumber/query/-/query-13.6.0.tgz", + "integrity": "sha512-tiDneuD5MoWsJ9VKPBmQok31mSX9Ybl+U4wqDoXeZgsXHDURqzM3rnpWVV3bC34y9W6vuFxrlwF/m7HdOxwqRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@teppeis/multimaps": "3.0.0", + "lodash.sortby": "^4.7.0" + }, + "peerDependencies": { + "@cucumber/messages": "*" + } + }, + "node_modules/@cucumber/tag-expressions": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-6.1.2.tgz", + "integrity": "sha512-xa3pER+ntZhGCxRXSguDTKEHTZpUUsp+RzTRNnit+vi5cqnk6abLdSLg5i3HZXU3c74nQ8afQC6IT507EN74oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@teppeis/multimaps": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-3.0.0.tgz", + "integrity": "sha512-ID7fosbc50TbT0MK0EG12O+gAP3W3Aa/Pz4DaTtQtEvlc9Odaqi0de+xuZ7Li2GtK4HzEX7IuRWS/JmZLksR3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error-formatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", + "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff": "^4.0.1", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-ansi": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-4.0.1.tgz", + "integrity": "sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/knuth-shuffle-seeded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "seed-random": "~2.2.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regexp-match-indices": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz", + "integrity": "sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "regexp-tree": "^0.1.11" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/util-arity": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yup": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", + "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/e2e/package.json b/e2e/package.json new file mode 100644 index 0000000..e1f167d --- /dev/null +++ b/e2e/package.json @@ -0,0 +1,13 @@ +{ + "name": "vstack-e2e", + "private": true, + "type": "module", + "description": "End-to-end suite for the review loop, driven through the real server API and CLI", + "scripts": { + "test": "cucumber-js" + }, + "devDependencies": { + "@cucumber/cucumber": "^11.2.0", + "playwright": "^1.50.0" + } +} diff --git a/e2e/steps/browser.steps.mjs b/e2e/steps/browser.steps.mjs new file mode 100644 index 0000000..19a6464 --- /dev/null +++ b/e2e/steps/browser.steps.mjs @@ -0,0 +1,110 @@ +import { Then, When } from '@cucumber/cucumber' +import assert from 'node:assert/strict' + +const HOST_NAMES = { claude: 'Claude', codex: 'Codex' } + +/** Poll an assertion until it holds — the library-mode stand-in for test-runner expect. */ +async function eventually (check, what, timeout = 5000) { + const start = Date.now() + let lastError + while (Date.now() - start < timeout) { + try { return await check() } catch (error) { lastError = error } + await new Promise(resolve => setTimeout(resolve, 100)) + } + throw new Error(`${what}\n${lastError}`) +} + +/** Click the canvas over the page's heading. The canvas is CSS-scaled, so the + click goes through the mouse at the overlay's on-screen box, not through an + element-relative position that a transform would misplace. */ +async function clickCanvas (world) { + const overlay = world.browserPage.locator('#overlay') + await overlay.waitFor() + const box = await overlay.boundingBox() + await world.browserPage.mouse.click(box.x + box.width / 8, box.y + 30) +} + +When('the reviewer opens the workspace', async function () { + await this.browserPage.goto(this.origin + this.base + '/') + await this.browserPage.locator('#frame').waitFor() +}) + +Then('the tab is titled for the review of {string}', async function (name) { + await eventually(async () => { + const title = await this.browserPage.title() + assert.ok(title.includes(`${name} — Review`), `tab says "${title}"`) + }, `the tab is titled for ${name}`) +}) + +Then('the framed page shows the heading {string}', async function (heading) { + const framed = this.browserPage.frameLocator('#frame').locator('#title') + await framed.waitFor() + assert.equal((await framed.textContent()).trim(), heading) +}) + +Then('the send button is labelled for the host', async function () { + const label = await this.browserPage.locator('#btnSend').textContent() + assert.ok(label.includes(HOST_NAMES[this.hostId]), + `"${label}" names the ${this.hostId} profile`) +}) + +When('the reviewer clicks the page and writes {string}', async function (note) { + await clickCanvas(this) + const editor = this.browserPage.locator('#composer textarea.cnote') + await editor.waitFor() + await editor.fill(note) + await editor.press('Enter') + await eventually(() => { this.byNote(note) }, 'the comment reaches the server') +}) + +When('the reviewer clicks the page and dismisses the empty note', async function () { + await clickCanvas(this) + await this.browserPage.locator('#composer textarea.cnote').waitFor() + await this.browserPage.keyboard.press('Escape') +}) + +Then('a pin marks the comment on the canvas', async function () { + await this.browserPage.locator('#overlay .mark').first().waitFor() +}) + +Then('the canvas shows no pins', async function () { + await eventually(async () => { + const marks = this.browserPage.locator('#overlay .mark') + for (let i = 0; i < await marks.count(); i++) { + assert.equal(await marks.nth(i).isVisible(), false, 'a mark is still visible') + } + }, 'every pin is off the canvas') +}) + +Then('the comment {string} is a draft on the review', function (note) { + const comment = this.byNote(note) + assert.equal(comment.sentAt, null, 'still being written, not sent') +}) + +Then('the review has no comments on disk', function () { + const withWords = this.stored().filter(comment => String(comment.note || '').trim()) + assert.deepEqual(withWords, []) +}) + +When('the reviewer switches to View', async function () { + await this.browserPage.locator('#modeSwitch button', { hasText: 'View' }).click() +}) + +When('the reviewer presses Send', async function () { + const note = [...this.ids.keys()].at(-1) + await this.browserPage.locator('#btnSend').click() + await eventually(() => { + assert.ok(this.byNote(note).sentAt, 'sending stamps the comment') + }, 'the send reaches the server') +}) + +When('the reviewer clears all comments from the workspace', async function () { + await this.browserPage.locator('#btnClear').click() + const confirm = this.browserPage.locator('#clearDialog #btnConfirmClear') + await confirm.waitFor() + await confirm.click() + await eventually(async () => { + const { comments } = await this.project() + assert.equal(comments.length, 0) + }, 'the list empties') +}) diff --git a/e2e/steps/linking.steps.mjs b/e2e/steps/linking.steps.mjs new file mode 100644 index 0000000..bb075e9 --- /dev/null +++ b/e2e/steps/linking.steps.mjs @@ -0,0 +1,44 @@ +import { Then, When } from '@cucumber/cucumber' +import assert from 'node:assert/strict' +import fs from 'node:fs' +import path from 'node:path' + +When('the agent arms the stream watcher', function () { + this.startStreamWatcher() +}) + +Then('the watcher asks for a handshake', async function () { + const match = await this.watcherSays(/HANDSHAKE[\s\S]*?--token ([0-9a-f]+)/) + this.handshakeToken = match[1] +}) + +When('the agent answers the handshake', function () { + const run = this.cli('ack', '--all', '--token', this.handshakeToken) + assert.equal(run.status, 0, run.stderr) +}) + +Then('the watcher reports LINKED', async function () { + await this.watcherSays(/LINKED/) +}) + +Then('the agent\'s presence is heartbeated', async function () { + const heartbeat = path.join(this.store, 'watching') + const start = Date.now() + while (!fs.existsSync(heartbeat) && Date.now() - start < 5000) { + await new Promise(resolve => setTimeout(resolve, 100)) + } + assert.ok(fs.existsSync(heartbeat), 'the watching heartbeat is written once acked') +}) + +Then('the watcher receives a REVIEW event', async function () { + await this.watcherSays(/REVIEW/) +}) + +Then('the workspace cannot requeue the round while the watcher lives', async function () { + // Give the delivery a moment to be recorded, then ask the server to requeue: + // rule 15 refuses while a live watcher's heartbeat says the agent holds it. + await this.watcherSays(/REVIEW/) + const requeued = await this.post('/api/comments/requeue', {}) + assert.equal(requeued.response.status, 409, + 'nothing is taken off an agent that is listening') +}) diff --git a/e2e/steps/review.steps.mjs b/e2e/steps/review.steps.mjs new file mode 100644 index 0000000..bdd353e --- /dev/null +++ b/e2e/steps/review.steps.mjs @@ -0,0 +1,279 @@ +import { Given, Then, When } from '@cucumber/cucumber' +import assert from 'node:assert/strict' +import fs from 'node:fs' +import path from 'node:path' +import * as agent from '../support/mock-agent.mjs' + +/* ── subjects ── */ + +Given('a page is under review', async function () { + await this.startFileReview() +}) + +Given('a page is under review with host {string}', async function (hostId) { + await this.startFileReview(hostId) +}) + +Given('an app is running and under live review', async function () { + await this.startLiveReview() +}) + +/* ── the reviewer's verbs ── */ + +const sendOne = async function (note) { await this.sendComment(note) } + +Given('the reviewer has sent a comment {string}', sendOne) +When('the reviewer sends a comment {string}', sendOne) + +Given('the reviewer has sent comments {string} and {string}', async function (a, b) { + await this.sendComment(a) + await this.sendComment(b) +}) + +const sendOnRoute = async function (note, route) { await this.sendComment(note, { route }) } + +Given('the reviewer has sent a comment {string} on route {string}', sendOnRoute) +When('the reviewer sends a comment {string} on route {string}', sendOnRoute) + +When('the reviewer replies {string} to {string}', async function (text, note) { + const current = this.byNote(note) + await this.post('/api/comments', { + comments: [{ ...current, replies: [{ by: 'reviewer', text, at: new Date().toISOString() }] }], + }) +}) + +When('the reviewer withdraws {string}', async function (note) { + const dismissed = await this.post('/api/comments/dismiss', { id: this.idFor(note) }) + assert.equal(dismissed.response.status, 200) +}) + +When('the reviewer clears all comments', async function () { + this.versionsBeforeClear = this.versionFiles() + const { comments } = await this.project() + for (const comment of comments) { + const dismissed = await this.post('/api/comments/dismiss', { id: comment.id }) + assert.equal(dismissed.response.status, 200, `the server takes ${comment.id} off the list`) + } +}) + +When('the reviewer clears the history', async function () { + const cleared = await this.post('/api/history/clear', {}) + assert.equal(cleared.response.status, 200) +}) + +When('the reviewer hard-resets the review', async function () { + const reset = await this.post('/api/reset', {}) + assert.equal(reset.response.status, 200) +}) + +When('the reviewer approves the design expecting {int} open comments', async function (count) { + const approved = await this.post('/api/approve', { expectedOpenCount: count }) + assert.equal(approved.response.status, 200, 'the sign-off is accepted') +}) + +/* ── the (mock) agent's verbs ── */ + +const delivery = function () { agent.takeDelivery(this) } +Given('the agent has taken delivery', delivery) +When('the agent takes delivery', delivery) + +// One registration per expression: cucumber matches on text, not keyword. +When('the agent closes {string} and publishes {string}', function (note, label) { + const run = agent.closeAndPublish(this, [note], label) + assert.equal(run.status, 0, run.stderr) +}) + +When('the agent closes {string} again', function (note) { + agent.closeAndPublish(this, [note]) +}) + +When('the agent replies {string} to {string}', function (text, note) { + agent.reply(this, note, text) +}) + +When('the agent edits the page', function () { this.editPage() }) + +Then('the agent can still close {string}', function (note) { + const run = agent.closeAndPublish(this, [note]) + assert.equal(run.status, 0, run.stderr) +}) + +/* ── deliveries and the brief ── */ + +Then('the delivery names {int} open comment(s), {int} new', function (open, fresh) { + assert.match(this.lastDelivery, new RegExp(`${open} open, ${fresh} new`), + `delivery said:\n${this.lastDelivery}`) +}) + +Then('the brief lists {string} as new', function (note) { + assert.ok(this.brief().includes(`### ${this.idFor(note)} · NEW`), 'the brief marks it new') + assert.ok(this.brief().includes(note), 'the brief carries the note') +}) + +Then('the brief lists {string} as not new', function (note) { + const id = this.idFor(note) + assert.ok(this.brief().includes(`### ${id}`), 'the brief carries the comment') + assert.ok(!this.brief().includes(`### ${id} · NEW`), 'without marking it new') +}) + +Then('the brief carries the reply {string}', function (text) { + assert.ok(this.brief().includes(text), `the brief carries the thread:\n${this.brief()}`) +}) + +Then('the brief names the route {string} on {string}', function (route, note) { + assert.ok(this.brief().includes(note), 'the brief carries the comment') + assert.ok(this.brief().includes(`**Route** \`${route}\``), `the brief names the route:\n${this.brief()}`) +}) + +/* ── comment state ── */ + +Then('the comment {string} has been sent and delivered', function (note) { + const comment = this.byNote(note) + assert.ok(comment.sentAt, 'sent') + assert.ok(comment.deliveredAt, 'delivered') +}) + +Then('the comment {string} is queued, not delivered', function (note) { + const comment = this.byNote(note) + assert.ok(comment.sentAt, 'sent') + assert.equal(comment.deliveredAt, null, 'not delivered') +}) + +Then('the comment {string} is open', function (note) { + assert.equal(this.byNote(note).state, 'open') +}) + +Then('the comment {string} is closed', function (note) { + assert.equal(this.byNote(note).state, 'closed') +}) + +Then('the thread on {string} has an agent reply {string}', function (note, text) { + const replies = this.byNote(note).replies + assert.ok(replies.some(line => line.by === 'agent' && line.text === text), + `the thread reads: ${JSON.stringify(replies)}`) +}) + +Then('nothing is left unanswered', function () { + const run = agent.unanswered(this) + assert.equal(run.status, 0, run.stdout) +}) + +Then('the workspace shows no comments', async function () { + const { comments } = await this.project() + assert.deepEqual(comments, []) +}) + +Then('no record remains of {string}', function (note) { + assert.equal(this.stored().find(item => item.id === this.ids.get(note)), undefined) +}) + +Then('the record of {string} is closed and marked dismissed', function (note) { + const comment = this.byNote(note) + assert.equal(comment.state, 'closed') + assert.ok(comment.dismissedAt) +}) + +Then('the comment {string} is still on the review', async function (note) { + const { comments } = await this.project() + assert.ok(comments.some(item => item.id === this.ids.get(note))) +}) + +/* ── versions ── */ + +Given('the review has reached version {int}', function (version) { + while (this.state().version < version) { + const run = this.cli('publish', ...this.subjectArgs(), '--label', `Version ${this.state().version + 1}`) + assert.equal(run.status, 0, run.stderr) + } +}) + +Then('the review is at version {int}', function (version) { + assert.equal(this.state().version, version) +}) + +Then('the review is still at version {int}', function (version) { + assert.equal(this.state().version, version) +}) + +Then('version {int} is a frozen copy of the page labelled {string}', function (version, label) { + const frozen = fs.readFileSync(path.join(this.versionsDir, `v${version}.html`), 'utf8') + assert.equal(frozen, fs.readFileSync(this.page, 'utf8'), 'the snapshot is the file as published') + const meta = JSON.parse(fs.readFileSync(path.join(this.versionsDir, `v${version}.meta.json`), 'utf8')) + assert.equal(meta.label, label) +}) + +Then('the version history is untouched', function () { + assert.deepEqual(this.versionFiles(), this.versionsBeforeClear) +}) + +Then('only version {int} remains on the timeline', function (version) { + assert.deepEqual(this.versionFiles(), [`v${version}.html`, `v${version}.meta.json`]) +}) + +Then('the review starts again at version {int}', function (version) { + assert.equal(this.state().version, version) + assert.deepEqual(this.versionFiles(), [`v${version}.html`, `v${version}.meta.json`]) +}) + +Then('the page keeps the agent\'s edits', function () { + assert.ok(this.pageHasEdit(), 'nothing the agent changed is undone') +}) + +Then('no version file was frozen', function () { + assert.ok(!this.versionFiles().some(file => file.endsWith('.html')), + `nothing is snapshotted for a live review: ${this.versionFiles()}`) +}) + +/* ── requeue, approve, liveness ── */ + +Given('the agent\'s watching heartbeat is fresh', function () { + fs.writeFileSync(path.join(this.store, 'watching'), String(Date.now())) +}) + +Given('nothing is listening', function () { + fs.rmSync(path.join(this.store, 'watching'), { force: true }) +}) + +When('the workspace asks to requeue', async function () { + this.requeue = await this.post('/api/comments/requeue', {}) +}) + +Then('the server refuses the requeue', function () { + assert.equal(this.requeue.response.status, 409, 'nothing is taken off an agent that is listening') +}) + +Then('the approval records {int} open comments', function (count) { + const approved = JSON.parse(fs.readFileSync(path.join(this.store, 'approved'), 'utf8')) + assert.equal(approved.openComments.length, count) +}) + +Then('the server exits on its own', async function () { + assert.ok(await this.waitForServerExit(), 'sign-off closes the server') +}) + +Then('the command succeeds', function () { + assert.equal(this.lastRun.status, 0, this.lastRun.stderr) +}) + +/* ── host profile ── */ + +Then('the workspace injects the {string} profile named {string}', async function (hostId, name) { + const workspace = await (await fetch(this.origin + this.base + '/')).text() + assert.ok(workspace.includes(`window.__VSTACK_HOST__={"id":"${hostId}","name":"${name}"`), + 'the profile is stamped into the page') +}) + +Then('the injected share capability is {string}', async function (share) { + const workspace = await (await fetch(this.origin + this.base + '/')).text() + const injected = workspace.match(/window\.__VSTACK_HOST__=(\{.*?\})<\/script>/s) + assert.ok(injected, 'the profile is on the page') + assert.equal(JSON.parse(injected[1]).capabilities.share, share) +}) + +/* ── the app under a live review ── */ + +Then('the app is untouched', async function () { + const response = await fetch(this.appOrigin + '/') + assert.equal(response.status, 200) + assert.match(await response.text(), /Fixture/) +}) diff --git a/e2e/support/browser.mjs b/e2e/support/browser.mjs new file mode 100644 index 0000000..c42669a --- /dev/null +++ b/e2e/support/browser.mjs @@ -0,0 +1,23 @@ +import { After, AfterAll, Before } from '@cucumber/cucumber' +import { chromium } from 'playwright' + +/* One Chromium for the whole run; each @browser scenario gets its own page. + HEADED=1 opens a visible browser, slowed enough to watch — for debugging a + scenario or seeing the workspace being driven. */ +let browser = null + +Before({ tags: '@browser' }, async function () { + browser ??= await chromium.launch( + process.env.HEADED ? { headless: false, slowMo: 400 } : {}, + ) + this.browserPage = await browser.newPage({ viewport: { width: 1600, height: 1000 } }) +}) + +After({ tags: '@browser' }, async function () { + await this.browserPage?.close() +}) + +AfterAll(async function () { + await browser?.close() + browser = null +}) diff --git a/e2e/support/mock-agent.mjs b/e2e/support/mock-agent.mjs new file mode 100644 index 0000000..63cdf72 --- /dev/null +++ b/e2e/support/mock-agent.mjs @@ -0,0 +1,31 @@ +/* + * The agent, mocked. The protocol never sees a model: the agent's whole + * surface is the CLI plus edits to the page, so these functions are a complete + * stand-in for Claude or Codex. Only the @agent-tagged scenarios put a real + * session behind the loop. + */ +import assert from 'node:assert/strict' + +/** One tick: block until there is something to hand over, take it, and exit. */ +export function takeDelivery (world) { + const run = world.cli('watch', ...world.subjectArgs()) + assert.match(run.stdout, /REVIEW/, `expected a delivery, got:\n${run.stdout}${run.stderr}`) + world.lastDelivery = run.stdout + return run.stdout +} + +export function closeAndPublish (world, notes, label) { + const ids = notes.map(note => world.idFor(note)).join(',') + const args = ['publish', ...world.subjectArgs(), '--close', ids] + if (label) args.push('--label', label) + return world.cli(...args) +} + +export function reply (world, note, text) { + const run = world.cli('reply', ...world.subjectArgs(), '--comment', world.idFor(note), '--text', text) + assert.equal(run.status, 0, run.stderr) +} + +export function unanswered (world) { + return world.cli('unanswered', '--all') +} diff --git a/e2e/support/world.mjs b/e2e/support/world.mjs new file mode 100644 index 0000000..979c0a3 --- /dev/null +++ b/e2e/support/world.mjs @@ -0,0 +1,190 @@ +import { After, setDefaultTimeout, setWorldConstructor } from '@cucumber/cucumber' +import assert from 'node:assert/strict' +import { spawn, spawnSync } from 'node:child_process' +import fs from 'node:fs' +import http from 'node:http' +import os from 'node:os' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const HERE = path.dirname(fileURLToPath(import.meta.url)) +const SERVER = path.resolve(HERE, '../../plugins/vstack/skills/review/assets/review-server.mjs') + +const PAGE_V1 = 'Review e2e page

Todo

' +const EDIT_MARKER = 'Todo — edited' + +/* Scenarios run serially; each takes a pair of ports (review server + fixture + app) so a slow teardown can never collide with the next scenario. */ +let portCursor = 21000 + (process.pid % 400) * 20 + +export class ReviewWorld { + constructor () { + this.hostId = process.env.VSTACK_HOST || 'claude' + this.temp = fs.mkdtempSync(path.join(os.tmpdir(), 'vstack-e2e-')) + this.port = (portCursor += 2) + this.live = false + this.server = null + this.serverLog = '' + this.app = null + this.ids = new Map() + this.nextId = 0 + this.lastDelivery = '' + this.lastRun = null + } + + get origin () { return `http://127.0.0.1:${this.port}` } + get base () { return this.live ? '/__review' : '' } + get store () { return path.join(this.temp, '.vstack', 'local', 'review', this.name) } + get versionsDir () { return path.join(this.store, 'versions') } + + subjectArgs () { return this.live ? ['--name', this.name] : ['--file', this.page] } + + cli (...argv) { + const run = spawnSync(process.execPath, [SERVER, ...argv], { + encoding: 'utf8', cwd: this.temp, timeout: 30_000, + }) + this.lastRun = run + return run + } + + async startFileReview (hostId = this.hostId) { + this.live = false + this.name = 'page' + this.page = path.join(this.temp, 'page.html') + fs.writeFileSync(this.page, PAGE_V1) + const published = this.cli('publish', ...this.subjectArgs(), '--label', 'Initial version') + assert.equal(published.status, 0, published.stderr) + await this.serve(['--file', this.page], hostId) + } + + async startLiveReview () { + this.live = true + this.name = 'testapp' + const appPort = this.port + 1 + this.app = http.createServer((req, res) => { + res.writeHead(200, { 'content-type': 'text/html' }) + res.end(`Fixture

${req.url}

Settings`) + }) + await new Promise(resolve => this.app.listen(appPort, '127.0.0.1', resolve)) + this.appOrigin = `http://127.0.0.1:${appPort}` + await this.serve(['--app', this.appOrigin, '--name', this.name], this.hostId) + } + + async serve (subject, hostId) { + this.server = spawn(process.execPath, [ + SERVER, 'serve', ...subject, '--port', String(this.port), + '--idle-timeout', '0', '--host', hostId, '--no-open', + ], { cwd: this.temp, stdio: ['ignore', 'pipe', 'pipe'] }) + this.server.stdout.on('data', chunk => { this.serverLog += chunk }) + this.server.stderr.on('data', chunk => { this.serverLog += chunk }) + for (let attempt = 0; attempt < 100; attempt++) { + try { + if ((await fetch(this.origin + this.base + '/api/project')).ok) return + } catch {} + await new Promise(resolve => setTimeout(resolve, 100)) + } + throw new Error(`review server did not start:\n${this.serverLog}`) + } + + async post (pathname, body) { + const response = await fetch(this.origin + this.base + pathname, { + method: 'POST', headers: { 'content-type': 'application/json' }, + body: JSON.stringify(body), + }) + return { response, body: await response.json().catch(() => null) } + } + + async project () { + const response = await fetch(this.origin + this.base + '/api/project') + assert.ok(response.ok, 'the workspace API answers') + return response.json() + } + + idFor (note) { + if (!this.ids.has(note)) this.ids.set(note, `c${++this.nextId}`) + return this.ids.get(note) + } + + /** What the workspace saves for one comment. `sentAt` set means "let go of it". */ + commentPayload (note, extra = {}) { + return { id: this.idFor(note), kind: 'area', note, size: 'desktop', replies: [], ...extra } + } + + async sendComment (note, extra = {}) { + const saved = await this.post('/api/comments', { + comments: [this.commentPayload(note, { sentAt: new Date().toISOString(), ...extra })], + }) + assert.equal(saved.response.status, 200, 'the workspace save is accepted') + } + + stored () { + const file = path.join(this.store, 'comments.json') + if (!fs.existsSync(file)) return [] + return JSON.parse(fs.readFileSync(file, 'utf8')).comments + } + + /** A comment made through the workspace mints its own id, so fall back to + the note's words and remember what the workspace called it. */ + byNote (note) { + let comment = this.stored().find(item => item.id === this.ids.get(note)) + comment ??= this.stored().find(item => item.note === note) + assert.ok(comment, `comment "${note}" exists on the review`) + this.ids.set(note, comment.id) + return comment + } + + brief () { return fs.readFileSync(path.join(this.store, 'brief.md'), 'utf8') } + + state () { return JSON.parse(fs.readFileSync(path.join(this.store, 'state.json'), 'utf8')) } + + versionFiles () { + if (!fs.existsSync(this.versionsDir)) return [] + return fs.readdirSync(this.versionsDir).sort() + } + + editPage () { + fs.writeFileSync(this.page, fs.readFileSync(this.page, 'utf8').replace('Todo', EDIT_MARKER)) + } + + pageHasEdit () { return fs.readFileSync(this.page, 'utf8').includes(EDIT_MARKER) } + + /** The long-lived watcher a real session runs, its stdout kept as one + growing transcript so steps can wait for the next protocol line. */ + startStreamWatcher () { + this.watcher = spawn(process.execPath, [SERVER, 'watch', '--all', '--stream'], { + cwd: this.temp, stdio: ['ignore', 'pipe', 'pipe'], + }) + this.watcherOut = '' + this.watcher.stdout.on('data', chunk => { this.watcherOut += chunk }) + this.watcher.stderr.on('data', chunk => { this.watcherOut += chunk }) + } + + async watcherSays (pattern, timeout = 10_000) { + const start = Date.now() + while (Date.now() - start < timeout) { + const match = this.watcherOut.match(pattern) + if (match) return match + await new Promise(resolve => setTimeout(resolve, 100)) + } + throw new Error(`the watcher never said ${pattern}:\n${this.watcherOut}`) + } + + async waitForServerExit () { + for (let attempt = 0; attempt < 50 && this.server.exitCode === null; attempt++) { + await new Promise(resolve => setTimeout(resolve, 100)) + } + return this.server.exitCode !== null + } + + teardown () { + this.watcher?.kill('SIGTERM') + this.server?.kill('SIGTERM') + this.app?.close() + fs.rmSync(this.temp, { recursive: true, force: true }) + } +} + +setWorldConstructor(ReviewWorld) +setDefaultTimeout(60_000) + +After(function () { this.teardown() }) diff --git a/e2e/test-plan.html b/e2e/test-plan.html new file mode 100644 index 0000000..6b696e8 --- /dev/null +++ b/e2e/test-plan.html @@ -0,0 +1,330 @@ + + + + + +Review e2e test plan + + + +
+
+

Review e2e test plan

+

End-to-end scenarios for the review loop, written as Gherkin so they + become the automated suite verbatim. Comment on any scenario: strike what should not + exist, comment where the wording or expected behaviour is wrong.

+
+ @round1 automate first — driven headlessly through the server API and CLI + @later needs a real browser (Playwright) — a later pass +
+
+ +
+

Feature: Page review — sending comments

+ +
+
S1

Send with no round in flight — delivered immediately

@round1
+
Background: + Given "todo.html" is served for review and the agent's watcher is linked + +Scenario: a sent comment reaches the agent straight away + Given no comment is currently with the agent + When the reviewer adds a comment "Make the title bigger" and presses Send + Then the watcher receives a REVIEW event naming 1 open comment + And the brief lists the comment, marked new, with its element anchor + And the comment has sentAt and deliveredAt set
+
+ +
+
S2

Send while a round is in flight — queued, picked up after the round

@round1
+
Scenario: a comment sent mid-round waits for the next delivery + Given the agent has taken delivery of comment A and has not yet answered it + When the reviewer adds comment B and presses Send + Then comment B is queued: sentAt set, deliveredAt empty + And no new REVIEW event interrupts the round in flight + When the agent publishes v2 closing comment A + Then the next delivery hands over comment B, marked new
+

Why: the contract promises the agent is never interrupted mid-round; queued comments accumulate and arrive with the next tick.

+
+ +
+
S3

Whatever is not closed comes back

@round1
+
Scenario: an unclosed comment returns on the next delivery + Given the agent was handed comments A and B in one delivery + When the agent publishes closing only A + Then B stays open + When the reviewer sends a new comment C + Then the delivery hands over B and C — B marked not new, C marked new
+
+
+ +
+

Feature: Page review — closing, versions, threads

+ +
+
S4

Publish closes comments and snapshots a version

@round1
+
Scenario: publish --close moves comments to Addressed and freezes v2 + Given the agent holds comment A and has edited todo.html + When the agent runs publish --close A --label "Bigger title" + Then versions/v2.html is a frozen copy of the file and v2.meta.json carries the label + And comment A is closed, with closedAt set + And the workspace offers "v2 is ready — Review changes" + And A appears in the Addressed section offering Revert and Refine
+
+ +
+
S5

An agent reply asks a question and keeps the comment open

@round1
+
Scenario: replying never changes a comment's state + Given the agent holds an ambiguous comment A + When the agent replies "Every row, or only overdue ones?" + Then the reply is appended to A's thread with by: "agent" + And A stays open + And `unanswered` no longer names A — a reply answers the round
+
+ +
+
S6

A reviewer reply to a closed comment reopens it

@round1
+
Scenario: Refine / a reply sends an addressed comment back + Given comment A is closed + When the reviewer replies "Not quite — it needs to be bolder too" and presses Send + Then A is open again + And the next brief carries A with reopened: true and the full thread
+
+
+ +
+

Feature: Page review — clearing

+ +
+
S7

Clear all comments

@round1
+
Scenario: Clear all empties the list without touching versions + Given comment A is with the agent, B is queued, and C is addressed + When the reviewer confirms "Clear all" in the comment list footer + Then the workspace shows no comments at all + And B, never delivered, leaves no record + And A keeps a record marked dismissed and closed + And the version history is untouched + And the agent is not interrupted and publish --close A still succeeds
+
+ +
+
S8

Clear history

@round1
+
Scenario: Clear history deletes past versions and keeps the present + Given versions v1, v2 and v3 exist + When the reviewer confirms "Clear history" + Then only the current version remains on the timeline + And the comment list is untouched + And the served page is unchanged
+
+ +
+
S9

Hard reset

@round1
+
Scenario: Hard reset restarts the review at v1 + Given the review has 3 comments and 3 versions + When the reviewer confirms "Hard reset Visual Stack" in the settings menu + Then every comment and every version is deleted + And the review is at v1 again + And todo.html keeps every edit the agent made — nothing is undone
+
+
+ +
+

Feature: Live app review (--app)

+ +
+
S10

Same send and queue flow, comments carry a route

@round1
+
Background: + Given a small test app runs on localhost and is served with --app --name testapp + And the agent's watcher is linked + +Scenario: a live comment names the screen it was made on + When the reviewer comments on the /settings screen and presses Send + Then the delivery works exactly as S1 + And the comment carries route: "/settings" + And the brief names the Route under the comment
+
+ +
+
S11

A live publish is a marker, not a file snapshot

@round1
+
Scenario: publish --name closes comments without freezing a file + Given the agent holds a live comment A + When the agent runs publish --name testapp --close A --label "Fixed spacing" + Then comment A is closed + And no source file of the app is copied into the store + And the timeline still scrubs: each Send captured the DOM the reviewer was looking at
+

Why: in a live review the app is the truth — a version records what was finished, and history shows what the reviewer saw when they said it.

+
+ +
+
S12

Hard reset in a live review deletes comments only

@round1
+
Scenario: resetting a live review leaves the app alone + Given a live review with comments and captures + When the reviewer confirms the hard reset + Then every comment is deleted and the review starts again + And the app and its source are exactly as they were
+
+
+ +
+

Feature: Edge cases

+ +
+
S13

Withdrawing a delivered comment never blocks the agent

@round1
+
Scenario: the agent finishes what it was handed + Given the agent has taken delivery of comment A + When the reviewer deletes A from the workspace + Then A leaves the reviewer's list, marked dismissed + And the agent is not notified + And publish --close A still succeeds
+

Why: rule 4 of the contract — nothing can refuse a close. Every past dead-end came from a rule that could stop a round ending.

+
+ +
+
S14

A stalled round can be sent again — but only once nothing is listening

@round1
+
Scenario: requeue is refused while the agent is alive + Given the agent holds comment A and its watching heartbeat is fresh + When the workspace asks to requeue A + Then the server refuses — the agent still has it + +Scenario: requeue rescues a dead session's round + Given the agent session died and the heartbeat has gone stale + When the reviewer presses "Send again" + Then A's deliveredAt is cleared and A is queued again + And the next watcher to link is handed A
+
+ +
+
S15

Approve ends the review deliberately

@round1
+
Scenario: sign-off with comments still open + Given 2 comments are still open + When the reviewer confirms "Approve & finish" past the warning naming those 2 + Then the watcher receives APPROVED with openComments: 2 + And the server exits on its own
+
+ +
+
S16

Closing twice is a no-op

@round1
+
Scenario: a retried publish is safe + Given comment A is already closed + When the agent runs publish --close A again + Then the command succeeds and nothing changes
+
+ +
+
S17

Pins, drag marks and dialogs in a real browser

@later
+
Scenario outline: the browser-only surface (deferred to the Playwright pass) + - a click drops a pin and the note opens on the canvas + - an empty note is discarded on dismiss + - Move and Delete marks arrive as kind: move / strike + - View mode hides every annotation; esc toggles back + - Clear all and Hard reset sit behind their confirm dialogs + - the link dot flips between Linked and Unlinked with the watcher
+

Why: round 1 drives the same HTTP endpoints the workspace calls, which proves the protocol but not the pointer handling. This scenario is the placeholder for the browser pass.

+
+
+ +
+

Feature: Host matrix — Claude and Codex

+ +
+
S18

Every protocol scenario runs under both hosts

@round1
+
Scenario outline: the loop behaves identically whichever host serves it + Given the server is started with --host <host> + Then S1–S16 pass unchanged + And the workspace page injects the <host> profile as window.__VSTACK_HOST__ + And the Send button is labelled "Send to <name>" + + Examples: + | host | name | + | claude | Claude | + | codex | Codex |
+

Why: the protocol is host-independent by contract; the suite proves it by running the whole matrix twice, selected by VSTACK_HOST.

+
+ +
+
S19

Capabilities differ where the profiles say they do

@round1
+
Scenario: share is offered only where the host can publish + Given the server is started with --host claude + Then the workspace offers "Publish a link to this wireframe" (share: artifact) + Given the server is started with --host codex + Then that control is hidden (share: copy)
+
+
+ +
+

Feature: A real agent in the loop

+ +
+
S20

One smoke round per host, on the cheapest model

@later
+
Scenario outline: a real headless session answers a real comment + Given a review is served and a headless <host> session is started + on the cheapest model, with the vstack plugin loaded + When the reviewer sends "Change the heading to 'Hello'" + Then within the timeout the session takes delivery, edits the page, + and publishes v2 closing the comment + And `unanswered` exits 0 + + Examples: + | host | session command | + | claude | claude -p --model haiku … | + | codex | codex exec --model <cheapest> … |
+

Why: S1–S19 simulate the agent with the CLI, which proves the protocol but not the skill instructions. One paid round per host proves the whole loop. It runs only when explicitly asked (tagged, needs API keys, costs money) — never in ordinary CI. The model is pinned to the cheapest each CLI offers, in one place in the suite config.

+
+
+ +
+

Automation approach — comment here too

+
    +
  • Framework: cucumber-js (@cucumber/cucumber). The features above become e2e/features/*.feature verbatim; step definitions live in e2e/steps/.
  • +
  • Where it lives: e2e/ at the repo root with its own package.json, outside plugins/ — the plugin itself stays dependency-free, like the demo-recording setup.
  • +
  • How round 1 drives it: no browser. Reviewer verbs go through the same HTTP API the workspace uses (/api/comments, /api/reset, /api/history/clear, /api/approve); agent verbs through the real CLI (watch --stream, publish, reply, ack, unanswered). Each scenario gets a fresh temp directory and its own port.
  • +
  • Claude and Codex are mocked: e2e/support/mock-agent.mjs plays the agent role — it answers the handshake, takes deliveries, makes a deterministic edit, and replies or closes exactly as the scenario directs. The protocol never sees a model, so the mock is a complete stand-in for either host; no API keys, no cost. Only S20 puts a real session behind the loop, to prove the skill instructions themselves.
  • +
  • Live app fixture: a ~20-line stdlib Node server with two routes, started per scenario.
  • +
  • Host matrix: CI runs the suite twice, VSTACK_HOST=claude and VSTACK_HOST=codex; S18–S19 assert the differences, everything else asserts sameness.
  • +
  • Real-agent tier: S20 is tagged @agent and excluded by default. It runs only on demand, with the model pinned to the cheapest per CLI (Claude: Haiku; Codex: set in config) so a smoke round costs cents.
  • +
  • CI: one new line in ci.yml running npm ci && npx cucumber-js inside e2e/ (the @agent tag stays excluded).
  • +
+
+
+ + From 3369239a740078f42d38a132713f23f086e6bcc2 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sat, 8 Aug 2026 12:26:02 +0800 Subject: [PATCH 09/19] Taking a comment off the list is a removal the server confirms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The × on a card and Clear all now reach every comment on the list, whatever state it is in — queued, delivered or addressed. Asking for a delivered comment back by writing a reply is gone; the card goes, and the agent carries on with whatever it was already handed. Removal is a request of its own, because a save that simply omits a comment reads as a stale tab and is merged straight back. The card disappears on the click and comes back, with a toast saying so, if the server refuses. Taking back a reply works the same way, over a new `/comments/unreply` endpoint that refuses once something has been said over it. Also here: - `unanswered` compares what the agent has said against the reviewer's last word it was actually handed. Every tick re-stamps `deliveredAt`, so measuring against delivery alone cleared a question the moment the reviewer wrote anything at all. - `liveStores` compares real paths, so a store reached under a symlinked prefix is not counted twice. - The Addressed group reads each comment's own `closedAt`, so taking the newest one off no longer promotes the batch beneath it back into view. Co-Authored-By: Claude Opus 5 (1M context) --- plugins/vstack/contracts/review-loop.md | 30 +-- plugins/vstack/skills/review/SKILL.md | 4 +- .../skills/review/assets/bundle-artifact.mjs | 12 +- .../skills/review/assets/review-server.mjs | 101 +++++++--- .../skills/review/assets/workspace.html | 175 ++++++++++++------ plugins/vstack/skills/review/hosts/codex.md | 7 +- plugins/vstack/skills/review/hosts/grok.md | 6 +- .../skills/review/tests/review-lifecycle.mjs | 16 +- .../vstack/skills/review/tests/round-gate.mjs | 23 +++ 9 files changed, 266 insertions(+), 108 deletions(-) diff --git a/plugins/vstack/contracts/review-loop.md b/plugins/vstack/contracts/review-loop.md index 99a952e..f58804d 100644 --- a/plugins/vstack/contracts/review-loop.md +++ b/plugins/vstack/contracts/review-loop.md @@ -6,7 +6,7 @@ workspace), (2) the **agent session**, and (3) the **reviewer** in the browser. Host-independent: any Host that fulfills [host.md](host.md) can drive this loop. One list of comments. Each is open or closed. The agent is the only one who -closes. Everything the workspace shows is derived from that list. +calls a comment done. Everything the workspace shows is derived from that list. --- @@ -48,14 +48,15 @@ closes. Everything the workspace shows is derived from that list. | `replies` | `{ by, text, at }[]`, append-only | | `sentAt` | The reviewer let go of it. Null means it is still a draft | | `deliveredAt` | The agent was last handed it. Null means it is still queued here | +| `dismissedAt` | The reviewer took it off the list after it had been delivered. The record stays; the workspace never shows it again | Those two timestamps carry the whole of a comment's progress: | State | `sentAt` | `deliveredAt` | Editable | Withdrawable | | --- | --- | --- | --- | --- | -| Being written | — | — | yes | yes, outright | -| Queued | set | — | no | yes | -| With the agent | set | set | no | no — reply asking for it back | +| Being written | — | — | yes | yes, the record goes | +| Queued | set | — | no | yes, the record goes | +| With the agent | set | set | no | yes, the record stays behind it | --- @@ -64,11 +65,15 @@ Those two timestamps carry the whole of a comment's progress: **Reviewer** — three verbs: - Add a comment. -- Reply to a comment. A reply to a closed comment reopens it. -- Withdraw a comment, while `deliveredAt` is null. +- Reply to a comment. A reply to a closed comment reopens it. Their own reply, + while it is still the thread's last line, may be taken back (rule 7). +- Withdraw a comment, at any point. -A reviewer never closes a comment. Withdrawing something already handed over is -a reply saying so; the agent undoes what it has to and closes it. +A reviewer never closes a comment as done. Withdrawing takes it off the list +they are working from: a comment the agent has not been handed leaves no record +at all, and one it has been handed keeps a record marked `dismissedAt` and +`closed`, so the agent can still close what it was given. The agent is not +interrupted by a withdrawal and is not told of one. **Agent** — three verbs: @@ -144,6 +149,7 @@ Host selection: `--host ` or `VSTACK_HOST=` (affects UI injection only). | `share --file/name … --url ` | Record public URL; clear the `share` sentinel | | `status --file/name …` | Human/debug snapshot | | `unanswered [--all] [--file/name …]` | Comments the agent was handed and has not answered. Exits 1 while any remain | +| `reset --file/name …` | Delete every comment and version for the review, and start again at v1 | --- @@ -189,21 +195,21 @@ reviewer comments ──Send──► comments.json Rules: -1. Only `publish --close` closes a comment. The reviewer has no resolve. +1. Only `publish --close` says a comment is done. The reviewer has no resolve. Withdrawing (rule 9) takes a comment off their list and says nothing about the work. 2. A tick hands over **every** open comment, not only the new ones, and marks which are new since the last delivery. 3. Whatever the agent does not close stays open and comes back on the next tick. There is no coverage to satisfy. 4. **Nothing can refuse a close.** An agent that has taken delivery can always finish, whatever the reviewer did meanwhile. 5. Closing what is already closed is a no-op, so a retried command is safe. 6. A comment's words are frozen when the reviewer sends it. The engine keeps the stored note whatever a client saves afterwards. -7. A reply is append-only, from either role. Two copies of a thread merge to the union of both. +7. A reply is append-only in a save, from either role: two copies of a thread merge to the union of both, so a line missing from one copy is never a removal. Removal is a request of its own. The reviewer may take back their own reply while it is the thread's last line; once anything has been said over it, it stays. The agent is not told of a take-back and finishes from whatever it already took delivery of (rule 4). 8. A reviewer's reply to a closed comment reopens it. An agent's reply never changes state. -9. A comment may be withdrawn until it has been delivered. After that, withdrawal is a reply asking for it back. +9. A comment may be withdrawn at any point. Undelivered, it is deleted. Delivered, it is marked `dismissedAt` and `closed`: it leaves the workspace, no tick raises it again, and the id still resolves so the agent holding it can close it. 10. A version is a snapshot to look at. It records no comments, and no comment records a version. 11. One `watch_stream` per session is enough with `--all`. 12. Presence is proven. A stream watcher writes its `watching` heartbeat from the moment its handshake is answered, so **Linked** means a session is receiving the stream. Default window 120 s (`--handshake-timeout `). 13. Presence is per review, and per watcher. A watcher heartbeats only the stores it covers, and goes live only on an answer carrying its own token. 14. An agent that took delivery answers. A comment it was handed is answered by closing it or by replying to it. Neither is a round that stopped halfway, because no tick will raise that comment again until the reviewer writes. `unanswered` names them, and exits 1 while any remain. -15. A delivered comment goes back to the queue when nothing is listening. That is the way out of a round whose agent session died: those comments are not `unseen`, so no new watcher would ever hand them over. `deliveredAt` is cleared and the comment is Queued again. The engine refuses this while a `watching` heartbeat is fresh, because then an agent still holds it and rule 9 applies instead. +15. A delivered comment goes back to the queue when nothing is listening. That is the way out of a round whose agent session died: those comments are not `unseen`, so no new watcher would ever hand them over. `deliveredAt` is cleared and the comment is Queued again. The engine refuses this while a `watching` heartbeat is fresh, because then an agent still holds it and rule 14 applies instead. Rule 14 is an obligation on the agent, not a refusal by the engine. Rule 3 still holds: `publish` closes exactly what it names and accepts everything else diff --git a/plugins/vstack/skills/review/SKILL.md b/plugins/vstack/skills/review/SKILL.md index 60ae384..939d169 100644 --- a/plugins/vstack/skills/review/SKILL.md +++ b/plugins/vstack/skills/review/SKILL.md @@ -138,8 +138,8 @@ The page opens in **its own browser window** on the canvas — own viewport, own | **Save** (⏎) | on the comment — Enter commits it, Shift+Enter is a new line | | **Timeline** (bottom) | drag the handle to scrub through published versions; history is read-only | | **EN / 中文** | workspace chrome only — comments stay in whatever words they were written in | -| **Delete** | on the comment, once it has words in it | -| **Clear all** | in the comment list footer, behind a confirm | +| **Delete** | on the comment, once it has words in it. It takes the comment off the user's list whatever state it is in, including one you are working on right now — you are not told, and you finish and close what you were given as normal | +| **Clear all** | in the comment list footer, behind a confirm. It takes every comment on the list off at once, addressed ones included — the same act as the per-card delete | | **Link status** | a dot beside Send — linked to your session, or link lost. Nothing is said until the connection has actually answered | | **Send to {agent}** (⌘⏎) | sends straight through — no preview step — and wakes you up. Label uses the Host profile name. Greys out until something actually changes | | **In flight** | every comment you were sent keeps an indeterminate progress bar until you publish or reply. No banner covers the page any more — the progress is on the comments it belongs to | diff --git a/plugins/vstack/skills/review/assets/bundle-artifact.mjs b/plugins/vstack/skills/review/assets/bundle-artifact.mjs index 61b5752..3bd6ad5 100644 --- a/plugins/vstack/skills/review/assets/bundle-artifact.mjs +++ b/plugins/vstack/skills/review/assets/bundle-artifact.mjs @@ -5,16 +5,17 @@ * The local loop needs a server (same-origin page, POST-back feedback). To * put the same workspace in front of someone who is not at this machine, we * inline the page and its published versions into the workspace and switch the - * send button to "copy for Claude". Output is CSP-safe: no external fonts, - * scripts, styles or fetches — publishable as a Claude Artifact as-is. + * send button to copying the comments for the agent. Output is CSP-safe: no + * external fonts, scripts, styles or fetches — publishable as an Artifact as-is. * - * node bundle-artifact.mjs --file [--out review.html] [--versions 3] + * node bundle-artifact.mjs --file [--out review.html] [--versions 3] [--host ] */ import fs from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' import { subjectDir, TOOL } from '../../../lib/workdir.mjs' +import { loadHost, resolveHostId, withHost } from '../../../lib/host.mjs' const HERE = path.dirname(fileURLToPath(import.meta.url)) @@ -114,6 +115,11 @@ const titled = out.replace(/[^<]*<\/title>/i, () => `<title>${esc(name)} if (titled === out) console.error('warning: no <title> to name — the Artifact will be filed under the workspace default') out = titled +/* Carry the Host profile in, the same as `serve` does. Without it the bundle + falls back to the default profile and a review shared from another host asks + the reviewer to copy their comments for the wrong agent. */ +out = withHost(out, loadHost(resolveHostId(args))) + const dest = path.resolve(args.out || path.join(DIR, `${NAME}-review.html`)) fs.mkdirSync(path.dirname(dest), { recursive: true }) fs.writeFileSync(dest, out) diff --git a/plugins/vstack/skills/review/assets/review-server.mjs b/plugins/vstack/skills/review/assets/review-server.mjs index 39b287e..51758ca 100644 --- a/plugins/vstack/skills/review/assets/review-server.mjs +++ b/plugins/vstack/skills/review/assets/review-server.mjs @@ -250,8 +250,9 @@ const saveState = s => writeJSON(P.state(), s) One list per review, and the only place a comment's state lives. A comment is open or closed. Two timestamps say where it is between the reviewer and the agent: `sentAt` is the reviewer letting go of it, which also freezes its - words; `deliveredAt` is the agent taking it, after which it can no longer be - withdrawn. Everything the workspace shows is derived from those. */ + words; `deliveredAt` is the agent taking it, after which withdrawing it + leaves the record behind. Everything the workspace shows is derived from + those. */ /** * What a review is, read from its own store rather than from this process's @@ -285,7 +286,7 @@ function saveComments (comments, subject = here()) { /** Fields the protocol owns. A client may write everything else on a comment it * still holds, and none of these ever. */ -const OWNED = ['state', 'sentAt', 'deliveredAt'] +const OWNED = ['state', 'sentAt', 'deliveredAt', 'dismissedAt'] const normaliseComment = c => ({ ...c, @@ -763,8 +764,13 @@ function liveStores (from = process.cwd(), depth = 5) { } } walk(from, depth) - // A store found both ways is one review, so compare resolved paths. - return [...new Set([...found, ...pointedStores(from)].map(store => path.resolve(store)))] + /* A store found both ways is one review, so compare real paths rather than + resolved ones: the walk starts from `process.cwd()`, which has its symlinks + collapsed already, while `.serving` records the path the server was given. + Under a symlinked prefix — `/tmp` and `/var` on macOS — the same directory + otherwise arrives under two names and every caller sees it twice. */ + const realPath = store => { try { return fs.realpathSync(store) } catch { return path.resolve(store) } } + return [...new Set([...found, ...pointedStores(from)].map(realPath))] } /* How long a stream watcher waits to be told its events are being read. Long @@ -1064,11 +1070,22 @@ function cmdStatus () { * notices: the next tick only fires when the reviewer writes again, so an * unanswered comment sits there for as long as they stay quiet. * - * Any reply after delivery clears it. A reviewer's reply is not the agent going - * quiet — that comment is already waiting for the next tick to hand it back. + * It is settled by comparing what the agent has said against what it was given, + * not against the delivery itself: every tick re-stamps `deliveredAt` on every + * open comment, so a comment the agent asked a question about would fall behind + * its own delivery as soon as the reviewer wrote anything at all. */ -const unanswered = comment => comment.state === 'open' && comment.deliveredAt && - !(comment.replies || []).some(reply => Date.parse(reply.at || '') > Date.parse(comment.deliveredAt)) +const unanswered = comment => { + if (comment.state !== 'open' || !comment.deliveredAt) return false + const when = reply => Date.parse(reply.at || '') || 0 + const delivered = Date.parse(comment.deliveredAt) + const latest = pick => Math.max(0, ...(comment.replies || []).filter(pick).map(when)) + // The reviewer's last word that the agent was actually handed. Anything + // written since is waiting for the next tick rather than for the agent. + const asked = latest(reply => reply.by === REVIEWER_ROLE && when(reply) <= delivered) + const answered = latest(reply => reply.by !== REVIEWER_ROLE) + return answered <= asked +} const oneLine = note => { const text = String(note || '').replace(/\s+/g, ' ').trim() @@ -1096,7 +1113,7 @@ function cmdUnanswered () { const them = owed.length > 1 ? 'them' : 'it' console.log(`Review "${subject.name}" — you took delivery of ${owed.length} comment${owed.length > 1 ? 's' : ''} and have not answered ${them}:`) for (const comment of owed) console.log(` ${comment.id} ${oneLine(comment.note)}`) - console.log(`\nDo what each one asks and close it, or reply to ask what ${them} means:`) + console.log(`\nDo what each one asks and close it, or reply to ask what it means:`) console.log(` node "${bin}" publish ${subject.flags} --close ${owed.map(comment => comment.id).join(',')} --label "what changed"`) console.log(` node "${bin}" reply ${subject.flags} --comment ${owed[0].id} --text "your question"`) } @@ -1166,8 +1183,10 @@ function payload () { versions, /* The whole list, every time. A comment carries where it is — written, queued, with the agent — so a reload or a second tab reads the same - review as the tab that wrote it, with nothing to reconstruct. */ - comments: loadComments(), + review as the tab that wrote it, with nothing to reconstruct. What the + reviewer took off the list is the one thing left out: the record stays on + disk so the agent holding it can still close it. */ + comments: loadComments().filter(comment => !comment.dismissedAt), shareUrl: state.shareUrl || null, shareVersion: state.shareVersion || null, sharePending: fs.existsSync(P.share()), @@ -1239,8 +1258,12 @@ function acceptFromReviewer (incoming) { stored.replies = replies if (!stored.sentAt && raw.sentAt) stored.sentAt = at // Answering something called done says it is not done. It is the reviewer's - // only way back in, and it needs no separate control. - if (answered && stored.state === 'closed') stored.state = 'open' + // only way back in, and it needs no separate control. Saying anything on a + // comment puts it back on the list, including one taken off it. + if (answered && stored.state === 'closed') { + stored.state = 'open' + stored.dismissedAt = null + } } return saveComments(comments) } @@ -1490,9 +1513,12 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr return sendJSON(res, 200, { ok: true, comments }) }) } - /* Taking a comment back. Only while it is still sitting here: once it has - been handed over, withdrawing it is a reply saying so, because the agent - may already have done the work and has to be told to undo it. */ + /* Taking a comment off the list. Nothing the agent holds is refused: one + already delivered may be half done, and the agent finishes what it was + given whatever the reviewer does (rule 4). So a delivered comment keeps its + record, closed and marked dismissed — the id still resolves, so the close + the agent is about to run is the no-op rule 5 promises. One that never left + the workspace has no such reader, and goes outright. */ if (p === '/api/comments/dismiss' && req.method === 'POST') { const body = JSON.parse(await readBody(req) || '{}') return withStoreLock(() => { @@ -1500,15 +1526,44 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr const target = comments.find(comment => comment.id === body.id) if (!target) return sendJSON(res, 404, { error: 'No such comment' }) if (target.deliveredAt) { - return sendJSON(res, 409, { - error: 'That one is already with the agent. Reply on it to ask for it back.', - }) + target.dismissedAt = new Date().toISOString() + target.state = 'closed' + saveComments(comments) + } else { + saveComments(comments.filter(comment => comment.id !== body.id)) } - saveComments(comments.filter(comment => comment.id !== body.id)) touch() return sendJSON(res, 200, { ok: true }) }) } + /* Taking a reply back off a thread. The union merge (rule 7) means a save + that omits a line is a stale copy, not a removal — so removal is a request + of its own, exactly as dismissing is for a comment. Only the thread's last + line can go, and only the reviewer's own: words the agent has answered are + what the answer means, and stay. The agent is not told; whatever it already + took delivery of, it finishes from (rule 4). */ + if (p === '/api/comments/unreply' && req.method === 'POST') { + const body = JSON.parse(await readBody(req) || '{}') + return withStoreLock(() => { + const comments = loadComments() + const target = comments.find(comment => comment.id === body.id) + if (!target) return sendJSON(res, 404, { error: 'No such comment' }) + const replies = target.replies || [] + const matches = reply => reply.by === REVIEWER_ROLE && + reply.at === body.at && reply.text === body.text + if (replies.length && matches(replies.at(-1))) { + target.replies = replies.slice(0, -1) + saveComments(comments) + touch() + return sendJSON(res, 200, { ok: true }) + } + // Still on the thread but no longer its last line: something has been + // said since, and the words underneath an answer are not takeable-back. + if (replies.some(matches)) return sendJSON(res, 409, { error: 'Already answered' }) + // Not found at all is already gone — a second click, or another tab. + return sendJSON(res, 200, { ok: true }) + }) + } /* Give a stranded round back to the queue. A delivered comment is not `unseen`, so a watcher armed after the session behind it died blocks and hands over nothing: the round sits where no agent @@ -1516,8 +1571,8 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr comments back where the state table says a sent, undelivered comment belongs, and the next tick takes them. Refused while a heartbeat says someone is listening, because then the round - is not stranded — an agent holds it, and pulling it out from under one is - the same race the dismiss endpoint refuses. */ + is not stranded — an agent holds it and owes an answer on it, and handing + the same comment to a second session is the race. */ if (p === '/api/comments/requeue' && req.method === 'POST') { return withStoreLock(() => { if (agentListening()) { diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index 9279851..86ca665 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -1728,19 +1728,20 @@ <h2 id="doneTitle"></h2> del: 'Delete comment', clearAll: 'Clear all', cleared: n => `Cleared ${n} comment${n > 1 ? 's' : ''}`, clearDialogTitle: 'Clear all comments?', - clearImpact: n => `This takes back ${n} comment${n === 1 ? '' : 's'} still waiting here. Anything {agent} already has stays — reply on those to ask for them back.`, + clearImpact: n => `This takes ${n} comment${n === 1 ? '' : 's'} off the list, addressed ones included. {agent} finishes whatever it is working on right now.`, + clearFail: n => `The server would not take ${n} of them off — those are still on the review.`, clearKept: 'The wireframe and version history will stay.', clearCancel: 'Cancel', clearConfirm: 'Clear all', clearHistory: 'Clear history', clearHistoryTitle: 'Delete past versions', - reset: 'Hard reset', + reset: 'Hard reset Visual Stack', resetTitle: 'Delete every comment and version, and start this review at v1', resetWorking: 'Resetting…', resetDialogTitle: 'Hard reset this review?', resetImpact: (c, v) => `This deletes ${c} comment${c === 1 ? '' : 's'} and ${v} version${v === 1 ? '' : 's'}, including everything {agent} has already answered. It cannot be undone.`, resetImpactLive: c => `This deletes ${c} comment${c === 1 ? '' : 's'}, including everything {agent} has already answered. It cannot be undone.`, - resetKept: 'The page under review stays as it is, and becomes v1 again.', - resetKeptLive: 'The app stays exactly as it is — only the review starts again.', + resetKept: 'Nothing {agent} changed is undone. The page keeps every edit it has made, and becomes v1 again.', + resetKeptLive: 'Nothing {agent} changed is undone. The app stays exactly as it is — only the review starts again.', resetCancel: 'Keep it', resetConfirm: 'Hard reset', resetDone: 'The review starts again at v1', @@ -1814,10 +1815,12 @@ <h2 id="doneTitle"></h2> dismiss: 'Dismiss', dismissTitle: 'Take this off the list', more: 'More', sendOne: 'Send just this one to {agent}', - dismissed: 'Taken back', - withdrawByReply: '{agent} already has this one — say what you want undone.', + dismissed: 'Taken off the list', + dismissedWorking: 'Taken off your list — {agent} is already working on it.', + dismissFail: 'The server would not take that one off — it is still on the review.', closedSome: n => `{agent} closed ${n} comment${n > 1 ? 's' : ''}`, undoReply: 'Take back this reply', + undoReplyFail: 'That reply could not be taken back — it is still on the thread.', revertNote: 'Revert this change — put it back the way it was before.', approve: 'Approve & finish', approveSure: 'Approve & close the review?', approvedTitle: 'Approved — the review is closed', @@ -1859,19 +1862,20 @@ <h2 id="doneTitle"></h2> del: '删除批注', clearAll: '全部清除', cleared: n => `已清除 ${n} 条批注`, clearDialogTitle: '清除所有批注?', - clearImpact: n => `这会收回还在等待的 ${n} 条批注。{agent} 已收到的不受影响 — 请在那些批注上回复说明。`, + clearImpact: n => `这会从列表中移除 ${n} 条批注,包括已处理的。{agent} 仍会完成正在处理的内容。`, + clearFail: n => `服务器未能移除其中 ${n} 条 — 它们仍在本次评审中。`, clearKept: '线框图和版本历史都会保留。', clearCancel: '取消', clearConfirm: '全部清除', clearHistory: '清除历史', clearHistoryTitle: '删除过往版本', - reset: '硬重置', + reset: '硬重置 Visual Stack', resetTitle: '删除所有批注与版本,本次评审从 v1 重新开始', resetWorking: '正在重置…', resetDialogTitle: '硬重置本次评审?', resetImpact: (c, v) => `这会删除 ${c} 条批注和 ${v} 个版本,包括 {agent} 已处理的内容,且无法撤销。`, resetImpactLive: c => `这会删除 ${c} 条批注,包括 {agent} 已处理的内容,且无法撤销。`, - resetKept: '被评审的页面保持不变,并重新成为 v1。', - resetKeptLive: '应用本身保持不变 — 只有评审重新开始。', + resetKept: '{agent} 所做的改动不会被撤销。页面保留全部改动,并重新成为 v1。', + resetKeptLive: '{agent} 所做的改动不会被撤销。应用保持不变 — 只有评审重新开始。', resetCancel: '保留', resetConfirm: '硬重置', resetDone: '评审已从 v1 重新开始', @@ -1940,10 +1944,12 @@ <h2 id="doneTitle"></h2> dismiss: '不用管了', dismissTitle: '从列表中移除', more: '更多', sendOne: '只发送这一条给 {agent}', - dismissed: '已收回', - withdrawByReply: '{agent} 已收到这条 — 请说明需要撤销什么。', + dismissed: '已从列表中移除', + dismissedWorking: '已从你的列表中移除 — {agent} 仍在处理这条。', + dismissFail: '服务器未能移除这条 — 它仍在本次评审中。', closedSome: n => `{agent} 关闭了 ${n} 条批注`, undoReply: '撤回这条回复', + undoReplyFail: '这条回复未能撤回 — 它仍在会话中。', revertNote: '撤销这处改动——恢复成修改之前的样子。', approve: '批准并结束', approveSure: '确定批准并关闭评审?', approvedTitle: '已批准 — 评审已关闭', @@ -2027,6 +2033,8 @@ <h2 id="doneTitle"></h2> threadOpen: new Set(), focusReply: null, // Deleted in this tab — never to be folded back in by a refresh. forgotten: new Set(), + // Replies taken back in this tab, by thread key, for the same reason. + retracted: new Set(), pendingUpdate: null, linked: null, // null until the connection has actually said one way or other // The shareable Artifact: asked for here, published by Claude, link comes back. @@ -2250,9 +2258,13 @@ <h2 id="doneTitle"></h2> const quiet = working > 0 ? quietFor() : 0; const stalled = isStalled(); /* Nothing else calls this while the page sits there waiting, so the strip has - to wake itself up to change its own mind. */ + to wake itself up to change its own mind. The heartbeat stopping is what + renders here, so the wait is armed on the round being quiet rather than on + how long it has been quiet — that is still zero on the render the presence + event triggers, and no further event is coming. */ clearTimeout(stallTimer); - stallTimer = quiet && !stalled ? setTimeout(renderWork, STALL_MS - quiet) : null; + stallTimer = working && !stalled && S.watching === false + ? setTimeout(renderWork, Math.max(0, STALL_MS - quiet)) : null; $('#pwork').hidden = !working && !queued; $('#pwork').classList.toggle('stalled', stalled); const again = $('#btnAgain'); @@ -2304,13 +2316,20 @@ <h2 id="doneTitle"></h2> function mergeComments (serverComments) { let changed = false, agentSpoke = false, closed = 0; const seen = new Set(); + /* The server leaves a dismissed comment out of the payload, so a payload + without it is the confirmation this tab was waiting for. Stop hiding the id + then: a reply reopens a dismissed comment, and it has to be able to come + back. Anything still listed is a payload the dismissal had not reached. */ + const arriving = new Set(serverComments.map(c => c.id)); + for (const id of S.forgotten) if (!arriving.has(id)) S.forgotten.delete(id); for (const incoming of serverComments) { // Deleted here a moment ago, and the server has not been told yet. if (S.forgotten.has(incoming.id)) continue; seen.add(incoming.id); const local = annById(incoming.id); if (!local) { S.ann.push(normalise(incoming)); changed = true; continue } - const merged = mergeReplies(local.replies, incoming.replies); + const merged = mergeReplies(local.replies, + (incoming.replies || []).filter(r => !S.retracted.has(replyKey(r)))); if (merged.length !== (local.replies || []).length) { local.replies = merged; S.threadOpen.add(local.id); changed = true; @@ -2333,9 +2352,10 @@ <h2 id="doneTitle"></h2> } /** Two copies of one append-only thread, merged into the whole of it. */ +const replyKey = r => `${r.by}|${r.at}|${r.text}`; function mergeReplies (mine = [], theirs = []) { const byKey = new Map(); - for (const reply of [...mine, ...theirs]) byKey.set(`${reply.by}|${reply.at}|${reply.text}`, reply); + for (const reply of [...mine, ...theirs]) byKey.set(replyKey(reply), reply); return [...byKey.values()].sort((a, b) => Date.parse(a.at || 0) - Date.parse(b.at || 0)); } @@ -3499,13 +3519,23 @@ <h2 id="doneTitle"></h2> what the review contains — the server keeps whatever a save leaves out, which is what a second tab depends on — so a comment dropped from the payload is not deleted, and would come back on the next refresh. */ -function forgetOnServer (id) { +/** True when the review no longer holds the comment. A server that refuses is + the one case this tab must not paper over: dropping the card anyway shows a + review the server disagrees with, and the next refresh brings the comment + back with nothing said about why. */ +async function forgetOnServer (id) { S.forgotten.add(id); - if (S.runtime === 'artifact') return; - fetch(API + '/comments/dismiss', { - method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ id }), - }).catch(() => {}); + if (S.runtime === 'artifact') return true; + try { + const response = await fetch(API + '/comments/dismiss', { + method: 'POST', headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id }), + }); + // Already gone is gone — a second click, or another tab that got there first. + if (response.ok || response.status === 404) return true; + } catch {} + S.forgotten.delete(id); + return false; } function removeComment (id) { @@ -3522,9 +3552,9 @@ <h2 id="doneTitle"></h2> struck out. Words on top of one are welcome and never required. */ const SELF_EVIDENT = new Set(['move', 'strike']); const hasSubstance = a => !!(a.note || '').trim() || SELF_EVIDENT.has(a.kind); -/** Everything the panel can actually clear: what is still queued here. Once - Claude has been handed a comment, asking for it back is a reply on it. */ -const activeComments = () => S.ann.filter(a => hasSubstance(a) && !a.deliveredAt); +/** Every comment on the list, whoever is holding it — Clear all is the × on + each card done in one go, so it reaches exactly what the cards do. */ +const listedComments = () => S.ann.filter(hasSubstance); /** A general comment that has just been made and has nothing in it yet. */ const blank = a => !!a._fresh && a.kind === 'general'; /* Once a comment is sent it is a record of what was asked, not a draft: the @@ -3660,35 +3690,54 @@ <h2 id="doneTitle"></h2> } /** - * The × on a card. A comment still waiting here is simply taken back. One - * Claude already holds is not: it may already have been acted on, so asking for - * it back is a reply saying so, and Claude closes it when the undoing is done. + * The × on a card. It takes the comment off the list, whatever state it is in: + * a draft goes, one queued here never goes out, and an addressed one stops + * being something to read. The one Claude is working on right now is the + * exception worth saying out loud — it is off your list, and Claude carries on + * with what it was already given. */ async function takeOff (a) { if (isHistory()) return; - if (a.deliveredAt) { - S.threadOpen.add(a.id); - S.focusReply = a.id; - render(); - toast(T('withdrawByReply')); - return; - } + const working = isWorking(a); S.threadOpen.delete(a.id); replyDrafts.delete(a.id); if (S.sel === a.id) closeComposer(); - forgetOnServer(a.id); removeComment(a.id); - toast(T('dismissed')); + toast(T(working ? 'dismissedWorking' : 'dismissed')); + if (await forgetOnServer(a.id)) return; + // The card goes the moment it is clicked, so it has to come back the moment + // the server says it did not. + S.ann.push(a); + render(); + toast(T('dismissFail')); } -/** Take back the reply you just wrote, while Claude has yet to see it. */ -function undoReply (a, i) { +/** Take back the reply you wrote. A save that omits it would read as a stale + tab and be merged straight back, so removal is its own request — the same + shape as dismissing a card. The server refuses once something has been said + over it, and then the line comes back rather than this tab disagreeing. */ +async function undoReply (a, i) { if (isHistory()) return; const reps = a.replies || []; - if (i !== reps.length - 1 || reps[i]?.by !== 'reviewer') return; + const reply = reps[i]; + if (i !== reps.length - 1 || reply?.by !== 'reviewer') return; + S.retracted.add(replyKey(reply)); reps.splice(i, 1); save(); render(); + if (S.runtime === 'artifact') return; + try { + const response = await fetch(API + '/comments/unreply', { + method: 'POST', headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id: a.id, at: reply.at, text: reply.text }), + }); + // A comment already gone took its thread with it. + if (response.ok || response.status === 404) return; + } catch {} + S.retracted.delete(replyKey(reply)); + a.replies = mergeReplies(a.replies, [reply]); + render(); + toast(T('undoReplyFail')); } /** @@ -3765,8 +3814,8 @@ <h2 id="doneTitle"></h2> } /** The whole exchange, and the box to answer it in, without leaving the list. */ function threadBox (a) { - // Your last word, with nothing said back yet, is the one thing here that has - // not gone anywhere — so it is the one thing you can take back. + // Your last word, with nothing said over it yet, is the one line the thread + // can still let go of — so it is the one thing you can take back. const pending = (i, m, all) => !isHistory() && m.by === 'reviewer' && i === all.length - 1; const msgs = (a.replies || []).map((m, i, all) => `<div class="tmsg${isAgent(m.by) ? ' agent' : ''}"> @@ -4058,11 +4107,14 @@ <h2 id="doneTitle"></h2> for (const a of elsewhere) body.appendChild(itemNode(a, { otherSize: true })); if (done.length) { /* What Claude has just closed is the part you want to check; what it - closed a while ago is a record. Closing stamps the comment, so recent is - read off the comments rather than guessed from the version. */ - const newest = Math.max(...done.map(a => Date.parse(a.closedAt || 0)), 0); - const recent = done.filter(a => newest - Date.parse(a.closedAt || 0) < 60_000); - const older = done.filter(a => !recent.includes(a)); + closed a while ago is a record. Closing stamps the comment, so each one + carries its own answer and nothing here reads the rest of the list: + measured against the newest comment still in it, taking that one off + promoted the whole batch beneath it back into view. A comment closed + before the stamp existed has none, and is a record. */ + const justClosed = a => Date.now() - Date.parse(a.closedAt || '') < 60_000; + const recent = done.filter(justClosed); + const older = done.filter(a => !justClosed(a)); body.appendChild(group(T('addressedGroup')(done.length))); for (const a of recent) body.appendChild(itemNode(a, { done: true })); if (older.length) { @@ -4270,9 +4322,9 @@ <h2 id="doneTitle"></h2> } function renderCounts () { // Every comment still to be dealt with, whoever is holding it — and, apart - // from it, the ones Clear all can still speak for. + // from it, everything on the list, which is what Clear all takes off. const open = S.ann.filter(a => isOpen(a) && hasSubstance(a)); - const clearable = activeComments(); + const clearable = listedComments(); $('#counts').innerHTML = open.length ? `<b>${open.length}</b> ${esc(T('open').toLowerCase())}` + (open.some(a => awaitsReply(a)) ? '<br>' + esc(T('waiting')) : '') @@ -4289,34 +4341,37 @@ <h2 id="doneTitle"></h2> const dialog = $('#clearDialog'); if (!dialog.open) return; $('#clearDialogTitle').textContent = T('clearDialogTitle'); - $('#clearDialogImpact').textContent = T('clearImpact')(activeComments().length); + $('#clearDialogImpact').textContent = T('clearImpact')(listedComments().length); $('#clearDialogKept').textContent = T('clearKept'); $('#btnCancelClear').textContent = T('clearCancel'); $('#btnConfirmClear').textContent = T('clearConfirm'); } function openClearDialog () { - if (isHistory() || !activeComments().length) return; + if (isHistory() || !listedComments().length) return; const dialog = $('#clearDialog'); if (!dialog.open) dialog.showModal(); renderClearDialog(); $('#btnCancelClear').focus(); } -function confirmClearComments () { +async function confirmClearComments () { if (isHistory()) return; closeComposer(); - const n = activeComments().length; $('#clearDialog').close(); - if (!n) return; - /* Only what is still waiting here. A comment Claude already holds may have - been acted on, so taking that one back is a reply asking for it — clearing - a queue cannot speak for those. */ - const going = activeComments().map(a => a.id); - for (const id of going) forgetOnServer(id); - S.ann = S.ann.filter(a => !going.includes(a.id)); + const going = listedComments(); + if (!going.length) return; + S.ann = S.ann.filter(a => !going.includes(a)); save(); render(); toast(T('cleared')(going.length)); + // Same honesty as the × on one card: whatever the server would not take off + // is still on the review, so it goes back on the list. + const results = await Promise.all(going.map(a => forgetOnServer(a.id).then(ok => ({ a, ok })))); + const kept = results.filter(r => !r.ok).map(r => r.a); + if (!kept.length) return; + S.ann.push(...kept); + render(); + toast(T('clearFail')(kept.length)); } /* The button has to say what is behind it, because a folded-away panel says diff --git a/plugins/vstack/skills/review/hosts/codex.md b/plugins/vstack/skills/review/hosts/codex.md index bd899cf..9ef51d4 100644 --- a/plugins/vstack/skills/review/hosts/codex.md +++ b/plugins/vstack/skills/review/hosts/codex.md @@ -18,7 +18,7 @@ node "$SKILL/assets/review-server.mjs" serve --file "$FILE" --port 7788 --host c | `background(cmd)` | persistent shell execution (`exec_command`) | Start with a short yield and retain the returned session id. The review server must stay alive. | | `watch_stream(cmd)` | a second persistent `exec_command`, then `write_stdin` | Run `watch --all --stream`; poll the session with an empty write, normally for 30 seconds at a time, until it emits an event. Keep polling while reviews remain open. | | `stop(handle)` | `write_stdin` | Send Ctrl-C (`\u0003`) to the retained server or watcher session. | -| `run(cmd)` | foreground `exec_command` | Use for `publish`, `reply`, `ack`, `share`, and `status`. | +| `run(cmd)` | foreground `exec_command` | Use for `publish`, `reply`, `ack`, `share`, `status`, and `unanswered`. | | `edit` | `apply_patch` | Change the wireframe or application source without overwriting unrelated work. | | `share(file)` | no generic public Artifact publisher | Profile uses `capabilities.share: copy`; offer the HTML file or an offline bundle instead of inventing a URL. | | `browser_capture` | Codex Browser controls, when installed | Navigate, resize, screenshot, and run `harvest-reference.js`. If Browser is unavailable, use screenshots supplied by the user. | @@ -54,7 +54,10 @@ normal persistent command session: 3. Answer the `HANDSHAKE` line the stream opens with, using `run`: `ack --all --token <token>`. The watcher goes live once you do; answer within two minutes. 4. On `REVIEW`, `REPLIED`, `SHARE`, `APPROVED`, or `CLOSED`, follow the core skill and review-loop contract. -5. Resume polling after each publish. Do not send the final response +5. Run `unanswered --all` before you end a turn, and settle whatever it names. + Codex cannot gate the end of a turn, so rule 14 of + [review-loop.md](../../../contracts/review-loop.md) is yours to keep. +6. Resume polling after each publish. Do not send the final response while the review is still active; keep the Codex turn open until approval, closure, or an explicit request from the user to stop. diff --git a/plugins/vstack/skills/review/hosts/grok.md b/plugins/vstack/skills/review/hosts/grok.md index 7de8abc..f349caf 100644 --- a/plugins/vstack/skills/review/hosts/grok.md +++ b/plugins/vstack/skills/review/hosts/grok.md @@ -20,7 +20,7 @@ export VSTACK_HOST=grok | `background(cmd)` | `run_terminal_command` with `background: true` | `serve` must outlive the turn | | `watch_stream(cmd)` | **`monitor`** tool, `persistent: true` | `watch --all --stream` — each stdout line is a chat event | | `stop(handle)` | `kill_command_or_subagent` with the task id | After approve or when ending the review | -| `run(cmd)` | `run_terminal_command` (foreground) | `publish`, `reply`, `ack`, `status` | +| `run(cmd)` | `run_terminal_command` (foreground) | `publish`, `reply`, `ack`, `status`, `unanswered` | | `edit` | file edit tools (`search_replace`, `write`, …) | HTML wireframe or app source | | `share(file)` | **Not available** as a public Artifact | Profile `capabilities.share: copy` — do not run the share-URL flow; UI hides “Publish a link” | | `browser_capture` | Browser MCP / chrome-devtools when connected | Otherwise use user screenshots per skill §2 | @@ -64,6 +64,10 @@ When `monitor` delivers a line: | `APPROVED` | Confirm; offer next pipeline stage if applicable | | `CLOSED` | Note the review ended | +Run `unanswered --all` before you end a turn, and settle whatever it names. +Grok cannot gate the end of a turn, so rule 14 of +[review-loop.md](../../../contracts/review-loop.md) is yours to keep. + --- ## Install / discovery diff --git a/plugins/vstack/skills/review/tests/review-lifecycle.mjs b/plugins/vstack/skills/review/tests/review-lifecycle.mjs index 6c872c5..f81e14b 100644 --- a/plugins/vstack/skills/review/tests/review-lifecycle.mjs +++ b/plugins/vstack/skills/review/tests/review-lifecycle.mjs @@ -190,9 +190,14 @@ try { await send([comment('c5', 'Fifth')]) tick() dismissed = await post('/api/comments/dismiss', { id: 'c5' }) - assert.equal(dismissed.response.status, 409, - 'once it is with the agent, taking it back is a reply asking for it back') - assert.match(dismissed.body.error, /Reply on it/) + assert.equal(dismissed.response.status, 200, 'a comment is the reviewer\'s to take off the list') + assert.ok(byId('c5').dismissedAt, 'one already delivered keeps its record') + assert.equal(byId('c5').state, 'closed', 'and nothing raises it again') + const gone = await request('/api/project') + assert.equal(gone.body.comments.find(item => item.id === 'c5'), undefined, + 'the workspace never shows it again') + assert.equal(cli('publish', '--close', 'c5').status, 0, + 'the agent holding it can still close what it was given') /* ── the agent cannot close what it was never given ── */ @@ -200,10 +205,11 @@ try { const early = cli('publish', '--close', 'c6') assert.equal(early.status, 2) assert.match(early.stderr, /c6 has not been sent yet/) - const unknown = cli('publish', '--close', 'c5,c404') + await send([comment('c7', 'Seventh')]) + const unknown = cli('publish', '--close', 'c7,c404') assert.equal(unknown.status, 2) assert.match(unknown.stderr, /c404 is not a comment on this review/) - assert.equal(byId('c5').state, 'open', 'a rejected close changes nothing at all') + assert.equal(byId('c7').state, 'open', 'a rejected close changes nothing at all') /* ── a store written by an older version is read where it lies ── */ diff --git a/plugins/vstack/skills/review/tests/round-gate.mjs b/plugins/vstack/skills/review/tests/round-gate.mjs index 783eb7e..71a8f10 100644 --- a/plugins/vstack/skills/review/tests/round-gate.mjs +++ b/plugins/vstack/skills/review/tests/round-gate.mjs @@ -78,6 +78,8 @@ try { assert.equal(owed.status, 1, 'a delivered comment with nothing said about it is outstanding') assert.match(owed.stdout, /c1/, 'it names the comment') assert.match(owed.stdout, /publish .* --close c1/, 'it names the command that settles it') + assert.equal(owed.stdout.match(/you took delivery of/g).length, 1, + 'one review is reported once, however many ways its store is reached') const blocked = gate() assert.equal(blocked?.decision, 'block', 'the gate holds the turn open') @@ -91,6 +93,18 @@ try { assert.equal(cli('reply', '--file', page, '--comment', 'c1', '--text', 'How much bigger?').status, 0) assert.equal(cli('unanswered', '--all').status, 0, 'a reply hands the round back') + // The reviewer writes about something else while c1 waits on them. Every tick + // re-stamps delivery on every open comment, so c1 is handed over again — but + // the agent has had its say on it and owes only the comment it has not. + await post('/api/comments', { comments: [comment('c3', 'And centre the footer')] }) + assert.match(tick().stdout, /REVIEW/, 'the new comment is handed over') + const alongside = cli('unanswered', '--all') + assert.equal(alongside.status, 1, 'the comment nothing has been said about is outstanding') + assert.match(alongside.stdout, /c3/, 'it names that comment') + assert.doesNotMatch(alongside.stdout, /c1/, + 'being handed a comment again does not unanswer the reply already on it') + assert.equal(cli('publish', '--file', page, '--close', 'c3', '--label', 'Footer centred').status, 0) + // The reviewer answers. That comment is waiting for the next tick, not for // the agent, so it must not hold the turn open. const answered = { by: 'reviewer', text: 'Twice', at: new Date().toISOString() } @@ -106,6 +120,15 @@ try { assert.equal(cli('unanswered', '--all').status, 0, 'closing hands the round back') assert.equal(gate(), null, 'the gate lets the turn end') + // The reviewer takes a delivered comment off the list. It is no longer on the + // review, so there is nothing left to answer and the turn can end. + await post('/api/comments', { comments: [comment('cx', 'Never mind this one')] }) + assert.match(tick().stdout, /REVIEW/, 'it is handed over first') + assert.equal(cli('unanswered', '--all').status, 1, 'and it is outstanding while it stands') + await post('/api/comments/dismiss', { id: 'cx' }) + assert.equal(cli('unanswered', '--all').status, 0, 'a comment taken off the list owes nothing') + assert.equal(gate(), null, 'the gate lets the turn end') + // A review nobody is looking at is over. `--all` reads live stores only, so // the gate cannot strand a session on a round whose tab has gone. await post('/api/comments', { comments: [comment('c2', 'And centre it')] }) From e8220969d6e830bfb376123aec756a3611767325 Mon Sep 17 00:00:00 2001 From: DeyangChan <adam@cavalry.online> Date: Sat, 8 Aug 2026 12:26:15 +0800 Subject: [PATCH 10/19] An overlay in the reviewed app opens where the reviewer is looking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The frame is sized to the page's full height so comment coordinates are document coordinates. Inside the frame that makes the CSS viewport the whole document, so anything the app pins to its viewport — a fixed overlay, a native dialog's top layer — lands screens away from what is on screen. While such an overlay is up, hold the frame at one viewport tall and move the outer scroll into the page itself; hand it back and refit when the overlay closes. Marks convert through the frame's own scroll at both edges, so they hold in either state. Opening an overlay changes no layout the body's ResizeObserver can see, so the mutation watcher asks directly whether the state flipped. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- .../skills/review/assets/workspace.html | 66 ++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index 86ca665..0dbe12e 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -2759,23 +2759,83 @@ <h2 id="doneTitle"></h2> result collapses the whole page to nothing. Measure at the viewport height and only let a document that genuinely overflows grow — and only if that growth settles. A layout that keeps growing as we grow it is viewport-driven, so it - stays exactly one viewport tall and scrolls its own panes, like a real browser. */ -let sizingFrame = false; + stays exactly one viewport tall and scrolls its own panes, like a real browser. + + Full height has one cost: inside the frame the CSS viewport IS the document, + so anything the page centres or pins against its viewport — a fixed overlay, + a native dialog's top layer — lands screens away from where the reviewer is + looking. While such an overlay is up, hold the frame at exactly one viewport + tall and move the outer scroll into the page itself, so the overlay sits over + what the reviewer can see; when it closes, hand the scroll back and refit. + Marks convert through the frame's own scroll at both edges, so they hold in + either state. */ +function frameModalOpen () { + const win = fwin(); + if (!win || !fdoc?.body) return false; + const shownFixed = el => { + const cs = win.getComputedStyle(el); + if (cs.position !== 'fixed' || cs.display === 'none' || cs.visibility === 'hidden') return false; + const r = el.getBoundingClientRect(); + return r.width > 0 && r.height > 0; + }; + try { + // Fixed, not merely open: a non-modal dialog.show() sits in the flow and + // behaves the same here as in a real browser. + for (const el of fdoc.querySelectorAll('dialog[open], [aria-modal="true"], [role="dialog"], [role="alertdialog"]')) + if (shownFixed(el)) return true; + // A fixed layer covering the whole viewport is a backdrop even unlabelled. + // Overlays portal to the body, so only its children and grandchildren are + // worth asking. + for (const child of fdoc.body.children) + for (const el of [child, ...child.children]) + if (shownFixed(el)) { + const r = el.getBoundingClientRect(); + if (r.width >= win.innerWidth * 0.9 && r.height >= win.innerHeight * 0.9) return true; + } + } catch {} + return false; +} +let sizingFrame = false, modalViewport = false; function fitFrameHeight () { if (!fdoc) return 0; const vh = S.size.height; const apply = h => { frame.style.height = h + 'px'; scroller.style.height = h + 'px' }; const measure = () => Math.max(fdoc.documentElement.scrollHeight, fdoc.body?.scrollHeight || 0, 1); sizingFrame = true; + if (frameModalOpen()) { + // Read the outer scroll before the frame shrinks and clamps it away. + const outer = modalViewport ? 0 : vpBox.scrollTop; + modalViewport = true; + apply(vh); + if (outer) try { fwin().scrollTo(0, outer) } catch {} + requestAnimationFrame(() => { sizingFrame = false }); + return vh; + } + const inner = modalViewport ? (fwin()?.scrollY || 0) : 0; + modalViewport = false; apply(vh); const natural = measure(); if (natural > vh + 2) { apply(natural); if (measure() > natural + 2) apply(vh); } + if (inner) vpBox.scrollTop = inner; requestAnimationFrame(() => { sizingFrame = false }); return parseFloat(frame.style.height) || 0; } +/* Opening a fixed overlay changes no layout the body's ResizeObserver can see, + so the mutation watcher asks directly whether the modal state flipped. */ +let modalFitQueued = false; +function syncModalFit () { + if (modalFitQueued) return; + modalFitQueued = true; + requestAnimationFrame(() => { + modalFitQueued = false; + if (!fdoc || frameModalOpen() === modalViewport) return; + fitFrameHeight(); + drawMarks(); + }); +} let refitQueued = false; function sizeFrame () { if (!fdoc) return; @@ -3375,7 +3435,7 @@ <h2 id="doneTitle"></h2> if (!fdoc) return; try { frame._mo?.disconnect() } catch {} // The page moved: anything we failed to find last time is worth another look. - const mo = frame._mo = new MutationObserver(() => { domEpoch++; scheduleSync() }); + const mo = frame._mo = new MutationObserver(() => { domEpoch++; syncModalFit(); scheduleSync() }); try { mo.observe(fdoc.documentElement, { childList: true, subtree: true, attributes: true, From c7469e2b99aa6cf143f9667c9b7cc7f69a46e9da Mon Sep 17 00:00:00 2001 From: DeyangChan <adam@cavalry.online> Date: Sat, 8 Aug 2026 12:26:26 +0800 Subject: [PATCH 11/19] A comment that changes place in the list travels there MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The panel is rebuilt from scratch on every change, so a card that moves — the question you have just answered leaving the top of the list — arrived in its new place with nothing to follow. Measure every row before the rebuild and play each one back from where it was. A moving card rides over the rows it passes, so which one is on top does not depend on which way it is travelling. Nothing moves under `prefers-reduced-motion: reduce`. Emptying the list also scrolled the panel back to the top on every render. Put the reader's scroll position back before anything is measured against it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- .../skills/review/assets/workspace.html | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index 0dbe12e..92f0e54 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -4121,6 +4121,7 @@ <h2 id="doneTitle"></h2> numberComments(); renderWork(); const body = $('#pbody'); + const wasAt = rowTops(body), wasScrolled = body.scrollTop; body.innerHTML = ''; $('#pscope').textContent = isHistory() ? T('readOnly')(S.viewing) : sizeLabel(S.size.id); // "Open" means unfinished — a comment Claude has asked a question about is @@ -4185,6 +4186,10 @@ <h2 id="doneTitle"></h2> if (S.doneOpen) for (const a of older) body.appendChild(itemNode(a, { done: true })); } } + // Emptying the list scrolled it back to the top. Put it where the reader + // left it before anything is measured against it. + body.scrollTop = wasScrolled; + slideRowsFrom(body, wasAt); // The list is rebuilt whenever anything moves, including while a reply is // being typed into it. Put the cursor back where it was. if (S.focusReply) { @@ -4196,6 +4201,36 @@ <h2 id="doneTitle"></h2> } renderCounts(); } +/** Where every row in the list sits right now, keyed so the same row can be + found again after the rebuild. Cards carry an id; headings are told apart by + the order they appear in, because their text changes with their count. */ +function rowTops (body) { + const tops = new Map(); + let heading = 0; + for (const el of body.children) { + tops.set(el.dataset.id ? 'c' + el.dataset.id : 'h' + heading++, el.getBoundingClientRect().top); + } + return tops; +} +/** Move each row from where it used to be to where it now is. The panel is + rebuilt from scratch on every change, so a comment that changes group — the + question you have just answered leaving the top of the list — otherwise + arrives in its new place with nothing to follow. */ +function slideRowsFrom (body, tops) { + if (!tops.size || !body.firstChild?.animate) return; + if (matchMedia('(prefers-reduced-motion:reduce)').matches) return; + let heading = 0; + for (const el of body.children) { + const was = tops.get(el.dataset.id ? 'c' + el.dataset.id : 'h' + heading++); + if (was == null) continue; + const travel = was - el.getBoundingClientRect().top; + if (Math.abs(travel) < 1) continue; + // Over the rows it passes, not under them: which card is on top otherwise + // depends on which way it happens to be travelling through the list. + el.animate([{ transform: `translateY(${travel}px)`, zIndex: 1 }, { transform: 'none', zIndex: 1 }], + { duration: 280, easing: 'cubic-bezier(.22,.68,.31,1)' }); + } +} /** Only one card's menu at a time, and any click outside shuts it. */ function closeItemMenus () { for (const m of $$('.imenu')) m.hidden = true; From 917df704e73459bb8fd91deb890cd3983a32389c Mon Sep 17 00:00:00 2001 From: DeyangChan <adam@cavalry.online> Date: Sat, 8 Aug 2026 13:16:41 +0800 Subject: [PATCH 12/19] A round belongs to the session whose watcher took delivery of it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With two agent sessions open in the same directory, the Stop hook gated whichever one was ending its turn, and told the uninvolved session it owed answers on comments it had never seen — ids and close command included. Delivery recorded when a comment was handed over but not to whom, so every session standing in the directory looked equally responsible for every live review under it. Delivery now records the identity the watcher was started with (`watch --session <id>`, supplied by the host adapter — on Claude Code, CLAUDE_CODE_SESSION_ID, which is the same id the Stop payload carries), and the gate asks `unanswered --session <id>`, so it holds only the session whose watcher took the round. A delivery recorded without an identity gates no one: the failure mode is a round that waits, never a wrong session held. The same discovery fed `watch --all`, so a second session's sweep could cover the first session's reviews and take delivery of its comments. The sweep now leaves a store alone while its `watching` heartbeat is fresh, and a `--file` name remains the deliberate takeover. Rules 16 and 17 of contracts/review-loop.md state both. The event-log redesign that would also close the simultaneous-adoption race is recorded in docs/review-wishlist.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --- CHANGELOG.md | 23 +++++++++ docs/review-wishlist.md | 34 ++++++++++++++ plugins/vstack/.claude-plugin/plugin.json | 2 +- plugins/vstack/.codex-plugin/plugin.json | 2 +- plugins/vstack/contracts/review-loop.md | 9 ++-- plugins/vstack/hooks/round-gate.mjs | 6 ++- plugins/vstack/skills/review/SKILL.md | 10 +++- .../skills/review/assets/review-server.mjs | 47 +++++++++++++++---- plugins/vstack/skills/review/hosts/claude.md | 17 ++++--- .../vstack/skills/review/tests/round-gate.mjs | 27 +++++++++++ 10 files changed, 155 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 802ca64..fdb00c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,29 @@ The version in `plugins/vstack/.claude-plugin/plugin.json` is what your host compares against to decide an update is available. See the release checklist in [`CONTRIBUTING.md`](CONTRIBUTING.md). +## 6.1.0 — 2026-08-08 + +**Fixed** + +- **A second session in the same project was gated on a review it had never + seen.** With two agent sessions open in one directory, the Stop hook told the + uninvolved one it owed answers on another session's comments — naming the ids + and the command that would close them, which invited the wrong session to + finish someone else's round. Delivery now records the session it went to: the + watcher is started with `--session <id>` (the host adapter supplies the id), + and the gate asks `unanswered --session <id>`, so it holds only the session + whose watcher took delivery. A delivery recorded without an identity gates no + one. + +**Added** + +- **A watcher never covers a review another session already covers.** + `watch --all` leaves a store alone while its `watching` heartbeat is fresh, + and takes it once that heartbeat is gone — so a second session's sweep cannot + take delivery of comments meant for the first. Naming the page with `--file` + still covers it regardless: that is the deliberate way to adopt a review from + a watcher that is stuck. + ## 6.0.0 — 2026-08-06 **Breaking** diff --git a/docs/review-wishlist.md b/docs/review-wishlist.md index b0a8e69..673a342 100644 --- a/docs/review-wishlist.md +++ b/docs/review-wishlist.md @@ -3,6 +3,40 @@ Features that have been considered for the review tool and are not being built yet. Each entry says what it has to do to ship. An entry stays here until its acceptance criteria can be met. +## Derive review state from an event log + +**What it should do.** A review's store holds an append-only log of events — sent, delivered, +replied, closed, claimed — and every reader derives state by replaying it. The same log and the +same question always give the same answer, so the gate's verdict is reproducible, a dispute about +how a round got into a state is settled by reading the log, and contention is settled by append +order instead of by locks. + +**Acceptance criteria.** + +1. The CLI surface is unchanged: every subcommand answers exactly as it does today, derived from + the log instead of from mutated records. +2. Replaying a store's log reproduces its state, and `unanswered --session <id>` is a pure + function of the log and the id. A test is a hand-written log and an expected verdict. +3. The first `claimed` event in the log wins a contested store. A watcher that lost reads that + back and stands down, so two watchers sweeping the same store in the same second can no longer + both adopt it. +4. A store written by the current version is read as the log's seed state. Nothing is migrated + behind the user's back. +5. A line torn by a crash mid-append is ignored by every reader, and events are single-line + appends small enough to be atomic on a local filesystem. + +**What it needs.** A rewrite of the persistence layer in `review-server.mjs` — every subcommand +that reads or writes round state, a fold that derives state from events, and the test suites +rebuilt around log fixtures. This is the engine's core rewritten while it works, so it ships as +its own release, not alongside a feature. Liveness stays out of the log: the `watching` heartbeat +is ephemeral and remains a file beside it. + +**Until then.** Ownership is a recorded field. Delivery stamps `deliveredTo` with the watcher's +`--session` id, the Stop hook asks `unanswered --session <id>`, and `watch --all` skips a store +whose heartbeat says another watcher covers it. The one gap this leaves is criterion 3's race: +two watchers that scan the same unclaimed store in the same moment can both adopt it, and the +round then belongs to whichever delivered last. + ## Stop a round in flight **Status: withdrawn on 5 August 2026**, after an implementation that could not meet criterion 1. diff --git a/plugins/vstack/.claude-plugin/plugin.json b/plugins/vstack/.claude-plugin/plugin.json index b701903..58c6521 100644 --- a/plugins/vstack/.claude-plugin/plugin.json +++ b/plugins/vstack/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "vstack", "displayName": "Visual Stack", - "version": "6.0.0", + "version": "6.1.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Claude Code. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Claude publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/.codex-plugin/plugin.json b/plugins/vstack/.codex-plugin/plugin.json index 4b194c3..89014c7 100644 --- a/plugins/vstack/.codex-plugin/plugin.json +++ b/plugins/vstack/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "vstack", - "version": "6.0.0", + "version": "6.1.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Codex. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Codex publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/contracts/review-loop.md b/plugins/vstack/contracts/review-loop.md index f58804d..2382e14 100644 --- a/plugins/vstack/contracts/review-loop.md +++ b/plugins/vstack/contracts/review-loop.md @@ -48,6 +48,7 @@ calls a comment done. Everything the workspace shows is derived from that list. | `replies` | `{ by, text, at }[]`, append-only | | `sentAt` | The reviewer let go of it. Null means it is still a draft | | `deliveredAt` | The agent was last handed it. Null means it is still queued here | +| `deliveredTo` | The session the last delivery was recorded for — the `--session` id its watcher was started with. Null when the watcher carried no identity | | `dismissedAt` | The reviewer took it off the list after it had been delivered. The record stays; the workspace never shows it again | Those two timestamps carry the whole of a comment's progress: @@ -142,13 +143,13 @@ Host selection: `--host <id>` or `VSTACK_HOST=<id>` (affects UI injection only). | Command | Contract | | --- | --- | | `serve --file …` / `serve --app …` | Long-lived via Host `background`. Binds `127.0.0.1` | -| `watch [--all] [--file …] [--stream]` | Take delivery. Blocks until the reviewer has said something new | +| `watch [--all] [--file …] [--stream] [--session <id>]` | Take delivery. Blocks until the reviewer has said something new. `--session` names the agent session each delivery binds to | | `ack --file/name … --token <token>` | Answer a stream watcher's handshake. Only this arms the `watching` heartbeat | | `publish --file/name … [--close ids] [--label …]` | Close comments, snapshot a version, or both | | `reply --file/name … --comment <id> --text "…"` | Append `{ by: "agent", text, at }` | | `share --file/name … --url <url>` | Record public URL; clear the `share` sentinel | | `status --file/name …` | Human/debug snapshot | -| `unanswered [--all] [--file/name …]` | Comments the agent was handed and has not answered. Exits 1 while any remain | +| `unanswered [--all] [--file/name …] [--session <id>]` | Comments the agent was handed and has not answered. Exits 1 while any remain. With `--session`, only deliveries recorded for that id count | | `reset --file/name …` | Delete every comment and version for the review, and start again at v1 | --- @@ -209,7 +210,9 @@ Rules: 12. Presence is proven. A stream watcher writes its `watching` heartbeat from the moment its handshake is answered, so **Linked** means a session is receiving the stream. Default window 120 s (`--handshake-timeout <seconds>`). 13. Presence is per review, and per watcher. A watcher heartbeats only the stores it covers, and goes live only on an answer carrying its own token. 14. An agent that took delivery answers. A comment it was handed is answered by closing it or by replying to it. Neither is a round that stopped halfway, because no tick will raise that comment again until the reviewer writes. `unanswered` names them, and exits 1 while any remain. -15. A delivered comment goes back to the queue when nothing is listening. That is the way out of a round whose agent session died: those comments are not `unseen`, so no new watcher would ever hand them over. `deliveredAt` is cleared and the comment is Queued again. The engine refuses this while a `watching` heartbeat is fresh, because then an agent still holds it and rule 14 applies instead. +15. A delivered comment goes back to the queue when nothing is listening. That is the way out of a round whose agent session died: those comments are not `unseen`, so no new watcher would ever hand them over. `deliveredAt` and `deliveredTo` are cleared and the comment is Queued again. The engine refuses this while a `watching` heartbeat is fresh, because then an agent still holds it and rule 14 applies instead. +16. A delivery binds to a session. A watcher started with `--session <id>` records that id on every comment it hands over, the latest delivery owns the round, and `unanswered --session <id>` answers for that session alone — so a Host that gates the end of a turn never holds one session's turn open for another session's round. A delivery recorded with no identity is reported only by the unfiltered form. +17. `watch --all` never covers a store whose `watching` heartbeat is fresh: that heartbeat is another watcher, and covering the review twice would deliver the same comment to two sessions. The store joins the sweep once the heartbeat is gone. A store named with `--file` is covered regardless — naming it is a deliberate takeover. Rule 14 is an obligation on the agent, not a refusal by the engine. Rule 3 still holds: `publish` closes exactly what it names and accepts everything else diff --git a/plugins/vstack/hooks/round-gate.mjs b/plugins/vstack/hooks/round-gate.mjs index e35e5dd..4f09985 100644 --- a/plugins/vstack/hooks/round-gate.mjs +++ b/plugins/vstack/hooks/round-gate.mjs @@ -26,7 +26,11 @@ try { input = JSON.parse(Buffer.concat(chunks).toString('utf8') || '{}') } catch comes back on the next delivery. */ if (input.stop_hook_active) process.exit(0) -const check = spawnSync(process.execPath, [SERVER, 'unanswered', '--all'], { +/* The payload names the session this Stop belongs to, and `unanswered` answers + for that session alone — a second session in the same directory must not be + told it owes a round its watcher never took delivery of. */ +const session = input.session_id ? ['--session', String(input.session_id)] : [] +const check = spawnSync(process.execPath, [SERVER, 'unanswered', '--all', ...session], { cwd: input.cwd || process.cwd(), encoding: 'utf8', timeout: 5000, }) diff --git a/plugins/vstack/skills/review/SKILL.md b/plugins/vstack/skills/review/SKILL.md index 939d169..c238da0 100644 --- a/plugins/vstack/skills/review/SKILL.md +++ b/plugins/vstack/skills/review/SKILL.md @@ -174,9 +174,14 @@ is a different op from the `background` you used in §3. node "$SKILL/assets/review-server.mjs" watch --all --stream # or --file <page.html> ``` +Use the exact command your adapter's `watch_stream` entry gives, not the bare form above: it adds +`--session <your session id>` when your host has one, and that is what binds each delivery to you — +without it, the round you take cannot be told apart from another session's. + Each line of its output is one event, delivered to you as it happens, and the process keeps running, so one watcher covers the whole session — `--all` takes in every review open in the project, including ones opened later, and any you started from this directory whose page lives elsewhere. +It never takes over a review another session's watcher is already covering. Run it from the same directory you started the server from; that is what ties the two together. **It opens with a `HANDSHAKE` line naming a command. Run that command straight away.** The watcher @@ -242,8 +247,9 @@ On a delivery: ``` It exits 1 and names every comment you were handed and then said nothing about — neither closed nor replied to. Those are the ones nothing will remind you of again, because the next delivery - only comes when the reviewer writes. On Claude Code a Stop hook runs this for you and holds your - turn open until it is clean. + only comes when the reviewer writes. Add `--session <your session id>` if your adapter names one, + so the answer covers your deliveries and not another session's. On Claude Code a Stop hook runs + this for you, with your session id, and holds your turn open until it is clean. 7. Leave **`watch_stream` running** and say what changed in a few lines. Then wait — don't ask "shall I continue?", the loop is the point. (Only re-arm if you used one-shot `watch` without `--stream`.) diff --git a/plugins/vstack/skills/review/assets/review-server.mjs b/plugins/vstack/skills/review/assets/review-server.mjs index 51758ca..538c978 100644 --- a/plugins/vstack/skills/review/assets/review-server.mjs +++ b/plugins/vstack/skills/review/assets/review-server.mjs @@ -96,6 +96,13 @@ function parseArgs (argv) { } const args = parseArgs(process.argv.slice(2)) +/* The agent session this process acts for — `--session <id>`, supplied by the + Host adapter. The engine never knows how a host names its sessions; it only + records the identity it was given, so that a delivery binds to the session + whose watcher took it and `unanswered --session` can answer for one session + without implicating another standing in the same directory. */ +const SESSION = args.session && args.session !== true ? String(args.session) : null + /** Host profile for UI injection (serve). Other commands ignore it. */ let HOST_PROFILE = null try { HOST_PROFILE = loadHost(resolveHostId(args)) } catch (e) { @@ -251,8 +258,10 @@ const saveState = s => writeJSON(P.state(), s) is open or closed. Two timestamps say where it is between the reviewer and the agent: `sentAt` is the reviewer letting go of it, which also freezes its words; `deliveredAt` is the agent taking it, after which withdrawing it - leaves the record behind. Everything the workspace shows is derived from - those. */ + leaves the record behind. `deliveredTo` names the session that took it — + whichever identity the last deliverer was started with — so what a session + owes is a recorded fact, not an inference from standing in the same + directory. Everything the workspace shows is derived from those. */ /** * What a review is, read from its own store rather than from this process's @@ -286,7 +295,7 @@ function saveComments (comments, subject = here()) { /** Fields the protocol owns. A client may write everything else on a comment it * still holds, and none of these ever. */ -const OWNED = ['state', 'sentAt', 'deliveredAt', 'dismissedAt'] +const OWNED = ['state', 'sentAt', 'deliveredAt', 'deliveredTo', 'dismissedAt'] const normaliseComment = c => ({ ...c, @@ -294,6 +303,7 @@ const normaliseComment = c => ({ replies: c.replies || [], sentAt: c.sentAt || null, deliveredAt: c.deliveredAt || null, + deliveredTo: c.deliveredTo || null, }) /** @@ -462,7 +472,10 @@ function deliver (subject = here()) { const going = deliverable(comments) const fresh = new Set(going.filter(comment => !comment.deliveredAt).map(comment => comment.id)) const at = new Date().toISOString() - for (const comment of going) comment.deliveredAt = at + /* The latest delivery owns the round: a comment handed over again binds to + whoever took it this time, which is also how a review adopted after its + session died changes hands. A watcher given no identity records none. */ + for (const comment of going) { comment.deliveredAt = at; comment.deliveredTo = SESSION } saveComments(comments, subject) fs.mkdirSync(subject.store, { recursive: true }) writeAtomic(subject.brief, renderBrief(subject, going, fresh)) @@ -932,6 +945,9 @@ async function cmdStream (stores, label, all, subjectFlags) { if (all) { for (const store of liveStores()) { if (seen.has(store)) continue + /* Not covered here and heartbeating anyway: another session's watcher + has it, and it joins this one only once that heartbeat is gone. */ + if (watchingRecently(inStore(store, 'watching'))) continue stores.push(store) seen.set(store, { flags: new Set() }) say(`OPENED ${label(store)} · now watching ${stores.length} review(s)`) @@ -959,7 +975,13 @@ async function cmdWatch () { // --all and --file combine: everything live in the project, plus anything // living outside it that you name. const all = args.all === true || args.all === 'true' - let stores = [...(all ? liveStores() : []), ...many.map(storeFor)] + /* A fresh heartbeat is another session's watcher, and covering the review + anyway would hand the same comment to two sessions. So the sweep leaves a + claimed store alone — it is found again the moment its watcher stops. A + store named with `--file` is covered regardless: naming it is a deliberate + takeover, which is how a review is adopted from a watcher that is stuck. */ + const unclaimed = store => !watchingRecently(inStore(store, 'watching')) + let stores = [...(all ? liveStores().filter(unclaimed) : []), ...many.map(storeFor)] // Named subjects only. Never fall back to the placeholder STORE from // `watch --all` (cwd/.vstack/local/review) — that path is not a review store, and // treating it as one exits the stream the moment it sees no `url` file @@ -1100,6 +1122,14 @@ const oneLine = note => { * `--all` reads every review with a server behind it, which is also the test * for whether a round is in flight at all: a review whose tab has gone is over, * and there is nothing left to owe. + * + * `--session <id>` asks for one session's debt and no one else's: only comments + * whose delivery was recorded for that id count. Without it, every unanswered + * comment counts, whoever took it — the form for a person asking after the + * review rather than a gate asking after itself. A delivery recorded with no + * session is nobody's to be gated on: naming it to a session that may never + * have seen it invites that session to close another's round, and the failure + * this command must not have is holding the wrong turn open. */ function cmdUnanswered () { const stores = args.all === true || args.all === 'true' ? liveStores() : [STORE] @@ -1107,7 +1137,8 @@ function cmdUnanswered () { let owing = 0 for (const store of stores) { const subject = subjectOf(store) - const owed = loadComments(subject).filter(unanswered) + const owed = loadComments(subject).filter(comment => + unanswered(comment) && (!SESSION || comment.deliveredTo === SESSION)) if (!owed.length) continue owing += owed.length const them = owed.length > 1 ? 'them' : 'it' @@ -1239,7 +1270,7 @@ function acceptFromReviewer (incoming) { if (!raw?.id) continue const stored = byId.get(raw.id) if (!stored) { - const { state, deliveredAt, ...rest } = raw + const { state, deliveredAt, deliveredTo, ...rest } = raw const fresh = normaliseComment({ ...rest, state: 'open', deliveredAt: null, sentAt: raw.sentAt ? at : null }) comments.push(fresh) byId.set(fresh.id, fresh) @@ -1582,7 +1613,7 @@ font:14px/1.6 ui-sans-serif,system-ui,-apple-system,sans-serif;color:#667;backgr } const comments = loadComments() const stranded = comments.filter(comment => comment.state === 'open' && comment.deliveredAt) - for (const comment of stranded) comment.deliveredAt = null + for (const comment of stranded) { comment.deliveredAt = null; comment.deliveredTo = null } saveComments(comments) touch() return sendJSON(res, 200, { ok: true, requeued: stranded.map(comment => comment.id) }) diff --git a/plugins/vstack/skills/review/hosts/claude.md b/plugins/vstack/skills/review/hosts/claude.md index 28aa2fb..2681905 100644 --- a/plugins/vstack/skills/review/hosts/claude.md +++ b/plugins/vstack/skills/review/hosts/claude.md @@ -20,7 +20,7 @@ Default when unset is `claude`, so existing installs keep working without this. | Host op | Claude Code tool | How | | --- | --- | --- | | `background(cmd)` | Bash / shell with `run_in_background: true` | `node …/review-server.mjs serve …` must outlive the turn | -| `watch_stream(cmd)` | **Monitor** tool, `persistent: true` | `node …/review-server.mjs watch --all --stream` — Monitor delivers each line to the session as it arrives | +| `watch_stream(cmd)` | **Monitor** tool, `persistent: true` | `node …/review-server.mjs watch --all --stream --session "$CLAUDE_CODE_SESSION_ID"` — Monitor delivers each line to the session as it arrives. `CLAUDE_CODE_SESSION_ID` is set in every shell and is the id the Stop hook receives, which is what binds each delivery to this session | | `stop(handle)` | TaskStop / stop the background task | After approve or when ending the session | | `run(cmd)` | Bash (foreground) | `publish`, `reply`, `ack`, `share`, `status`, `unanswered` | | `edit` | Edit / Write tools | Change the HTML file or app source | @@ -41,7 +41,7 @@ node "$SKILL/assets/review-server.mjs" publish --file "$FILE" --label "Initial v node "$SKILL/assets/review-server.mjs" serve --file "$FILE" --port 7788 --host claude # watch_stream (Monitor, persistent: true): -node "$SKILL/assets/review-server.mjs" watch --all --stream +node "$SKILL/assets/review-server.mjs" watch --all --stream --session "$CLAUDE_CODE_SESSION_ID" # then answer the HANDSHAKE line it prints, with Bash (foreground): node "$SKILL/assets/review-server.mjs" ack --all --token <token from that line> @@ -71,10 +71,15 @@ Offline remote comments: `bundle-artifact.mjs` — Send becomes copy (no session Claude Code is the only Host that can gate the end of a turn, so the plugin ships a Stop hook at `plugins/vstack/hooks/hooks.json`. It runs -`review-server.mjs unanswered --all` and blocks the turn while a comment you took -delivery of is still unanswered, telling you which one and which command -settles it. Rule 14 of [review-loop.md](../../../contracts/review-loop.md) is -what it enforces. +`review-server.mjs unanswered --all --session <session_id>` and blocks the turn +while a comment **this session** took delivery of is still unanswered, telling +you which one and which command settles it. Rules 14 and 16 of +[review-loop.md](../../../contracts/review-loop.md) are what it enforces. + +Delivery carries a session only when the watcher was started with +`--session "$CLAUDE_CODE_SESSION_ID"`, as the operation map says — a watcher +started without it leaves its deliveries unowned, and the gate does not hold +anyone for those. It blocks at most once per turn, and it stands aside whenever no review has a server behind it. diff --git a/plugins/vstack/skills/review/tests/round-gate.mjs b/plugins/vstack/skills/review/tests/round-gate.mjs index 71a8f10..0c19e1d 100644 --- a/plugins/vstack/skills/review/tests/round-gate.mjs +++ b/plugins/vstack/skills/review/tests/round-gate.mjs @@ -129,6 +129,33 @@ try { assert.equal(cli('unanswered', '--all').status, 0, 'a comment taken off the list owes nothing') assert.equal(gate(), null, 'the gate lets the turn end') + // A delivery binds to the session whose watcher took it, and the gate holds + // that session only. A session that never saw the round walks free — and is + // not handed the ids and commands that would close someone else's round. + await post('/api/comments', { comments: [comment('c4', 'Tighten the nav')] }) + assert.match(cli('watch', '--file', page, '--session', 'sess-a').stdout, /REVIEW/, + 'the tick hands the comment to sess-a') + assert.equal(gate({ session_id: 'sess-a' })?.decision, 'block', 'the session that took delivery is held') + assert.equal(gate({ session_id: 'sess-b' }), null, 'a session that never took delivery is not') + assert.equal(cli('unanswered', '--all').status, 1, + 'asked without an identity, the round still shows — a person asking means the review, not a session') + assert.equal(cli('publish', '--file', page, '--close', 'c4', '--label', 'Nav tightened').status, 0) + assert.equal(gate({ session_id: 'sess-a' }), null, 'closing frees the owner too') + + // The sweep never covers a review whose heartbeat is fresh: that is another + // session's watcher, and covering it twice would deliver one comment to two + // sessions. Once the heartbeat is gone the review is anyone's to take, and + // the new delivery re-binds the round to whoever took it. + const store = JSON.parse(cli('status', '--file', page).stdout).store + await post('/api/comments', { comments: [comment('c5', 'Widen the gutter')] }) + fs.writeFileSync(path.join(store, 'watching'), String(Date.now())) + assert.match(cli('watch', '--all').stdout, /nothing to watch/, 'a covered review is not covered twice') + fs.rmSync(path.join(store, 'watching')) + assert.match(cli('watch', '--all', '--session', 'sess-b').stdout, /REVIEW/, 'unclaimed, the sweep takes it') + assert.equal(gate({ session_id: 'sess-b' })?.decision, 'block', 'delivery bound the round to the sweeper') + assert.equal(gate({ session_id: 'sess-a' }), null, 'and to no one else') + assert.equal(cli('publish', '--file', page, '--close', 'c5', '--label', 'Gutter widened').status, 0) + // A review nobody is looking at is over. `--all` reads live stores only, so // the gate cannot strand a session on a round whose tab has gone. await post('/api/comments', { comments: [comment('c2', 'And centre it')] }) From 1dee97c3ccb9aaf8e1cf661906c6b48f3cc104a3 Mon Sep 17 00:00:00 2001 From: DeyangChan <adam@cavalry.online> Date: Sun, 9 Aug 2026 15:11:04 +0800 Subject: [PATCH 13/19] The workspace says what a round changed, and asks in options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A round that lands now brings the agent's account of it with it. `publish --summary` records what it would have said in chat; the banner shows that under a green line saying the round is done, on an accordion chevron that opens the way the reviewer last left it. The line no longer names a version, because a live review never had one — that banner had never appeared there. A question can carry the answers to it. `reply --option … --recommend n` puts them on the comment as buttons, one marked Recommended, and pressing one answers with those words. The box to type something else stays. Clear all no longer takes what the reviewer is still working on: it clears the addressed comments, and a checkbox on a plain confirmation takes the open ones too. The box is off every time it is asked. Also: the comments panel resizes on its inner edge and remembers the width; a general comment has a Save button and Enter saves it as a draft rather than sending it; a comment closed while the reviewer watched no longer falls straight into the folded Earlier group, because the close stamp now reaches the list; a question stops animating progress, since it waits on the reviewer rather than on the agent; and the parked start tool's catalogue names the stacks the template actually ships. Driven end to end through the workspace itself — the review that produced every comment above ran in vstack, on vstack. Seven browser scenarios cover the new surface, including the two long-page bugs that had no test: annotating after the page scrolls in its own window, and an overlay opening where the reviewer is looking. Each was checked against the reverted fix. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- CHANGELOG.md | 44 +++ e2e/features/browser.feature | 76 +++- e2e/features/framing.feature | 34 ++ e2e/features/live.feature | 8 + e2e/steps/browser.steps.mjs | 284 ++++++++++++++- e2e/steps/review.steps.mjs | 6 + e2e/support/mock-agent.mjs | 13 +- e2e/support/world.mjs | 31 +- plugins/vstack/.claude-plugin/plugin.json | 2 +- plugins/vstack/.codex-plugin/plugin.json | 2 +- plugins/vstack/contracts/review-loop.md | 6 +- .../phase-build/assets/build-board.html | 2 +- .../experimental/spec/assets/spec-tree.html | 2 +- .../start/assets/chooser-server.mjs | 22 +- .../experimental/start/assets/chooser.html | 30 +- plugins/vstack/lib/shell/topbar.html | 2 +- plugins/vstack/skills/review/SKILL.md | 30 +- .../skills/review/assets/review-server.mjs | 60 +++- .../skills/review/assets/workspace.html | 332 ++++++++++++++++-- .../skills/review/references/workflow.md | 6 + .../assets/story-map-template.html | 2 +- 21 files changed, 909 insertions(+), 85 deletions(-) create mode 100644 e2e/features/framing.feature diff --git a/CHANGELOG.md b/CHANGELOG.md index fdb00c1..b7eac04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,50 @@ The version in `plugins/vstack/.claude-plugin/plugin.json` is what your host compares against to decide an update is available. See the release checklist in [`CONTRIBUTING.md`](CONTRIBUTING.md). +## 6.2.0 — 2026-08-09 + +**Changed** + +- **Clear all no longer takes the comments you are still working on.** It clears + the addressed ones, and a checkbox on the confirm takes the open ones as well. + The box is off every time the dialog opens, so tidying the list can never lose + a comment you had not finished with. +- **The banner that announces a finished round no longer names a version.** It + says the round is done, which reads the same for a live app as for a + wireframe, and the button beside it is now **Refresh**. A live review never + advanced a version, so that banner had never appeared there at all. +- The handle that reopens the comments panel is part of the chrome again rather + than wearing the brand colour. Its count badge is what says comments are + waiting. + +**Added** + +- **`publish --summary "…"`** records the account of the round you would give in + chat, and the workspace shows it under the banner. It opens and closes on an + accordion chevron, and however you leave it is how the next round arrives. + One summary is kept, the latest; a publish without it clears it. +- **`reply --option "…" --option "…" --recommend <n>`** turns a question into + answers to pick from, one marked *Recommended*. Pressing one answers with + those words, and the box to type something else is still there. +- **The comments panel is resizable.** Drag its inner edge, or focus it and use + the arrow keys. The width is remembered for this browser. +- A comment about the page as a whole now has a **Save** button and the + Shift+Enter hint, the same as one made on the page. Enter saves it as a draft + instead of sending it — it goes out with your next Send, like every other + comment. + +**Fixed** + +- **A comment closed while you watched dropped straight into the folded + "Earlier" group.** The workspace never picked up the close stamp from the + server, so everything read as closed long ago instead of standing where you + could check it. +- **A question showed a progress bar while it waited on you.** A comment whose + last word is the agent's no longer counts as work in flight: no bar, no place + in the "working on N" count, and it does not trip the stalled timer. +- The stack catalogue the parked `start` tool shows named packs the template no + longer has. + ## 6.1.0 — 2026-08-08 **Fixed** diff --git a/e2e/features/browser.feature b/e2e/features/browser.feature index 98e1a64..5b724db 100644 --- a/e2e/features/browser.feature +++ b/e2e/features/browser.feature @@ -40,8 +40,80 @@ Feature: The workspace in a real browser Then the delivery names 1 open comment, 1 new @browser - Scenario: B6 — Clear all sits behind a confirm + Scenario: B7 — a general comment is saved by Enter, and not sent + When the reviewer starts a general comment "The whole thing reads cold" + Then the general comment editor offers Save and the newline hint + When the reviewer saves it with Enter + Then the general comment editor is closed + And the comment "The whole thing reads cold" is a draft on the review + + @browser + Scenario: B9 — a finished round brings its summary with it + When the reviewer clicks the page and writes "Make it pop" + And the reviewer presses Send + And the agent takes delivery + And the agent closes "Make it pop", publishes "Bigger heading" and summarises "Raised the heading to 32px and gave it more room above." + Then the banner says the round is done and shows "Raised the heading to 32px and gave it more room above." + When the reviewer presses the summary chevron + Then the summary is folded away behind the chevron + When the reviewer presses the summary chevron + Then the summary is open + + @browser + Scenario: B12 — the summary arrives the way it was left + When the reviewer clicks the page and writes "Make it pop" + And the reviewer presses Send + And the agent takes delivery + And the agent closes "Make it pop", publishes "Bigger heading" and summarises "First round." + Then the banner says the round is done and shows "First round." + When the reviewer presses the summary chevron + Then the summary is folded away behind the chevron + When the reviewer opens the workspace + And the reviewer adds a general comment "One more thing" + And the reviewer presses Send + And the agent takes delivery + And the agent closes "One more thing", publishes "Second pass" and summarises "Second round." + Then the banner carries "Second round." with it folded away + + @browser + Scenario: B8 — the comments panel is resized and stays where it is put + When the reviewer drags the panel edge 80px wider + Then the comments panel is 80px wider + When the reviewer opens the workspace + Then the comments panel keeps its width + + @browser + Scenario: B6 — Clear all leaves an open comment alone unless asked When the reviewer clicks the page and writes "Make it pop" And the reviewer presses Send - And the reviewer clears all comments from the workspace + And the reviewer opens Clear all + And the reviewer confirms clearing + Then the workspace still shows the comment "Make it pop" + When the reviewer opens Clear all + And the reviewer chooses to clear the open ones too + And the reviewer confirms clearing Then the workspace shows no comments + + @browser + Scenario: B11 — a question can be answered by picking an option + When the reviewer clicks the page and writes "Sort the overdue ones first" + And the reviewer presses Send + And the agent takes delivery + And the agent asks "Every overdue row, or only the ones assigned to you?" on "Sort the overdue ones first" offering "Every overdue row" and "Only mine", recommending 2 + Then the comment offers "Every overdue row" and "Only mine", with "Only mine" recommended + When the reviewer picks "Only mine" + Then the thread ends with "Only mine" from the reviewer + + @browser + Scenario: B10 — Clear all takes the addressed and keeps the rest + When the reviewer clicks the page and writes "Make it pop" + And the reviewer presses Send + And the agent takes delivery + And the agent closes "Make it pop" and publishes "Done" + Then the workspace shows 1 comment as addressed + And nothing is folded into Earlier + When the reviewer adds a general comment "Still thinking about this" + And the reviewer opens Clear all + And the reviewer confirms clearing + Then the workspace still shows the comment "Still thinking about this" + And the record of "Make it pop" is closed and marked dismissed diff --git a/e2e/features/framing.feature b/e2e/features/framing.feature new file mode 100644 index 0000000..80efe4d --- /dev/null +++ b/e2e/features/framing.feature @@ -0,0 +1,34 @@ +Feature: Long pages and overlays on the canvas + A page taller than the canvas is scrolled two different ways — the canvas + scrolls it when the frame grew to the whole document, the page scrolls itself + when it did not — and a comment has to land on what was under the pointer in + both. An overlay the page opens has to appear where the reviewer is looking, + not screens below it. + + @browser + Scenario: F1 — a comment lands on what was clicked after the canvas scrolls + Given a long page is under review + And the reviewer opens the workspace + When the reviewer scrolls the canvas to the bottom + And the reviewer clicks "#tail" in the framed page and writes "Down here" + Then a pin marks the comment on the canvas + And the comment "Down here" is anchored to "tail" + + @browser + Scenario: F2 — a comment lands on what was clicked after the page scrolls itself + Given a page that keeps its own scrollbar is under review + And the reviewer opens the workspace + When the reviewer scrolls the framed page to the bottom + And the reviewer clicks "#tail" in the framed page and writes "Still here" + Then a pin marks the comment on the canvas + And the comment "Still here" is anchored to "tail" + + @browser + Scenario: F3 — a dialog the page opens lands on screen, and the fit comes back + Given a long page is under review + And the reviewer opens the workspace + When the reviewer switches to View + And the framed page opens its confirmation dialog + Then the dialog is where the reviewer is looking + When the framed page closes its confirmation dialog + Then the canvas fits the whole page again diff --git a/e2e/features/live.feature b/e2e/features/live.feature index b4930cb..74324e4 100644 --- a/e2e/features/live.feature +++ b/e2e/features/live.feature @@ -21,6 +21,14 @@ Feature: Live app review Then the comment "A" is closed And no version file was frozen + @browser + Scenario: S17 — a live round announces itself through its summary + Given the reviewer has sent a comment "A" on route "/" + And the agent has taken delivery + And the reviewer opens the workspace + When the agent closes "A", publishes "Fixed spacing" and summarises "Tightened the header spacing in Header.tsx." + Then the banner says the round is done and shows "Tightened the header spacing in Header.tsx." + @round1 Scenario: S12 — a hard reset in a live review deletes comments only Given the reviewer has sent a comment "A" on route "/" diff --git a/e2e/steps/browser.steps.mjs b/e2e/steps/browser.steps.mjs index 19a6464..d7c4413 100644 --- a/e2e/steps/browser.steps.mjs +++ b/e2e/steps/browser.steps.mjs @@ -1,5 +1,7 @@ -import { Then, When } from '@cucumber/cucumber' +import { Given, Then, When } from '@cucumber/cucumber' import assert from 'node:assert/strict' +import * as agent from '../support/mock-agent.mjs' +import { PAGES } from '../support/world.mjs' const HOST_NAMES = { claude: 'Claude', codex: 'Codex' } @@ -76,9 +78,11 @@ Then('the canvas shows no pins', async function () { }, 'every pin is off the canvas') }) -Then('the comment {string} is a draft on the review', function (note) { - const comment = this.byNote(note) - assert.equal(comment.sentAt, null, 'still being written, not sent') +Then('the comment {string} is a draft on the review', async function (note) { + // The save is a request in flight, so give it the moment it needs to land. + await eventually(() => { + assert.equal(this.byNote(note).sentAt, null, 'still being written, not sent') + }, `"${note}" is on the review as a draft`) }) Then('the review has no comments on disk', function () { @@ -98,6 +102,278 @@ When('the reviewer presses Send', async function () { }, 'the send reaches the server') }) +/* ── the banner that announces a finished round ── */ + +Then('the banner says the round is done and shows {string}', async function (summary) { + const banner = this.browserPage.locator('#workBanner.on') + await banner.waitFor() + const headline = await banner.locator('#workText').textContent() + assert.doesNotMatch(headline, /v\d|Round \d/, `the headline still names a version: "${headline}"`) + await eventually(async () => { + assert.equal(await banner.locator('#workSummary').isVisible(), true, 'the summary is shown') + assert.equal((await banner.locator('#workSummaryText').textContent()).trim(), summary) + }, 'the summary reaches the banner') +}) + +When('the reviewer presses the summary chevron', async function () { + await this.browserPage.locator('#btnSummary').click() +}) + +Then('the summary is folded away behind the chevron', async function () { + await eventually(async () => { + assert.equal(await this.browserPage.locator('#workSummary').isVisible(), false, 'still shown') + const chevron = this.browserPage.locator('#btnSummary') + assert.equal(await chevron.isVisible(), true, 'no way back to it') + assert.equal(await chevron.getAttribute('aria-expanded'), 'false') + }, 'the summary folds away') +}) + +Then('the banner carries {string} with it folded away', async function (summary) { + await eventually(async () => { + assert.equal((await this.browserPage.locator('#workSummaryText').textContent()).trim(), summary) + assert.equal(await this.browserPage.locator('#workSummary').isVisible(), false, 'it opened itself') + assert.equal(await this.browserPage.locator('#btnSummary').isVisible(), true, 'no chevron to open it') + }, 'the next round arrives folded the way it was left') +}) + +Then('the summary is open', async function () { + await eventually(async () => { + assert.equal(await this.browserPage.locator('#workSummary').isVisible(), true, 'still folded') + assert.equal(await this.browserPage.locator('#btnSummary').getAttribute('aria-expanded'), 'true') + }, 'the summary is open') +}) + +/* ── a question with answers to pick from ── */ + +When('the agent asks {string} on {string} offering {string} and {string}, recommending {int}', + function (text, note, first, second, recommend) { + agent.askWithOptions(this, note, text, [first, second], recommend) + }) + +Then('the comment offers {string} and {string}, with {string} recommended', + async function (first, second, recommended) { + const choices = this.browserPage.locator('.item .choice') + await eventually(async () => { + assert.equal(await choices.count(), 2, 'both options are offered') + }, 'the options reach the comment') + assert.deepEqual( + (await choices.allInnerTexts()).map(t => t.split('\n')[0].trim()), + [first, second]) + const marked = this.browserPage.locator('.item .choice.rec') + assert.equal(await marked.count(), 1, 'exactly one is recommended') + assert.match(await marked.innerText(), new RegExp(recommended)) + assert.match(await marked.innerText(), /Recommended/i) + }) + +When('the reviewer picks {string}', async function (option) { + await this.browserPage.locator('.item .choice', { hasText: option }).click() +}) + +Then('the thread ends with {string} from the reviewer', async function (text) { + await eventually(async () => { + const { comments } = await this.project() + const last = comments.flatMap(c => c.replies || []).at(-1) + assert.equal(last?.text, text) + assert.equal(last?.by, 'reviewer') + }, 'the pick is posted as the answer') +}) + +/* ── the comments panel: what it is worth typing in, and how wide it is ── */ + +When('the reviewer adds a general comment {string}', async function (note) { + await this.browserPage.locator('#btnGeneral').click() + const editor = this.browserPage.locator('.item .gnote') + await editor.waitFor() + await editor.fill(note) + await editor.press('Enter') + await eventually(() => { this.byNote(note) }, 'the comment reaches the server') +}) + +When('the reviewer starts a general comment {string}', async function (note) { + await this.browserPage.locator('#btnGeneral').click() + const editor = this.browserPage.locator('.item .gnote') + await editor.waitFor() + await editor.fill(note) +}) + +When('the reviewer saves it with Enter', async function () { + await this.browserPage.locator('.item .gnote').press('Enter') +}) + +Then('the general comment editor is closed', async function () { + await eventually(async () => { + assert.equal(await this.browserPage.locator('.item .gnote').count(), 0, 'the box is still open') + }, 'Enter closes the box it was pressed in') +}) + +Then('the general comment editor offers Save and the newline hint', async function () { + const card = this.browserPage.locator('.item', { has: this.browserPage.locator('.gnote') }) + assert.ok(await card.locator('.gsave').isVisible(), 'the Save button is there') + const hint = await card.locator('.gfoot .hint').textContent() + assert.match(hint, /Shift\+Enter/, `the hint reads "${hint}"`) +}) + +const panelWidth = world => + world.browserPage.locator('#panel').evaluate(el => el.getBoundingClientRect().width) + +When('the reviewer drags the panel edge {int}px wider', async function (by) { + this.panelWas = await panelWidth(this) + const grip = await this.browserPage.locator('#panelGrip').boundingBox() + const y = grip.y + grip.height / 2 + await this.browserPage.mouse.move(grip.x + grip.width / 2, y) + await this.browserPage.mouse.down() + await this.browserPage.mouse.move(grip.x + grip.width / 2 - by, y, { steps: 8 }) + await this.browserPage.mouse.up() +}) + +Then('the comments panel is {int}px wider', async function (by) { + await eventually(async () => { + const now = await panelWidth(this) + assert.ok(Math.abs(now - this.panelWas - by) <= 2, + `it went from ${Math.round(this.panelWas)} to ${Math.round(now)}`) + this.panelExpect = now + }, 'the panel follows the drag') +}) + +Then('the comments panel keeps its width', async function () { + await eventually(async () => { + const now = await panelWidth(this) + assert.ok(Math.abs(now - this.panelExpect) <= 2, + `it came back at ${Math.round(now)}, not ${Math.round(this.panelExpect)}`) + }, 'the width survives a reload') +}) + +/* ── long pages: the canvas scroll, the page's own scroll, and overlays ── */ + +Given('a long page is under review', async function () { + await this.startFileReview(this.hostId, PAGES.tall) +}) + +Given('a page that keeps its own scrollbar is under review', async function () { + await this.startFileReview(this.hostId, PAGES.selfScroll) +}) + +/** The window inside the frame. It scrolls on its own whenever fitting the + frame to the page would only make the page taller. */ +async function framedWindow (world) { + const handle = await world.browserPage.locator('#frame').elementHandle() + return handle.contentFrame() +} + +/** Where an element of the page under review is on screen. The canvas is + CSS-scaled, so aiming the mouse at anything means measuring it first. */ +async function framedBox (world, selector) { + const target = world.browserPage.frameLocator('#frame').locator(selector) + await target.waitFor() + const box = await target.boundingBox() + assert.ok(box, `${selector} is on screen`) + return box +} + +When('the reviewer scrolls the framed page to the bottom', async function () { + const framed = await framedWindow(this) + await framed.evaluate(() => window.scrollTo(0, document.body.scrollHeight)) + await eventually(async () => { + assert.ok(await framed.evaluate(() => window.scrollY) > 0, 'the page did not scroll') + }, 'the page under review scrolls in its own window') +}) + +When('the reviewer scrolls the canvas to the bottom', async function () { + const port = this.browserPage.locator('#viewportBox') + await port.evaluate(element => { element.scrollTop = element.scrollHeight }) + await eventually(async () => { + assert.ok(await port.evaluate(element => element.scrollTop) > 0, 'the canvas did not scroll') + }, 'the canvas scrolls') +}) + +When('the reviewer clicks {string} in the framed page and writes {string}', + async function (selector, note) { + const box = await framedBox(this, selector) + await this.browserPage.mouse.click(box.x + box.width / 2, box.y + box.height / 2) + const editor = this.browserPage.locator('#composer textarea.cnote') + await editor.waitFor() + await editor.fill(note) + await editor.press('Enter') + await eventually(() => { this.byNote(note) }, 'the comment reaches the server') + }) + +Then('the comment {string} is anchored to {string}', function (note, id) { + const comment = this.byNote(note) + assert.ok(comment.anchor, `"${note}" attached to an element`) + assert.equal(comment.anchor.id, id, + `it attached to <${comment.anchor.tag}${comment.anchor.id ? ' id=' + comment.anchor.id : ''}>`) +}) + +When('the framed page opens its confirmation dialog', async function () { + await this.browserPage.frameLocator('#frame').locator('#open-confirm').click() + await eventually(async () => { + assert.ok(await this.browserPage.frameLocator('#frame').locator('#confirm').isVisible(), + 'the dialog never opened') + }, 'the dialog opens') +}) + +When('the framed page closes its confirmation dialog', async function () { + await this.browserPage.frameLocator('#frame').locator('#confirm-cancel').click() +}) + +Then('the dialog is where the reviewer is looking', async function () { + await eventually(async () => { + const dialog = await framedBox(this, '#confirm') + const port = await this.browserPage.locator('#viewportBox').boundingBox() + const bottom = port.y + port.height + assert.ok(dialog.y >= port.y - 2 && dialog.y + dialog.height <= bottom + 2, + `the dialog runs ${Math.round(dialog.y)}–${Math.round(dialog.y + dialog.height)} ` + + `and the canvas shows ${Math.round(port.y)}–${Math.round(bottom)}`) + }, 'the dialog is on screen') +}) + +Then('the canvas fits the whole page again', async function () { + await eventually(async () => { + const framed = await framedWindow(this) + const pageHeight = await framed.evaluate(() => document.documentElement.scrollHeight) + const frameHeight = await this.browserPage.locator('#frame').evaluate(el => el.offsetHeight) + assert.ok(Math.abs(frameHeight - pageHeight) <= 4, + `the frame is ${frameHeight}px for a ${pageHeight}px page`) + }, 'the frame goes back to the height of the page') +}) + +When('the reviewer opens Clear all', async function () { + await this.browserPage.locator('#btnClear').click() + await this.browserPage.locator('#clearDialog[open]').waitFor() +}) + +When('the reviewer chooses to clear the open ones too', async function () { + await this.browserPage.locator('#clearOpenToo').check() +}) + +When('the reviewer confirms clearing', async function () { + await this.browserPage.locator('#btnConfirmClear').click() + await this.browserPage.locator('#clearDialog[open]').waitFor({ state: 'detached' }) +}) + +Then('the workspace still shows the comment {string}', async function (note) { + await eventually(async () => { + const { comments } = await this.project() + assert.ok(comments.some(comment => comment.note === note), `"${note}" was taken off`) + }, `"${note}" stays on the list`) +}) + +/* Earlier holds what was closed more than a minute ago, folded away. A comment + the agent closed just now belongs above it, where the reviewer can check it. */ +Then('nothing is folded into Earlier', async function () { + const panel = await this.browserPage.locator('#pbody').innerText() + assert.doesNotMatch(panel, /Earlier/i, `the panel reads:\n${panel}`) +}) + +/* The Addressed group starts folded, so its heading is what says the round + landed — the cards inside it are not in the DOM until it is opened. */ +Then('the workspace shows {int} comment(s) as addressed', async function (n) { + await eventually(async () => { + const panel = await this.browserPage.locator('#pbody').innerText() + assert.match(panel, new RegExp(`Addressed \\(${n}\\)`, 'i'), `the panel reads:\n${panel}`) + }, 'the panel shows the addressed group') +}) + When('the reviewer clears all comments from the workspace', async function () { await this.browserPage.locator('#btnClear').click() const confirm = this.browserPage.locator('#clearDialog #btnConfirmClear') diff --git a/e2e/steps/review.steps.mjs b/e2e/steps/review.steps.mjs index bdd353e..66da21a 100644 --- a/e2e/steps/review.steps.mjs +++ b/e2e/steps/review.steps.mjs @@ -83,6 +83,12 @@ When('the agent closes {string} and publishes {string}', function (note, label) assert.equal(run.status, 0, run.stderr) }) +When('the agent closes {string}, publishes {string} and summarises {string}', + function (note, label, summary) { + const run = agent.closeAndPublish(this, [note], label, summary) + assert.equal(run.status, 0, run.stderr) + }) + When('the agent closes {string} again', function (note) { agent.closeAndPublish(this, [note]) }) diff --git a/e2e/support/mock-agent.mjs b/e2e/support/mock-agent.mjs index 63cdf72..c83f6f8 100644 --- a/e2e/support/mock-agent.mjs +++ b/e2e/support/mock-agent.mjs @@ -14,13 +14,24 @@ export function takeDelivery (world) { return run.stdout } -export function closeAndPublish (world, notes, label) { +export function closeAndPublish (world, notes, label, summary) { const ids = notes.map(note => world.idFor(note)).join(',') const args = ['publish', ...world.subjectArgs(), '--close', ids] if (label) args.push('--label', label) + if (summary) args.push('--summary', summary) return world.cli(...args) } +/** A question the reviewer answers by picking, with one option recommended. */ +export function askWithOptions (world, note, text, options, recommend) { + const argv = ['reply', ...world.subjectArgs(), '--comment', world.idFor(note), '--text', text] + for (const option of options) argv.push('--option', option) + if (recommend) argv.push('--recommend', String(recommend)) + const run = world.cli(...argv) + assert.equal(run.status, 0, run.stderr) + return run +} + export function reply (world, note, text) { const run = world.cli('reply', ...world.subjectArgs(), '--comment', world.idFor(note), '--text', text) assert.equal(run.status, 0, run.stderr) diff --git a/e2e/support/world.mjs b/e2e/support/world.mjs index 979c0a3..2bb70d6 100644 --- a/e2e/support/world.mjs +++ b/e2e/support/world.mjs @@ -13,6 +13,33 @@ const SERVER = path.resolve(HERE, '../../plugins/vstack/skills/review/assets/rev const PAGE_V1 = '<!doctype html><title>Review e2e page

Todo

' const EDIT_MARKER = 'Todo — edited' +/* Two shapes of long page, because the canvas treats them differently and each + one hid a bug. A page tall in pixels lets the frame grow to the whole + document, so the canvas does the scrolling. A page sized in viewport units + grows with the frame, so the fit gives up and the page keeps its own + scrollbar — and then the frame's scroll and the canvas's disagree. */ +const TAIL = '

The last thing on the page

' +const PAGE_TALL = `Review e2e page +

Todo

+ ${TAIL}
+

Delete everything?

+
+` +const PAGE_SELF_SCROLL = `Review e2e page +

Todo

${TAIL}
` + +export const PAGES = { tall: PAGE_TALL, selfScroll: PAGE_SELF_SCROLL } + /* Scenarios run serially; each takes a pair of ports (review server + fixture app) so a slow teardown can never collide with the next scenario. */ let portCursor = 21000 + (process.pid % 400) * 20 @@ -47,11 +74,11 @@ export class ReviewWorld { return run } - async startFileReview (hostId = this.hostId) { + async startFileReview (hostId = this.hostId, html = PAGE_V1) { this.live = false this.name = 'page' this.page = path.join(this.temp, 'page.html') - fs.writeFileSync(this.page, PAGE_V1) + fs.writeFileSync(this.page, html) const published = this.cli('publish', ...this.subjectArgs(), '--label', 'Initial version') assert.equal(published.status, 0, published.stderr) await this.serve(['--file', this.page], hostId) diff --git a/plugins/vstack/.claude-plugin/plugin.json b/plugins/vstack/.claude-plugin/plugin.json index 58c6521..14f4760 100644 --- a/plugins/vstack/.claude-plugin/plugin.json +++ b/plugins/vstack/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "vstack", "displayName": "Visual Stack", - "version": "6.1.0", + "version": "6.2.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Claude Code. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Claude publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/.codex-plugin/plugin.json b/plugins/vstack/.codex-plugin/plugin.json index 89014c7..bcacb35 100644 --- a/plugins/vstack/.codex-plugin/plugin.json +++ b/plugins/vstack/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "vstack", - "version": "6.1.0", + "version": "6.2.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Codex. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Codex publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/contracts/review-loop.md b/plugins/vstack/contracts/review-loop.md index 2382e14..c141b30 100644 --- a/plugins/vstack/contracts/review-loop.md +++ b/plugins/vstack/contracts/review-loop.md @@ -45,7 +45,7 @@ calls a comment done. Everything the workspace shows is derived from that list. | `seenAt` | Version on screen when it was written. Display only | | `state` | `open` · `closed` | | `closedAt` | When the agent closed it | -| `replies` | `{ by, text, at }[]`, append-only | +| `replies` | `{ by, text, at }[]`, append-only. An agent reply may carry `options: [{ text, recommended }]` — answers the reviewer picks from | | `sentAt` | The reviewer let go of it. Null means it is still a draft | | `deliveredAt` | The agent was last handed it. Null means it is still queued here | | `deliveredTo` | The session the last delivery was recorded for — the `--session` id its watcher was started with. Null when the watcher carried no identity | @@ -145,8 +145,8 @@ Host selection: `--host ` or `VSTACK_HOST=` (affects UI injection only). | `serve --file …` / `serve --app …` | Long-lived via Host `background`. Binds `127.0.0.1` | | `watch [--all] [--file …] [--stream] [--session ]` | Take delivery. Blocks until the reviewer has said something new. `--session` names the agent session each delivery binds to | | `ack --file/name … --token ` | Answer a stream watcher's handshake. Only this arms the `watching` heartbeat | -| `publish --file/name … [--close ids] [--label …]` | Close comments, snapshot a version, or both | -| `reply --file/name … --comment --text "…"` | Append `{ by: "agent", text, at }` | +| `publish --file/name … [--close ids] [--label …] [--summary …]` | Close comments, snapshot a version, or both. `--summary` records the account of the round, which the workspace shows; the latest one is kept and a publish without it clears it | +| `reply --file/name … --comment --text "…" [--option "…" … --recommend ]` | Append `{ by: "agent", text, at }`, with `options: [{ text, recommended }]` when options are given. The reviewer answers by pressing one, which posts those words as their reply | | `share --file/name … --url ` | Record public URL; clear the `share` sentinel | | `status --file/name …` | Human/debug snapshot | | `unanswered [--all] [--file/name …] [--session ]` | Comments the agent was handed and has not answered. Exits 1 while any remain. With `--session`, only deliveries recorded for that id count | diff --git a/plugins/vstack/experimental/phase-build/assets/build-board.html b/plugins/vstack/experimental/phase-build/assets/build-board.html index 560972f..b2a63aa 100644 --- a/plugins/vstack/experimental/phase-build/assets/build-board.html +++ b/plugins/vstack/experimental/phase-build/assets/build-board.html @@ -445,7 +445,7 @@ diff --git a/plugins/vstack/experimental/spec/assets/spec-tree.html b/plugins/vstack/experimental/spec/assets/spec-tree.html index a0fb16c..c5ff50b 100644 --- a/plugins/vstack/experimental/spec/assets/spec-tree.html +++ b/plugins/vstack/experimental/spec/assets/spec-tree.html @@ -562,7 +562,7 @@ diff --git a/plugins/vstack/experimental/start/assets/chooser-server.mjs b/plugins/vstack/experimental/start/assets/chooser-server.mjs index 0caf6e4..1d0b39d 100644 --- a/plugins/vstack/experimental/start/assets/chooser-server.mjs +++ b/plugins/vstack/experimental/start/assets/chooser-server.mjs @@ -74,10 +74,12 @@ if (PREFILL_PATH) { from here is not an error — it renders from its README with no tags. The same tables double as the catalog snapshot when the form runs before any clone. */ const KNOWN = { - 'vercel': { title:'Vercel SPA', tags:['React','SPA','Vercel','Neon'] }, - 'vercel-ssr': { title:'Vercel SSR', tags:['Next.js','SSR','Vercel','Neon'] }, - 'nextjs-nestjs-postgres': { title:'Next + NestJS', tags:['Next.js','NestJS','Postgres','Prisma'] }, - 'taro-fastify-mysql-tencent': { title:'Taro / Tencent', tags:['Taro','WeChat','Fastify','MySQL','Tencent'] }, + 'vercel-csr': { title:'Vercel SPA', tags:['React','Vite','Fastify','Postgres','Vercel'] }, + 'vercel-ssr': { title:'Vercel SSR', tags:['Next.js','SSR','Postgres','Vercel'] }, + 'enterprise': { title:'Next + NestJS', tags:['Next.js','NestJS','Postgres','Prisma'] }, + 'mern': { title:'MERN', tags:['React','Express','MongoDB','Mongoose'] }, + 'django': { title:'React + Django', tags:['React','Django','Postgres','Python'] }, + 'wechat': { title:'Taro / Tencent', tags:['Taro','H5','Fastify','MySQL','Tencent'] }, 'multi-tenancy': { title:'Multi-tenancy', tags:['tenant scoping','row isolation','scoped storage'] }, 'saas-billing': { title:'SaaS billing', tags:['plans','entitlements','seats','usage','webhooks'] }, 'otp-auth': { title:'OTP auth', tags:['OTP','SMS','email','challenge store'] }, @@ -89,10 +91,12 @@ const KNOWN = { } const DESC = { - 'vercel': 'Client-rendered React. No server rendering.', - 'vercel-ssr': 'Server-rendered Next.js. Marketing and app in one deployment.', - 'nextjs-nestjs-postgres': 'Separate API service with its own lifecycle.', - 'taro-fastify-mysql-tencent': 'WeChat mini-program, hosted in mainland China.', + 'vercel-csr': 'Client-rendered React with a Fastify API on Vercel.', + 'vercel-ssr': 'One full-stack Next.js application on Vercel.', + 'enterprise': 'Server-first Next.js with a separate NestJS API.', + 'mern': 'Client-rendered React with an Express API and MongoDB.', + 'django': 'Client-rendered React with a Django REST API.', + 'wechat': 'Mobile-first Taro H5, hosted on Tencent Cloud.', 'multi-tenancy': 'Organisations share one deployment, data stays isolated.', 'saas-billing': 'Subscriptions, entitlements and seats as a layer.', 'otp-auth': 'Sign in with a code sent by SMS or email.', @@ -104,7 +108,7 @@ const DESC = { } const SNAPSHOT = { - packs: ['vercel', 'vercel-ssr', 'nextjs-nestjs-postgres', 'taro-fastify-mysql-tencent'], + packs: ['vercel-csr', 'vercel-ssr', 'enterprise', 'mern', 'django', 'wechat'], addons: ['multi-tenancy', 'saas-billing', 'otp-auth', 'llm-calls', 'enterprise-compliance', 'test-mode', 'seo', 'premium-design'], } diff --git a/plugins/vstack/experimental/start/assets/chooser.html b/plugins/vstack/experimental/start/assets/chooser.html index ec15484..510cd56 100644 --- a/plugins/vstack/experimental/start/assets/chooser.html +++ b/plugins/vstack/experimental/start/assets/chooser.html @@ -487,7 +487,7 @@ @@ -595,14 +595,18 @@

"base": ["CLAUDE.md","apps/","db/","design/","specs/","infra/",".github/"], "prefill": null, "packs": [ - { "id":"vercel", "title":"Vercel SPA", "desc":"Client-rendered React. No server rendering.", - "tags":["React","SPA","Vercel","Neon"] }, - { "id":"vercel-ssr", "title":"Vercel SSR", "desc":"Server-rendered Next.js. Marketing and app in one deployment.", - "tags":["Next.js","SSR","Vercel","Neon"] }, - { "id":"nextjs-nestjs-postgres", "title":"Next + NestJS", "desc":"Separate API service with its own lifecycle.", + { "id":"vercel-csr", "title":"Vercel SPA", "desc":"Client-rendered React with a Fastify API on Vercel.", + "tags":["React","Vite","Fastify","Postgres","Vercel"] }, + { "id":"vercel-ssr", "title":"Vercel SSR", "desc":"One full-stack Next.js application on Vercel.", + "tags":["Next.js","SSR","Postgres","Vercel"] }, + { "id":"enterprise", "title":"Next + NestJS", "desc":"Server-first Next.js with a separate NestJS API.", "tags":["Next.js","NestJS","Postgres","Prisma"] }, - { "id":"taro-fastify-mysql-tencent", "title":"Taro / Tencent", "desc":"WeChat mini-program, hosted in mainland China.", - "tags":["Taro","WeChat","Fastify","MySQL","Tencent"] } + { "id":"mern", "title":"MERN", "desc":"Client-rendered React with an Express API and MongoDB.", + "tags":["React","Express","MongoDB","Mongoose"] }, + { "id":"django", "title":"React + Django", "desc":"Client-rendered React with a Django REST API.", + "tags":["React","Django","Postgres","Python"] }, + { "id":"wechat", "title":"Taro / Tencent", "desc":"Mobile-first Taro H5, hosted on Tencent Cloud.", + "tags":["Taro","H5","Fastify","MySQL","Tencent"] } ], "addons": [ { "id":"multi-tenancy", "title":"Multi-tenancy", "desc":"Organisations share one deployment, data stays isolated.", @@ -1182,11 +1186,11 @@

/* What the answers recommend on step 3 — pack to pre-select. A missing key, or a pack this inventory doesn't carry, recommends nothing. */ const RECOMMEND = { - 'website:*': { pack:'vercel-ssr', addons:['seo'] }, - 'webapp:saas': { pack:'nextjs-nestjs-postgres', addons:['multi-tenancy','saas-billing'] }, - 'webapp:internal': { pack:'vercel', addons:['test-mode'] }, - 'mobile:wechat': { pack:'taro-fastify-mysql-tencent', addons:['otp-auth'] }, - 'api:*': { pack:'nextjs-nestjs-postgres', addons:[] }, + 'website:*': { pack:'vercel-ssr', addons:['seo'] }, + 'webapp:saas': { pack:'enterprise', addons:['multi-tenancy','saas-billing'] }, + 'webapp:internal': { pack:'vercel-csr', addons:['test-mode'] }, + 'mobile:wechat': { pack:'wechat', addons:['otp-auth'] }, + 'api:*': { pack:'enterprise', addons:[] }, }; const state = { diff --git a/plugins/vstack/lib/shell/topbar.html b/plugins/vstack/lib/shell/topbar.html index 455fbdf..70bf6d0 100644 --- a/plugins/vstack/lib/shell/topbar.html +++ b/plugins/vstack/lib/shell/topbar.html @@ -63,7 +63,7 @@ diff --git a/plugins/vstack/skills/review/SKILL.md b/plugins/vstack/skills/review/SKILL.md index c238da0..7509531 100644 --- a/plugins/vstack/skills/review/SKILL.md +++ b/plugins/vstack/skills/review/SKILL.md @@ -134,12 +134,12 @@ The page opens in **its own browser window** on the canvas — own viewport, own | **Attached to an element** | a comment belongs to the thing it was made on, not to a coordinate. The mark rides it when the layout moves, and **goes off the page with it** — a comment made inside a modal, tab or step is not drawn while that thing is closed. It stays in the list tagged *not on screen*, and it still reaches you | | Captions | stay hidden — a mark shows its note when it's open, or on hover in Annotate | | **Screen size** | ultrawide · desktop · tablet · phone. A comment belongs to the size it was made at and only shows there | -| **Thread** | your replies appear on the comment itself and in the comment list, where they can be answered without going back to the mark. A question opens its thread on sight | +| **Thread** | your replies appear on the comment itself and in the comment list, where they can be answered without going back to the mark. A question opens its thread on sight. A question that came with options shows them as buttons, one marked *Recommended*; pressing one answers with those words, and the box below still takes anything else | | **Save** (⏎) | on the comment — Enter commits it, Shift+Enter is a new line | | **Timeline** (bottom) | drag the handle to scrub through published versions; history is read-only | | **EN / 中文** | workspace chrome only — comments stay in whatever words they were written in | | **Delete** | on the comment, once it has words in it. It takes the comment off the user's list whatever state it is in, including one you are working on right now — you are not told, and you finish and close what you were given as normal | -| **Clear all** | in the comment list footer, behind a confirm. It takes every comment on the list off at once, addressed ones included — the same act as the per-card delete | +| **Clear all** | in the comment list footer, behind a confirm. It takes the addressed comments off the list — the same act as the per-card delete. Comments still open stay unless the reviewer ticks the box on the confirm, which is off every time it is asked | | **Link status** | a dot beside Send — linked to your session, or link lost. Nothing is said until the connection has actually answered | | **Send to {agent}** (⌘⏎) | sends straight through — no preview step — and wakes you up. Label uses the Host profile name. Greys out until something actually changes | | **In flight** | every comment you were sent keeps an indeterminate progress bar until you publish or reply. No banner covers the page any more — the progress is on the comments it belongs to | @@ -233,14 +233,34 @@ On a delivery: ``` The comment stays open and comes back with their answer attached. On disk the reply uses `by: "agent"` (legacy files may say `"claude"`; treat them the same). + + **When the answers are a short list, offer them.** `--option`, repeated, puts them on the + comment as buttons, and `--recommend ` marks the one you would take. Pressing one answers + with those words; the box to type something else stays, so an answer you did not think of is + still one sentence away. + ```bash + node "$SKILL/assets/review-server.mjs" reply --file "$FILE" --comment c7f2a1 \ + --text "Every overdue row, or only the ones assigned to you?" \ + --option "Every overdue row" --option "Only mine" --recommend 2 + ``` + Two to four options, each a complete answer rather than a keyword. Ask an open question with + `--text` alone when the answer is a sentence you cannot predict. 4. If a comment is genuinely wrong for the design, reply saying why rather than silently skipping it. 5. **Close what you did, and snapshot the version:** ```bash node "$SKILL/assets/review-server.mjs" publish --file "$FILE" \ - --close c1f3k2,c9dk1 --label "Filters collapsed, overdue sorts first" + --close c1f3k2,c9dk1 --label "Filters collapsed, overdue sorts first" \ + --summary "Filters are collapsed behind a single control, and overdue rows sort first. + I left the date column alone — say if you want it narrower too." ``` Anything you do not name stays open and comes back. Publish tells you what it left open — close those or reply asking about them, because the delivery will not raise them again on its own. + + **`--label` names the version in one line. `--summary` is the account you would give in + chat** — what you changed, what you decided, what you left. The workspace shows it on the + banner when the round lands, so a reviewer who is not reading your terminal still gets it. + Send the same words to both places rather than writing a thinner version for the page. One + summary is kept, and it is the latest one: a publish without `--summary` clears it. 6. **Check you left nothing hanging**, before you finish your turn: ```bash node "$SKILL/assets/review-server.mjs" unanswered --all @@ -262,7 +282,9 @@ Either way, **say when the review is closed** — the user should never have to a socket is still open. The workspace never swaps the page out from under the reviewer: while you work, each comment you were -handed carries its own progress bar, and on publish the page offers **"vN is ready — Review changes"**. +handed carries its own progress bar, and on publish the page offers a green line saying the round is +done, with **Refresh** beside it and your `--summary` under it, behind a chevron that opens and +closes and stays however the reviewer last left it. ## 6 · Publish the wireframe as a shareable link diff --git a/plugins/vstack/skills/review/assets/review-server.mjs b/plugins/vstack/skills/review/assets/review-server.mjs index 538c978..821e8b1 100644 --- a/plugins/vstack/skills/review/assets/review-server.mjs +++ b/plugins/vstack/skills/review/assets/review-server.mjs @@ -19,8 +19,9 @@ * node review-server.mjs serve --file [--port 7788] [--idle-timeout 90] [--no-open] * node review-server.mjs serve --app [--name ] [--start /path] [--port 7788] * node review-server.mjs watch --file (blocks; hands over the open comments) - * node review-server.mjs publish --file [--close c1,c3] [--label "…"] + * node review-server.mjs publish --file [--close c1,c3] [--label "…"] [--summary "…"] * node review-server.mjs reply --file --comment --text "…" + * [--option "…" --option "…" [--recommend ]] * node review-server.mjs ack --file --token * node review-server.mjs share --file --url * node review-server.mjs status --file @@ -96,6 +97,19 @@ function parseArgs (argv) { } const args = parseArgs(process.argv.slice(2)) +/** Every value given for a flag that may be repeated, in the order typed — + `--option A --option B`. parseArgs keeps one value per flag, which is right + for every other flag there is. */ +function repeatedArg (flag) { + const argv = process.argv.slice(2), out = [] + for (let i = 0; i < argv.length; i++) { + if (argv[i] !== `--${flag}`) continue + const next = argv[i + 1] + if (next !== undefined && !next.startsWith('--')) { out.push(next); i++ } + } + return out +} + /* The agent session this process acts for — `--session `, supplied by the Host adapter. The engine never knows how a host names its sessions; it only records the identity it was given, so that a delivery binds to the session @@ -444,6 +458,11 @@ function renderBrief (subject, going, fresh) { for (const reply of comment.replies || []) { L.push('') L.push(`> **${reply.by === REVIEWER_ROLE ? 'They replied' : 'You asked'}:** ${reply.text}`) + // The options you offered, so a question that comes back reads as the + // question you actually asked rather than only its opening line. + for (const option of reply.options || []) { + L.push(`> - ${option.text}${option.recommended ? ' *(you recommended this)*' : ''}`) + } } L.push('') } @@ -452,7 +471,8 @@ function renderBrief (subject, going, fresh) { L.push('Close what you have done. Anything you do not name stays open and comes back next time,') L.push('so ask about whatever is unclear instead of guessing:') L.push('```bash') - L.push(`node review-server.mjs publish ${subject.flags} --close --label ""`) + L.push(`node review-server.mjs publish ${subject.flags} --close --label "" \\`) + L.push(` --summary "" # optional, shown in the workspace`) L.push(`node review-server.mjs reply ${subject.flags} --comment --text ""`) L.push('```') return L.join('\n') + '\n' @@ -524,6 +544,11 @@ function listVersions () { function cmdPublish (quiet) { const ids = [...new Set(String(args.close ?? args.addressed ?? '').split(',').map(s => s.trim()).filter(Boolean))] const label = args.label && args.label !== true ? String(args.label) : null + /* The label names the version in one line; the summary is what the agent + would say in chat about the round it just finished. The workspace shows it + where the news lands, so a reviewer who is not reading the terminal still + gets the account of what changed. */ + const summary = args.summary && args.summary !== true ? String(args.summary).trim() : null /* A version is a frozen copy of the page under review, and a running app has no such thing: what a capture of one produces is a likeness with its scripts stripped and half its styling missing, which is worse than not offering it. @@ -582,6 +607,15 @@ function cmdPublish (quiet) { state.name = pageName() saveState(state) } + /* One summary at a time, and it belongs to the round that has just landed — + a publish that carries none clears the last one rather than leaving the + workspace showing an account of work that is now two rounds old. Written + for a live review too, which has no version to hang it on. */ + if (ids.length || snapshot) { + const state = loadState() + state.summary = summary ? { text: summary, at: new Date().toISOString() } : null + saveState(state) + } if (!quiet) { console.log([ @@ -644,6 +678,20 @@ function cmdReply () { console.error('Need --comment --text "…"') process.exit(1) } + /* A question the reviewer answers by picking rather than by typing. The + options are offered on the comment, one of them can be marked as the one + you would take, and the box to type something else is still there — a + choice you did not think of is the whole reason the question was asked. */ + const options = repeatedArg('option') + const recommend = args.recommend === undefined ? 0 : Number(args.recommend) + if (options.length === 1) { + console.error('A choice needs at least two --option values') + process.exit(2) + } + if (options.length && (!Number.isInteger(recommend) || recommend < 0 || recommend > options.length)) { + console.error(`--recommend must be between 1 and ${options.length}, or left out`) + process.exit(2) + } const comments = loadComments() const target = comments.find(comment => comment.id === id) if (!target) { console.error(`No comment ${id} found`); process.exit(1) } @@ -653,9 +701,13 @@ function cmdReply () { // disagree with it. target.replies = (target.replies || []).concat({ by: AGENT_ROLE, text, at: new Date().toISOString(), + ...(options.length + ? { options: options.map((option, i) => ({ text: option, recommended: i + 1 === recommend })) } + : {}), }) saveComments(comments) - console.log(`Replied to ${id} — the reviewer will see it on the comment`) + console.log(`Replied to ${id} — the reviewer will see it on the comment` + + (options.length ? ` with ${options.length} options to pick from` : '')) touch() } @@ -1209,6 +1261,8 @@ function payload () { base: BASE, startPath: state.start || '/', currentVersion: state.version, + // What the agent said about the round that just landed, if it said anything. + summary: state.summary || null, // A live review has no single document to hand over — the app serves it. html: LIVE ? '' : fs.readFileSync(FILE, 'utf8'), versions, diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index 92f0e54..d3c310e 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -108,6 +108,28 @@ #panel{min-width:0;overflow:hidden} #panel > *{width:var(--panelw);flex:none} #pbody{flex:1 1 auto!important} +/* How much of the window the comments take is the reviewer's call: the panel's + inner edge is a grip, and where they leave it is where it stays. Two ids to + outrank the width every other child of the panel gets. */ +#panel > #panelGrip{position:absolute;left:0;top:0;bottom:0;width:7px;z-index:44; + cursor:col-resize;background:transparent;outline:none} +/* Wide enough to grab, and what it shows is a slim line rather than the whole + target. Grey: the edge is a thing to move, not a thing to worry about. + Flush at left:0 — absolute positioning starts inside the panel's own 1px + border, so the line lands against it and the two read as one edge. */ +#panel > #panelGrip::after{content:'';position:absolute;left:0;top:0;bottom:0;width:3px; + background:transparent;transition:background .12s} +#panel > #panelGrip:hover::after,#panel > #panelGrip:focus-visible::after{background:var(--line-2)} +body.resizing #panel > #panelGrip::after{background:var(--ink-3)} +/* The panel's own border is the other pixel of the same edge, so it takes the + same colour — otherwise the line reads as a stripe beside the edge. */ +#panel:has(> #panelGrip:hover),#panel:has(> #panelGrip:focus-visible){border-left-color:var(--line-2)} +body.resizing #panel{border-left-color:var(--ink-3)} +body.panelshut #panelGrip{display:none} +/* The pointer owns the drag: no text selection under it, and no easing on a + column that is meant to track the cursor exactly. */ +body.resizing{cursor:col-resize;user-select:none} +body.resizing #main{transition:none} /* Up at the top, level with the panel's own heading — halfway down the window it read as floating, and the thing it belongs to starts here. */ #panelHandle{display:flex;grid-column:2;grid-row:1;align-self:start;justify-self:start; @@ -123,12 +145,11 @@ body.phase #panelHandle{display:none!important} #panelHandle:hover{color:var(--ink);background:var(--surface-2)} #panelHandle svg{width:13px;height:13px;display:block;transition:transform .16s ease-out} -/* Shut, the handle is the only way back to the comments, so it wears the brand - — at this size a neutral chevron on the edge went unnoticed. */ -body.panelshut #panelHandle{color:var(--brand); - border-color:var(--brand-line);background:var(--brand-soft)} -body.panelshut #panelHandle:hover{background:var(--brand);border-color:var(--brand);color:#fff} -body.panelshut #panelHandle:hover .pbadge{background:#fff;color:var(--brand)} +/* Shut, the handle stays part of the chrome rather than wearing the brand. Its + badge is what says comments are waiting, so the colour is not carrying that. */ +body.panelshut #panelHandle{color:var(--ink); + border-color:var(--line-2);background:var(--surface)} +body.panelshut #panelHandle:hover{background:var(--surface-2);border-color:var(--line-2);color:var(--ink)} /* The handle is narrower than a default badge, so its own count runs tighter. */ #handleBadge{min-width:14px;height:14px;padding:0 2px;font-size:9px} /* Keep comments beside the canvas for every width that still uses the desktop @@ -148,6 +169,9 @@ body.panelopen #panel{transform:none} /* Cards fill the panel at whatever width it ended up. */ #panel > *{width:100%} + /* The panel is a drawer over the page here, not a column beside it, so there + is no line between the two to move. */ + #panel > #panelGrip{display:none} /* Under the chrome like the panel it belongs to — pinned to a bar's height it would sit on top of an update notice and cover the × that dismisses it. */ #panelHandle{grid-column:1;position:fixed;right:0;top:calc(var(--chromeh,46px) + 18px); @@ -701,6 +725,14 @@ padding:5px 7px;resize:vertical;min-height:46px} .item .gnote:focus{outline:none;border-color:var(--brand); box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 12%,transparent)} +/* The same footer the on-canvas composer carries, so a comment typed in the + list is finished the same way as one typed on the page. */ +.item .gfoot{display:flex;align-items:center;gap:5px;margin-top:6px} +.item .gfoot .hint{flex:1;font-size:11px;color:var(--ink-3)} +.item .gsave{height:24px;padding:0 10px;border-radius:6px;background:var(--ink); + color:var(--surface);font-weight:600;font-size:11.5px;flex:none} +.item .gsave:hover{filter:brightness(1.25)} +.item .gsave .kbd{font:500 9.5px/1 var(--mono);opacity:.6;margin-left:4px} .item.off{opacity:.68} .item.off:hover{opacity:1} .item .kind .offtag{color:var(--ink-3);font-style:italic} @@ -798,6 +830,16 @@ color:var(--ink-3);font-size:12px;line-height:1;display:grid;place-items:center;opacity:0} .item .tmsg:hover .tkill,.item .tkill:focus-visible{opacity:1} .item .tkill:hover{color:var(--brand);background:var(--brand-soft)} +/* Answers to pick from. Full width and stacked: they are sentences, not chips, + and a row of them would wrap into something you have to read twice. */ +.choices{display:flex;flex-direction:column;gap:5px;margin-top:7px} +.choice{display:flex;align-items:baseline;gap:7px;width:100%;text-align:left; + padding:7px 9px;border:1px solid var(--line-2);border-radius:7px;background:var(--surface); + color:var(--ink);font:inherit;font-size:12.5px;line-height:1.4} +.choice:hover:not(:disabled){border-color:var(--brand);background:var(--brand-soft)} +.choice:disabled{opacity:.55} +.choice.rec{border-color:var(--ok)} +.choice em{flex:none;margin-left:auto;font-style:normal;font-size:10.5px;color:var(--ok)} .empty{color:var(--ink-3);font-size:12.5px;text-align:center;line-height:1.6} .grouphd{font:650 10.5px/1 var(--font);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3); margin:12px 2px 7px;display:flex;align-items:center;gap:6px} @@ -856,6 +898,35 @@ .banner.on ~ .banner.on ~ .banner.on{top:150px} .banner .btn{height:25px;font-size:11.5px} #workBanner .txt,#shareBanner .txt{min-width:0;overflow:hidden;text-overflow:ellipsis} +/* Two things stacked, not one green box: the line that announces the round is + the snackbar and keeps the green; the account under it is a page of the + agent's writing, and reads as one. So the container itself carries nothing. */ +#workBanner.on{flex-direction:column;align-items:stretch;gap:6px; + background:none;border:0;padding:0;box-shadow:none; + /* One width whether the account is open or folded: the banner is in a fixed + place on screen, and a box that resizes under the pointer is a box you + have to aim at twice. */ + width:min(560px,calc(100% - 24px))} +#workBanner .brow{display:flex;align-items:center;gap:10px; + padding:8px 10px 8px 14px;border-radius:10px; + background:var(--ok-soft);border:1px solid var(--ok);box-shadow:var(--shadow-pop)} +/* The headline takes the slack, so every button sits at the right edge — level + with the edge of the account below it. */ +#workBanner .brow .txt{flex:1} +#workBanner .summary{padding:10px 12px;border-radius:10px;background:var(--surface); + border:1px solid var(--line);box-shadow:var(--shadow-pop);max-height:40vh;overflow:auto} +/* The words are the agent's own, newlines and all, and they are the reason the + banner stops being one line. */ +#workBanner .summary .stext{white-space:pre-wrap;font-size:12px;line-height:1.5;color:var(--ink-2)} +/* The one control the account needs: the chevron every accordion uses. It + points the way the account will move — up while it is open and about to + fold, down while it is folded and about to come back. Bare, because the two + things you might do about the round are the buttons beside it. */ +#workBanner .chev{flex:none;width:26px;height:26px;display:grid;place-items:center; + border-radius:6px;background:none;border:0;color:var(--ink-2);cursor:pointer} +#workBanner .chev:hover{color:var(--ink);background:color-mix(in srgb,var(--ok) 16%,transparent)} +#workBanner .chev svg{width:16px;height:16px;display:block;transition:transform .16s ease-out} +#workBanner .chev[aria-expanded=true] svg{transform:rotate(180deg)} /* The tools, down the left edge of the canvas. Same shell as the zoom controls in the corner below it — both are things you reach for while working on the @@ -904,6 +975,9 @@ .confirmDialog .modalbody{padding:20px 20px 16px} .confirmDialog h2{margin:0 0 9px;font-size:17px;line-height:1.25} .confirmDialog p{margin:0;color:var(--ink-2);font-size:13px;line-height:1.55} +.confirmDialog .opt{display:flex;align-items:center;gap:8px;margin-top:12px; + font-size:13px;color:var(--ink-2);cursor:pointer} +.confirmDialog .opt input{flex:none;width:14px;height:14px;margin:0} .confirmDialog .kept{margin-top:10px;padding:9px 10px;border-radius:7px;background:var(--surface-2); border:1px solid var(--line);color:var(--ink-2)} .confirmDialog .modalactions{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px; @@ -1009,7 +1083,7 @@ @@ -1105,9 +1179,23 @@ @@ -1162,6 +1250,7 @@
+
Comments
`; } +/* A question can come with the answers the agent has in mind. Pressing one is + the whole reply, so the common case is a click — and the box underneath is + still there, because the answer nobody listed is the reason to ask at all. + Only the last word in the thread is a live question: options above it were + answered already, and stand as a record of what was offered. */ +function choiceList (m, isLast) { + if (!isAgent(m.by) || !m.options?.length) return ''; + const live = isLast && !isHistory(); + return '
' + m.options.map((option, i) => + `').join('') + '
'; +} + const replyDrafts = new Map(); function toggleThread (id) { S.threadOpen.has(id) ? S.threadOpen.delete(id) : S.threadOpen.add(id); @@ -4287,8 +4456,10 @@

` : ''} ${live() && a.route ? `
${esc(a.route)}
` : ''} - ${a.kind === 'general' && !isHistory() && !sent(a) - ? `` + ${a.kind === 'general' && !isHistory() && !sent(a) && (blank(a) || S.editingNote === a.id) + ? ` +
${esc(T('newlineHint'))} +
` : `
${esc(a.note || unwritten(a))}
`} ${threadNote(a, open)} ${open ? threadBox(a) : ''} @@ -4323,19 +4494,27 @@

save(); renderCounts(); }); gnote.addEventListener('blur', () => { if (!hasSubstance(a)) removeComment(a.id) }); + /* Enter saves and stops there. Sending is the reviewer's own act, on their + own timing, for the whole list at once — a general comment is not the one + kind that leaves on its own. Shift+Enter is the newline, as everywhere + else in the workspace. */ + const finish = () => { + a.note = gnote.value.trim(); + if (a._fresh && a.note) delete a._fresh; + if (!hasSubstance(a)) { gnote.blur(); return } // the blur takes the empty card away + S.editingNote = null; + save(); + render(); // the box closes and the words stand as the comment + }; gnote.addEventListener('keydown', e => { if (e.key === 'Escape') { gnote.blur(); return } if (e.key !== 'Enter' || e.shiftKey || e.isComposing || e.keyCode === 229) return; - // Enter sends: this box has no Save button beside it, so the key that - // finishes a thought should be the key that hands it over. Shift+Enter - // is the newline, as everywhere else in the workspace. e.preventDefault(); - a.note = gnote.value.trim(); - if (a._fresh && a.note) delete a._fresh; - gnote.blur(); - if (hasSubstance(a)) { save(); openSend() } + finish(); }); - if (a._fresh) setTimeout(() => gnote.focus({ preventScroll: true }), 0); + const gsave = $('.gsave', el); + if (gsave) gsave.onclick = e => { e.stopPropagation(); finish() }; + if (a._fresh || S.editingNote === a.id) setTimeout(() => gnote.focus({ preventScroll: true }), 0); } const send1 = $('.isend', el); if (send1) send1.onclick = e => { e.stopPropagation(); openSend(a.id) }; @@ -4365,9 +4544,20 @@

e.stopPropagation(); undoReply(a, Number(b.dataset.ri)); }); + // Picking an option is answering with those words, so it takes the same + // path a typed answer does and reads the same in the thread afterwards. + const asked = (a.replies || []).at(-1); + $$('.choice', box).forEach(b => b.onclick = e => { + e.stopPropagation(); + sendPanelReply(a, asked?.options?.[Number(b.dataset.choice)]?.text || ''); + }); } el.onclick = () => { - if (a.kind === 'general') { $('.gnote', el)?.focus(); return } + if (a.kind === 'general') { + if ($('.gnote', el)) { $('.gnote', el).focus(); return } + if (!isHistory() && !sent(a)) { S.editingNote = a.id; render() } + return; + } // Carried and still open: say where it came from, because the version it was // made on is not the one on screen. Carried and addressed: nothing to say. if ((a.size || 'desktop') !== S.size.id) { setSize(a.size); setTimeout(() => reveal(a), 320); return } @@ -4432,11 +4622,20 @@

renderHistoryButton(); } +/* What Clear all would take. Addressed comments are a record of finished work, + so clearing them loses nothing; an open one is still wanted, and goes only + when the reviewer says so on the dialog. */ +const clearScope = () => { + const listed = listedComments(); + return $('#clearOpenToo')?.checked ? listed : listed.filter(isClosed); +}; + function renderClearDialog () { const dialog = $('#clearDialog'); if (!dialog.open) return; $('#clearDialogTitle').textContent = T('clearDialogTitle'); - $('#clearDialogImpact').textContent = T('clearImpact')(listedComments().length); + $('#clearDialogImpact').textContent = T('clearImpact'); + $('#clearOpenTooLabel').textContent = T('clearOpenToo'); $('#clearDialogKept').textContent = T('clearKept'); $('#btnCancelClear').textContent = T('clearCancel'); $('#btnConfirmClear').textContent = T('clearConfirm'); @@ -4445,6 +4644,8 @@

function openClearDialog () { if (isHistory() || !listedComments().length) return; const dialog = $('#clearDialog'); + // A default, not a preference: every time it is asked, the open ones stay. + $('#clearOpenToo').checked = false; if (!dialog.open) dialog.showModal(); renderClearDialog(); $('#btnCancelClear').focus(); @@ -4452,9 +4653,9 @@

async function confirmClearComments () { if (isHistory()) return; + const going = clearScope(); closeComposer(); $('#clearDialog').close(); - const going = listedComments(); if (!going.length) return; S.ann = S.ann.filter(a => !going.includes(a)); save(); render(); @@ -4494,6 +4695,61 @@

$('#panelHandle').setAttribute('aria-expanded', String(on)); } +/* ── how wide the comments are ── + Narrow enough and a comment is unreadable; wide enough and there is no page + left to read it against. So the width is the reviewer's to set, between those + two, and it is remembered per browser rather than per review — it is about + this screen, not about this design. */ +const PANEL_MIN = 260, PANEL_KEY = 'vstack:review:panelw'; +const panelMax = () => Math.max(PANEL_MIN, Math.min(720, Math.round(window.innerWidth * 0.6))); + +function setPanelWidth (px, remember = true) { + const w = Math.min(panelMax(), Math.max(PANEL_MIN, Math.round(px))); + document.documentElement.style.setProperty('--panelw', w + 'px'); + $('#panelGrip')?.setAttribute('aria-valuenow', String(w)); + if (remember) try { localStorage.setItem(PANEL_KEY, String(w)) } catch {} + return w; +} + +function wirePanelResize () { + const grip = $('#panelGrip'), panel = $('#panel'); + if (!grip) return; + grip.setAttribute('aria-label', T('panelWidth')); + const saved = (() => { try { return Number(localStorage.getItem(PANEL_KEY)) } catch { return 0 } })(); + if (saved) setPanelWidth(saved, false); + + // Pointer capture, so a drag that outruns the grip — or leaves the window — + // still ends on this element rather than being lost. + grip.addEventListener('pointerdown', e => { + if (e.button) return; + e.preventDefault(); + grip.setPointerCapture(e.pointerId); + document.body.classList.add('resizing'); + const startX = e.clientX, startW = panel.getBoundingClientRect().width; + const drag = ev => setPanelWidth(startW + (startX - ev.clientX)); + const stop = () => { + grip.removeEventListener('pointermove', drag); + document.body.classList.remove('resizing'); + }; + grip.addEventListener('pointermove', drag); + grip.addEventListener('pointerup', stop, { once: true }); + grip.addEventListener('pointercancel', stop, { once: true }); + }); + + grip.addEventListener('keydown', e => { + const step = e.key === 'ArrowLeft' ? 16 : e.key === 'ArrowRight' ? -16 : 0; + if (!step) return; + e.preventDefault(); + setPanelWidth(panel.getBoundingClientRect().width + step); + }); + + // A window that shrinks can leave the panel wider than the cap allows. + window.addEventListener('resize', () => { + const now = panel.getBoundingClientRect().width; + if (now > panelMax()) setPanelWidth(now, false); + }); +} + /* Send stays Send, even with a round out. Noticing something else while Claude works is the normal case, not an interruption to be blocked — the comment goes out and joins the round. */ diff --git a/plugins/vstack/skills/review/references/workflow.md b/plugins/vstack/skills/review/references/workflow.md index 1062194..884fab2 100644 --- a/plugins/vstack/skills/review/references/workflow.md +++ b/plugins/vstack/skills/review/references/workflow.md @@ -54,6 +54,12 @@ node "$SKILL/assets/review-server.mjs" publish --file "$FILE" --label "Initial v node "$SKILL/assets/review-server.mjs" publish --file "$FILE" \ --close c1f3k2,c9dk1 --label "Filters collapsed" +# --summary adds the account you would give in chat; the workspace shows it on the +# banner when the round lands. The latest one is kept, and a publish without it clears it. +node "$SKILL/assets/review-server.mjs" publish --file "$FILE" \ + --close c1f3k2 --label "Filters collapsed" \ + --summary "Filters are behind one control now. I left the date column alone." + # ask about a comment instead of guessing — the question lands on the mark node "$SKILL/assets/review-server.mjs" reply --file "$FILE" \ --comment c7f2a1 --text "Every overdue row, or only the ones assigned to you?" diff --git a/plugins/vstack/skills/user-story-map/assets/story-map-template.html b/plugins/vstack/skills/user-story-map/assets/story-map-template.html index 916cead..3170b17 100644 --- a/plugins/vstack/skills/user-story-map/assets/story-map-template.html +++ b/plugins/vstack/skills/user-story-map/assets/story-map-template.html @@ -519,7 +519,7 @@ From f9a5ad73c0e0055ecf6ab219adabc27983bf0430 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sun, 9 Aug 2026 15:11:11 +0800 Subject: [PATCH 14/19] Hide the badges that are not green, and say it plainly The security, Scorecard and Sonar badges are commented out until each one reports green again, with the reason for each beside it. The pitch drops the in-joke filenames for what the reader actually recognises. --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b65ab50..1f6556a 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,19 @@ # Visual Stack [![CI](https://github.com/Cavalry-Collective/visual-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/Cavalry-Collective/visual-stack/actions/workflows/ci.yml) +[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) + + + ## Stop prompting. Start pointing. @@ -78,7 +86,7 @@ As feedback becomes more visual, chat becomes the bottleneck. Context gets burie Visual Stack keeps every comment attached to the element, route, and version it refers to. Your agent receives the feedback with the visual context intact. -No archaeology through 200 messages. No screenshot named `final-final-v2-actually-final.png`. No arguing about which blue. +No scrolling back through the chat. No screenshot graveyard on your desktop. No describing what you could just point at. ## Requirements From a77380605a1758cfdeaafc294cedbce4292cbf7a Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sun, 9 Aug 2026 17:16:00 +0800 Subject: [PATCH 15/19] An option reads at the size of the comment, and Recommended is an eyebrow Options were fixed at 12.5px, so in the panel thread they sat a point larger than the message they answer. They now inherit from that message: 11.5px in the panel, 12.5px in the composer. Recommended moves from a badge beside the answer to an eyebrow above it, in red, over a red border on the option it marks. The border rests on --brand-line so hovering it still reads as a change. Co-Authored-By: Claude Opus 5 (1M context) --- e2e/steps/browser.steps.mjs | 3 ++- .../skills/review/assets/workspace.html | 20 ++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/e2e/steps/browser.steps.mjs b/e2e/steps/browser.steps.mjs index d7c4413..e227c57 100644 --- a/e2e/steps/browser.steps.mjs +++ b/e2e/steps/browser.steps.mjs @@ -157,7 +157,8 @@ Then('the comment offers {string} and {string}, with {string} recommended', assert.equal(await choices.count(), 2, 'both options are offered') }, 'the options reach the comment') assert.deepEqual( - (await choices.allInnerTexts()).map(t => t.split('\n')[0].trim()), + (await this.browserPage.locator('.item .choice > span').allInnerTexts()) + .map(t => t.trim()), [first, second]) const marked = this.browserPage.locator('.item .choice.rec') assert.equal(await marked.count(), 1, 'exactly one is recommended') diff --git a/plugins/vstack/skills/review/assets/workspace.html b/plugins/vstack/skills/review/assets/workspace.html index d3c310e..6149030 100644 --- a/plugins/vstack/skills/review/assets/workspace.html +++ b/plugins/vstack/skills/review/assets/workspace.html @@ -634,12 +634,12 @@ #composer .cthread{margin:8px 9px 0;display:none;flex-direction:column;gap:7px; max-height:190px;overflow:auto} #composer .cthread.on{display:flex} -#composer .msg{border-left:2px solid var(--line-2);padding-left:8px} +#composer .msg{border-left:2px solid var(--line-2);padding-left:8px;font-size:12.5px} #composer .msg.agent,#composer .msg.claude{border-left-color:var(--brand)} #composer .msg .who{font:600 10px/1 var(--font);letter-spacing:.04em;text-transform:uppercase; color:var(--ink-3);margin-bottom:3px} #composer .msg.agent .who,#composer .msg.claude .who{color:var(--brand)} -#composer .msg .body{font-size:12.5px;line-height:1.45;white-space:pre-wrap;word-break:break-word} +#composer .msg .body{line-height:1.45;white-space:pre-wrap;word-break:break-word} #composer .creply{display:none;margin-top:8px;min-height:44px} #composer .creply.on{display:block} #composer .cfoot{display:flex;align-items:center;gap:5px;padding:8px 9px;margin-top:8px; @@ -833,13 +833,16 @@ /* Answers to pick from. Full width and stacked: they are sentences, not chips, and a row of them would wrap into something you have to read twice. */ .choices{display:flex;flex-direction:column;gap:5px;margin-top:7px} -.choice{display:flex;align-items:baseline;gap:7px;width:100%;text-align:left; +.choice{display:flex;flex-direction:column;align-items:flex-start;gap:3px;width:100%;text-align:left; padding:7px 9px;border:1px solid var(--line-2);border-radius:7px;background:var(--surface); - color:var(--ink);font:inherit;font-size:12.5px;line-height:1.4} + color:var(--ink);font:inherit;line-height:1.4} .choice:hover:not(:disabled){border-color:var(--brand);background:var(--brand-soft)} .choice:disabled{opacity:.55} -.choice.rec{border-color:var(--ok)} -.choice em{flex:none;margin-left:auto;font-style:normal;font-size:10.5px;color:var(--ok)} +/* The one the agent would take is labelled above the answer, in the same + eyebrow a group heading uses. Its border stays a shade off full brand, so + hovering it still reads as a change. */ +.choice.rec{border-color:var(--brand-line)} +.choice em{font:650 9.5px/1 var(--font);letter-spacing:.06em;text-transform:uppercase;color:var(--brand)} .empty{color:var(--ink-3);font-size:12.5px;text-align:center;line-height:1.6} .grouphd{font:650 10.5px/1 var(--font);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3); margin:12px 2px 7px;display:flex;align-items:center;gap:6px} @@ -4062,10 +4065,9 @@

if (!isAgent(m.by) || !m.options?.length) return ''; const live = isLast && !isHistory(); return '
' + m.options.map((option, i) => - `').join('') + '
'; + `${esc(option.text)}`).join('') + ''; } const replyDrafts = new Map(); From 8e7fd8a06491db8699433b8b2408e01c3a74c8d2 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sun, 9 Aug 2026 17:20:19 +0800 Subject: [PATCH 16/19] The README demo is recorded by a script anyone can run again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The demo GIF was made by hand, so redoing it meant rebuilding the whole rig. docs/demo/record-demo.mjs now does it in one command: publish v1 to a real review server, drive the shipped workspace in headless Chrome, take delivery of the round through the review CLI, publish v2, and assemble the frames with ffmpeg. Nothing is staged or faked, so a change to the workspace shows up in the next recording. The demo itself now shows all three ways of marking a page — a point comment, an area comment, and a strike through words — and v2 answers each one and nothing else. The recording refuses to send unless all three marks reached the review, because a gesture that silently captured nothing had already shipped a demo of two. CLAUDE.md carries the pacing and the parts that are load-bearing: PNG frames rather than JPEG, a cursor drawn from real mouse events, watch --stream so the top bar stays linked, and the layout space that keeps a mark's note off what the next mark is aimed at. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 99 ++++++-- docs/assets/wireframe-demo.gif | Bin 842253 -> 502540 bytes docs/demo/pages/v1.html | 61 +++++ docs/demo/pages/v2.html | 76 ++++++ docs/demo/record-demo.mjs | 419 +++++++++++++++++++++++++++++++++ 5 files changed, 637 insertions(+), 18 deletions(-) create mode 100644 docs/demo/pages/v1.html create mode 100644 docs/demo/pages/v2.html create mode 100644 docs/demo/record-demo.mjs diff --git a/CLAUDE.md b/CLAUDE.md index 894dcc9..bfe3e1f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -422,21 +422,84 @@ tooling-agnostic. ## Demo recordings (README GIFs) -Use these dimensions for every demo recording — they were tuned so the text -reads clearly in the README: - -- **Browser viewport 920 × 760**, and export the GIF at native resolution — - never downscale the frames. -- **Review the demo page at phone width** (the workspace's 390px size) with the - canvas zoom locked at 100%. The workspace refits zoom on every version load - (size switch, Review changes, timeline scrub), so a recording script must - pin it — set zoom to 1 and no-op the refit for the session. -- Keep the subject app trivially simple (the todo list works well) so the - before/after change is obvious at a glance. -- Keep it snappy: fast typing, short holds, ~1.4× speedup at assembly, and - clamp idle gaps (e.g. the round-trip wait) to ~0.5s. -- Target: ~12 seconds, under 1 MB, saved to `docs/assets/wireframe-demo.gif`. - -Recordings are scripted — headless Chrome via playwright-core driving the real -review server end to end (publish v1, comment, send, claim, publish v2), with -frames captured as JPEGs and assembled with ffmpeg (two-pass palette). +`docs/assets/wireframe-demo.gif` is regenerated by one command. It needs +playwright, which the e2e suite already depends on, and ffmpeg. + +```bash +cd e2e && npm ci # once — the recording borrows playwright from here +node docs/demo/record-demo.mjs +``` + +Nothing about the recording is staged. `docs/demo/record-demo.mjs` publishes +`docs/demo/pages/v1.html` to a real review server, drives the shipped workspace +in headless Chrome the way a reviewer would, and plays the agent's turn through +the review CLI — take delivery of the round, swap in `pages/v2.html`, publish it +back. A change to the workspace shows up in the next recording, so re-record +after one. + +**To change what the demo says**, edit the two pages and the note constants at +the top of the script. v2 must answer every mark v1 receives, and nothing else: +the demo is a review round, so an unexplained change reads as the agent going +off on its own. + +What the recording shows, in order: a point comment on the compose row, an area +comment dragged over the task list, a strike dragged through the words "all +completed tasks" in the footer button, Send, the agent's banner, then Review +changes and the new version. All three marks carry a written note, including the +strike — a mark that needs no words still reads better beside the two that have +them. + +**Every mark must land where the reader can see the result.** The change each +one asks for has to be inside the visible canvas in v2, which is shorter than +the phone frame — a footer that fits in v1 can fall below the fold once v2 adds +a row. The script sends only after the review holds all three marks, so a +gesture that captured nothing fails the run instead of shipping a demo of two. + +These are tuned for how the GIF reads in the README. Keep them: + +- **Browser viewport 920 × 760**, exported at native resolution. Never + downscale the frames. +- **The demo page is reviewed at phone width** (the workspace's 390px size) + with the canvas zoom locked at 100%. The workspace refits zoom on every + version load (size switch, Review changes, timeline scrub), so the script + pins it — set zoom to 1 and no-op the refit for the session. +- **The subject app is a plain light todo list**, and v2 is a small targeted + edit to it. A redesign between versions reads as a different app rather than + as feedback being applied. +- **Fast and snappy**: ~15ms per typed character, ~340ms of eased cursor + movement per leg, and no deliberate holds. Assembly caps any state that sits + still at 400ms, and the closing frame at 0.55s — the GIF loops, so a long + look at the result is time the reader spends waiting to see it again. +- **Comments are ordinary review notes** — a full sentence naming the change. + No jokes. +- Target: ~11 seconds at 25fps, under 1 MB. + +These are load-bearing and easy to undo by accident: + +- **Capture frames as PNG.** A lossy re-encode perturbs every block in the + frame, so two frames differing only by the cursor differ everywhere and the + GIF encoder can no longer skip what did not change. PNG is worth about half + the file size. +- **Draw the cursor from real mouse events.** A screenshot contains no pointer, + so the script injects one and moves it from the page's own `mousemove`. Being + told where the pointer is instead would let the drawing and the input drift + apart. +- **Watch with `watch --stream`.** The one-shot form has to exit to deliver a + round, and the top bar reads Unlinked in the gap before something is watching + again. The streaming form stays up for the whole recording, which is also what + a real session runs. It goes live only once its handshake is answered, so the + script reads the token off its own output and acks it. +- **Tools are picked by their shortcut**, not by clicking the toolbar. Sending + the pointer up to the bar and back is a long move away from the page for + something a reviewer does with one key. A key pressed while a composer has + focus is text, so the composer is closed and blurred first. +- **A press only starts a gesture on clear canvas.** The workspace ignores a + press that lands on an existing mark, and spends one on an open composer + closing it — so the script shuts the composer before the strike. A selected + mark also draws its note beneath itself, which is why the page keeps the + struck control well below the list the area comment covers. Space in the + layout is what keeps them apart; do not close the gap. +- **A text strike needs both ends inside the words.** A point just past the last + character is in no text node, no caret resolves there, and the strike silently + takes nothing. + diff --git a/docs/assets/wireframe-demo.gif b/docs/assets/wireframe-demo.gif index b5ba52ce31179e52b3b956a683a8aa03240d88eb..15e44b8b000e5e653e8bfc3a7c8f5b4304163f4f 100644 GIT binary patch literal 502540 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
Fuz~9GGb#$!Q$kYXQjodk32E0 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 g4fRCwK4v%%<9(+CV7(?14GA^l9htJ_^ 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

x%fGXRc9EB-GS};;Cnr5 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 G%>Mz+QaM2Y literal 842253 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

H!lRh^P>;xKxB!JyZXmli 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%0DutS-v6ng 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ΜNn|%L>8RF8^Vvy|!P^4+ID(Wv9%%dY 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

4vkMVNXo47hyMRO*9HIMxNW_7`OYF!W{tT^Qu` zQ!Nf?8F5LdJ5rd!$|oYB6HJ6RHRPwVVAy0)C%3Q-8JaGyIn-$*91Y;;EaX4}C?o`B z08;e_aot8iZx2*VLa5VW&+|kmlbkPGFIqH!lx-U*Ebb$hvyC67OOk4vBveT70^<`W zPucFz@r zPf9e3zG1=-n;HNcJ%Je2b5jODe#8`?amb5Aa0nA#!T`n1a*~+j>8g{o%C<_*?wv*Z`YY%qg0=a3KQPc8TPQZz<){oGIkXQ^ z1GwTg3Jzz&|BpTy4ff_2PKXAFlQJv_DFDm+_p3oiqN8!9{i`9!muLAwsu6KK7=-QQ47COup|3@bE7jaZ?CxdRkU>;e#C-hT%(=vr3IEE)Qh3K>Rn=`y&-@MSB&2(HQy z@b9GO)O%v8E+6o4mrJcbK*_(kD?#`(^3_5V&ms0(gR}LD0~#jH5C4J+o^^6N7gX2x zKBvOESVaz#oa}mD-TI?TB0Mf6LXV=0qj@YPB!%s0`d!>#k)V*y$3${)%+QEtN;bR+ zY(IJA3xm$6!Bjhw_9rD)X&z!Cw&kn`Mgw3_wID3^R7x|SxO-7v!l}T7%mGJl%Li%vsTCM=)c>pu*(tmi%H8Mbz3bS&GprYCcM$Pe~} z1@Vl?sGN%geM1P{fq?}zLfRp~PKZT_&`>-{G&Okj;BAm;h~IBB#U8{E*{tsz{?#O+ zgFt3uu<8oal}#5+^^4eNHE9ML$SAB}GDljlX1szRBq&Kl?z3{z-*-RcCykU{G`AS+ z`pRRdj0qjxffqsk7&s6h*;MFEc}aThP0mW4T@88%E^}Ynw4G>3;AwirCeT1G&Zqq& ziYaFQ^&@(yLJq&xnka-042qO7OTL7&6p%cvE~s9PTbrMvcq)Ou&1g2*mnas2tdKYW zaES3(O=tF5(5HEs_#u+kZ?2qwq%ZTqWQrplH!q zu{GYTAyRXNJ+)fA4+;&(BY%ZrsKF;pYbcP`hAGFn|rvxCHtO + + + +Today + + +

Today

+

Monday, 3 August · 6 tasks

+ +
+
Add a task…
+ +
+ +
+
    +
  • Buy groceries for the week
  • +
  • Water the plants
  • +
  • Call the dentist
  • +
  • Ship the release notes
  • +
  • Morning run
  • +
  • Pay the electricity bill
  • +
+
+ +
4 to do · 2 done
diff --git a/docs/demo/pages/v2.html b/docs/demo/pages/v2.html new file mode 100644 index 0000000..ca75545 --- /dev/null +++ b/docs/demo/pages/v2.html @@ -0,0 +1,76 @@ + + + + +Today + + +

Today

+

Monday, 3 August · 6 tasks

+ +
+
Add a task…
+ + +
+ +
+
    +
  • Buy groceries for the week
  • +
  • Call the dentist
  • +
  • Ship the release notes
  • +
  • Pay the electricity bill
  • +
+

Done · 2

+
    +
  • Water the plants
  • +
  • Morning run
  • +
+
+ +
4 to do · 2 done
diff --git a/docs/demo/record-demo.mjs b/docs/demo/record-demo.mjs new file mode 100644 index 0000000..cce715d --- /dev/null +++ b/docs/demo/record-demo.mjs @@ -0,0 +1,419 @@ +/* + * Records the README demo and writes docs/assets/wireframe-demo.gif. + * + * Nothing here is staged: a real review server serves the page in + * `pages/v1.html`, headless Chrome drives the workspace the way a reviewer + * would, and the agent's turn is played by the review CLI — take delivery of + * the round, swap in `pages/v2.html`, publish it back. The workspace is the + * shipped one, so a change to it shows up in the next recording. + * + * Run it from a checkout: + * + * cd e2e && npm ci # once — playwright is borrowed from here + * node docs/demo/record-demo.mjs + * + * The dimensions and the pacing are the ones the README needs; CLAUDE.md says + * why each of them is what it is. + */ +import { spawn, spawnSync } from 'node:child_process' +import crypto from 'node:crypto' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { createRequire } from 'node:module' +import { fileURLToPath } from 'node:url' + +const HERE = path.dirname(fileURLToPath(import.meta.url)) +const REPO = path.resolve(HERE, '../..') +const SERVER = path.join(REPO, 'plugins/vstack/skills/review/assets/review-server.mjs') +const OUT = process.argv[2] || path.join(REPO, 'docs/assets/wireframe-demo.gif') + +/* Playwright is the e2e suite's dependency, not the plugin's — the plugin ships + with none, and a recording tool is not a reason to give it one. */ +let chromium +try { + ({ chromium } = createRequire(path.join(REPO, 'e2e/'))('playwright')) +} catch { + console.error('playwright is missing — run `cd e2e && npm ci` first') + process.exit(1) +} +if (spawnSync('ffmpeg', ['-version']).status !== 0) { + console.error('ffmpeg is missing — `brew install ffmpeg`') + process.exit(1) +} + +/* ── what the demo says ── */ + +const POINT_NOTE = 'Add a due-date picker here, next to the Add button.' +const AREA_NOTE = 'Completed tasks should move to a Done section at the bottom.' +const STRIKE_NOTE = 'Shorten this to just Clear.' +const V2_LABEL = 'Due-date picker and Done section' +const V2_SUMMARY = 'Added the due-date button, grouped the completed tasks, and shortened the Clear label.' + +/* ── how it is shot ── */ + +const VIEWPORT = { width: 920, height: 760 } +const TYPE_MS = 15 // fast enough to read, quick enough not to wait on +const HOLD_CAP_MS = 400 // the longest any unchanging state is shown +const FINAL_HOLD_MS = 550 // long enough to read the result, short enough to loop +const FPS = 25 +const COLORS = 256 +const PORT = 24555 +const ORIGIN = `http://127.0.0.1:${PORT}` + +/* Resolved, because on macOS the temp dir sits under the /var symlink and a + store found by one path is not recognised as the store claimed by the other. */ +const WORK = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'vstack-demo-'))) +const FRAMES = path.join(WORK, 'frames') +const PAGE = path.join(WORK, 'page.html') +fs.mkdirSync(FRAMES) + +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)) +const cli = (...argv) => { + const run = spawnSync(process.execPath, [SERVER, ...argv], { cwd: WORK, encoding: 'utf8' }) + if (run.status !== 0) throw new Error(`${argv[0]} failed:\n${run.stdout}${run.stderr}`) + return run.stdout +} + +fs.copyFileSync(path.join(HERE, 'pages/v1.html'), PAGE) +cli('publish', '--file', PAGE, '--label', 'First draft') + +/* A server left behind by a failed run still answers on this port, out of a + store that run has already deleted. Recording against it is unexplainable. */ +try { + await fetch(ORIGIN + '/api/project') + throw new Error(`something is already serving ${ORIGIN} — kill it and run again`) +} catch (error) { + if (!/ECONNREFUSED|fetch failed/.test(String(error))) throw error +} + +const server = spawn(process.execPath, [ + SERVER, 'serve', '--file', PAGE, '--port', String(PORT), + '--host', 'claude', '--no-open', '--idle-timeout', '0', +], { cwd: WORK, stdio: ['ignore', 'pipe', 'pipe'] }) +let serverLog = '' +server.stdout.on('data', chunk => { serverLog += chunk }) +server.stderr.on('data', chunk => { serverLog += chunk }) + +/* A run that throws must not leave the port held, or the next one records + against a server whose store is gone. */ +const children = [server] +process.on('exit', () => { for (const child of children) { try { child.kill() } catch {} } }) + +for (let attempt = 0; ; attempt++) { + try { if ((await fetch(ORIGIN + '/api/project')).ok) break } catch {} + if (attempt > 100) throw new Error(`server did not start:\n${serverLog}`) + await sleep(100) +} + +const browser = await chromium.launch() +const page = await browser.newPage({ viewport: VIEWPORT }) + +/* A screenshot has no pointer in it, so the recording draws its own and lets it + follow the real mouse. Reading the events rather than being told where the + pointer is keeps the drawing and the input from ever disagreeing. */ +await page.addInitScript(() => { + const install = () => { + const cursor = document.createElement('div') + cursor.id = 'vs-demo-cursor' + cursor.innerHTML = ` + + + + ` + document.body.appendChild(cursor) + addEventListener('mousemove', event => { + cursor.style.transform = `translate(${event.clientX}px,${event.clientY}px)` + }, true) + addEventListener('mousedown', () => { + cursor.classList.add('down') + cursor.classList.remove('tap') + void cursor.offsetWidth // restart the ripple on a second click in the same place + cursor.classList.add('tap') + }, true) + addEventListener('mouseup', () => cursor.classList.remove('down'), true) + } + if (document.readyState === 'loading') addEventListener('DOMContentLoaded', install) + else install() +}) + +await page.goto(ORIGIN + '/') +await page.locator('#frame').waitFor() +await page.frameLocator('#frame').locator('h1').waitFor() + +/* The workspace refits the zoom on every version load. The recording is read at + 100%, so the refit is taken out for the session and the zoom pinned once. */ +await page.evaluate(() => { window.fitZoom = () => {} }) +await page.locator('#sizeSwitch button[data-size=phone]').click() +await page.evaluate(() => window.setZoom(1)) +await sleep(400) + +/* The agent session, listening — the streaming form, which is what a real + session runs. The one-shot form has to exit to deliver a round, and the top + bar goes Unlinked in the gap before anything is watching again; this one + stays up for the whole recording. It goes live once its handshake is + answered, so the answer is read off its own output. */ +const watcher = spawn(process.execPath, [SERVER, 'watch', '--stream', '--file', PAGE], + { cwd: WORK, stdio: ['ignore', 'pipe', 'pipe'] }) +children.push(watcher) +let heard = '' +let acked = false +const delivered = new Promise(resolve => { + const read = chunk => { + heard += chunk + const token = !acked && heard.match(/--token (\S+)/) + if (token) { acked = true; cli('ack', '--file', PAGE, '--token', token[1]) } + if (/^REVIEW/m.test(heard)) resolve() + } + watcher.stdout.on('data', read) + watcher.stderr.on('data', read) +}) +// Presence is polled every few seconds, which is what this wait is for. +await page.locator('#linkDot.on').waitFor({ timeout: 20000 }) + +/** Where an element of the page under review sits on screen. The canvas is + CSS-scaled, so the mouse is aimed at a measured box, never at the element. */ +async function framedBox (selector) { + const box = await page.frameLocator('#frame').locator(selector).boundingBox() + if (!box) throw new Error(`${selector} is not on screen`) + return box +} +const middleOf = box => ({ x: box.x + box.width / 2, y: box.y + box.height / 2 }) + +/** Where a run of words inside the page under review sits on screen. Striking + words rather than a whole element is a drag between two points, and those + points are in the middle of a text node — so they are measured in the text + itself rather than off any element's box. + + The page's own coordinates are not the screen's, so the offset between them + is measured from an element whose box is known both ways rather than assumed + from where the frame sits. Assuming it puts the drag in the comments panel, + where it silently strikes nothing. */ +async function wordsBox (selector, words) { + const frame = await (await page.locator('#frame').elementHandle()).contentFrame() + /* Both boxes in one call, so the offset between them cannot be spoilt by the + canvas moving between two reads — closing a composer re-lays it out. */ + const [inner, holder] = await frame.evaluate(([where, what]) => { + const node = document.querySelector(where).firstChild + const from = node.data.indexOf(what) + if (from < 0) throw new Error(`"${what}" is not in ${where}`) + const range = document.createRange() + range.setStart(node, from) + range.setEnd(node, from + what.length) + const box = ({ x, y, width, height }) => ({ x, y, w: width, h: height }) + return [box(range.getBoundingClientRect()), + box(document.querySelector(where).getBoundingClientRect())] + }, [selector, words]) + // The element holding the words, placed on screen by the same machinery that + // aims every other click in this recording. + const onScreen = await framedBox(selector) + return { + x: onScreen.x + (inner.x - holder.x), + y: onScreen.y + (inner.y - holder.y), + w: inner.w, + h: inner.h, + } +} + +let at = { x: 470, y: 470 } +await page.mouse.move(at.x, at.y) + +/** Move the way a hand does: eased, and over enough frames to be seen moving. */ +async function glide (to, ms = 340) { + const from = at + const steps = Math.max(6, Math.round(ms / 16)) + for (let step = 1; step <= steps; step++) { + const t = step / steps + const eased = t < 0.5 ? 2 * t * t : 1 - ((-2 * t + 2) ** 2) / 2 + await page.mouse.move(from.x + (to.x - from.x) * eased, from.y + (to.y - from.y) * eased) + await sleep(16) + } + at = to +} +async function glideTo (selector, ms) { + await glide(middleOf(await page.locator(selector).boundingBox()), ms) +} +async function click () { + await page.mouse.down() + await sleep(60) + await page.mouse.up() +} +async function write (note) { + const editor = page.locator('#composer textarea.cnote') + await editor.waitFor() + await editor.pressSequentially(note, { delay: TYPE_MS }) + await editor.press('Enter') + await sleep(150) +} + +/* ── frames ── */ +const frames = [] +let capturing = true +const capture = (async () => { + for (let i = 0; capturing; i++) { + /* PNG, not JPEG: a lossy re-encode perturbs every block in the frame, so + two frames that differ only by the cursor differ everywhere, and the GIF + encoder can no longer skip the parts that did not change. It is worth + about half the file size. */ + const file = path.join(FRAMES, `f${String(i).padStart(5, '0')}.png`) + try { await page.screenshot({ path: file, type: 'png' }) } catch { return } + frames.push({ file, at: Date.now() }) + } +})() + +await sleep(150) + +/* ── a point comment on the compose row ── */ +const field = await framedBox('.field') +await glide({ x: field.x + field.width * 0.62, y: field.y + field.height / 2 }, 380) +await click() +await write(POINT_NOTE) + +/* ── an area comment over the whole list ── */ +const card = await framedBox('.card') +await glide({ x: card.x - 4, y: card.y - 6 }, 340) +await page.mouse.down() +await glide({ x: card.x + card.width + 4, y: card.y + card.height + 6 }, 460) +await page.mouse.up() +await write(AREA_NOTE) + +/* ── striking words out: the drag says which words go, and a note on top of it + says what to put in their place ── */ +/* The tool by its shortcut, not by a trip to the toolbar — that is a long move + away from the page for something a reviewer does with one key. The composer + has to be shut and unfocused first: a key pressed while typing is text, and a + composer left open also swallows the first press on the canvas, closing + itself instead of starting the gesture. */ +await page.evaluate(() => { window.closeComposer(); document.activeElement?.blur() }) +await sleep(250) // closing it re-lays the canvas out; measure after that +await page.keyboard.press('d') +await sleep(150) +if (await page.locator('#toolbar [data-tool=delete]').getAttribute('aria-pressed') !== 'true') { + throw new Error('pressing d did not reach the workspace — the strike tool is not selected') +} +/* Left to right, the way the words read. The footer sits well below the card, + so it is clear of the area mark and of the note that mark hangs beneath + itself — the press lands on canvas rather than on a mark, which would select + that comment instead of starting a gesture. + + Both ends sit inside the words. A point just past the last character is in no + text node at all, so no caret resolves there and the strike takes nothing. */ +const words = await wordsBox('.clear', 'all completed tasks') +const wordsY = words.y + words.h / 2 +await glide({ x: words.x + 2, y: wordsY }, 340) +await sleep(120) +await page.mouse.down() +await glide({ x: words.x + words.w - 2, y: wordsY }, 440) +await page.mouse.up() +/* A strike that captured nothing opens no composer, and the Escape below would + leave Annotate rather than close one — which is how a demo ends up sent with + the mark missing and nothing saying so. */ +await page.locator('#composer.on').waitFor({ timeout: 5000 }).catch(async () => { + console.error('strike diagnostics:', JSON.stringify({ + words, + composer: await page.locator('#composer').getAttribute('class'), + toast: await page.locator('.vs-toast').textContent().catch(() => null), + tool: await page.locator('#toolbar [data-tool=delete]').getAttribute('aria-pressed'), + mode: await page.locator('#modeSwitch [data-mode=annotate]').getAttribute('aria-pressed'), + comments: (await (await fetch(ORIGIN + '/api/project')).json()).comments.map(c => c.kind), + })) + throw new Error('the strike captured nothing') +}) +await sleep(120) +await write(STRIKE_NOTE) + +/* ── sending the round ── */ +/* Three marks were made, so three must be on the review before it is sent — a + gesture that quietly captured nothing would otherwise ship as a demo of two. + Saving is a request in flight, so this waits for it rather than sampling. */ +let marks = [] +for (let attempt = 0; attempt < 40 && marks.length < 3; attempt++) { + marks = (await (await fetch(ORIGIN + '/api/project')).json()).comments + if (marks.length < 3) await sleep(100) +} +if (marks.length !== 3) { + throw new Error(`three marks were made, ${marks.length} reached the review: ` + + marks.map(mark => mark.kind).join(', ')) +} +await glideTo('#btnSend', 380) +await click() +await delivered + +/* ── the agent's turn ── */ +const { comments } = await (await fetch(ORIGIN + '/api/project')).json() +const ids = comments.map(comment => comment.id).join(',') +fs.copyFileSync(path.join(HERE, 'pages/v2.html'), PAGE) +cli('publish', '--file', PAGE, '--close', ids, '--label', V2_LABEL, '--summary', V2_SUMMARY) + +await page.locator('#workBanner.on').waitFor() +await glideTo('#btnRefresh', 340) +await click() +await page.frameLocator('#frame').locator('.group').waitFor() +/* The toast covers the version it is announcing, and sitting through its life + and its fade is most of a second at the end of a GIF that loops. Take it off + rather than wait it out. */ +await page.evaluate(() => document.querySelector('.vs-toast')?.remove()) +await sleep(200) + +capturing = false +await capture +await browser.close() +for (const child of children) child.kill() + +const shot = (frames.at(-1).at - frames[0].at) / 1000 +console.log(`captured ${frames.length} frames over ${shot.toFixed(1)}s`) + +/* ── assembly ── */ + +/* One entry per state on screen: the first frame that showed it, and how long + it stayed. Capture runs well above the frame rate, so a still page is dozens + of copies, and a wait the reviewer sat through must not become a wait the + reader sits through. */ +const states = [] +for (const [index, frame] of frames.entries()) { + const hash = crypto.createHash('md5').update(fs.readFileSync(frame.file)).digest('hex') + const next = frames[index + 1] + const held = (next ? next.at : frame.at + 40) - frame.at + const last = states.at(-1) + if (last?.hash === hash) last.ms += held + else states.push({ hash, file: frame.file, ms: held }) +} +for (const state of states) state.ms = Math.min(state.ms, HOLD_CAP_MS) +states.at(-1).ms = FINAL_HOLD_MS + +const listFile = path.join(WORK, 'frames.txt') +const list = states + .map(state => `file '${state.file}'\nduration ${(state.ms / 1000).toFixed(3)}`) + .join('\n') +// The concat demuxer ignores the last entry's duration unless the file repeats. +fs.writeFileSync(listFile, `ffconcat version 1.0\n${list}\nfile '${states.at(-1).file}'\n`) + +const ffmpeg = (...args) => { + const run = spawnSync('ffmpeg', ['-hide_banner', '-loglevel', 'error', ...args], + { encoding: 'utf8' }) + if (run.status !== 0) throw new Error(run.stderr || 'ffmpeg failed') +} +const palette = path.join(WORK, 'palette.png') +const concat = ['-f', 'concat', '-safe', '0', '-i', listFile] +ffmpeg(...concat, '-vf', `fps=${FPS},palettegen=max_colors=${COLORS}:stats_mode=full`, + '-y', palette) +// No dithering: the page is flat colour, and dither noise defeats the encoder. +ffmpeg(...concat, '-i', palette, '-lavfi', + `fps=${FPS}[x];[x][1:v]paletteuse=dither=none:diff_mode=rectangle`, '-loop', '0', '-y', OUT) + +const seconds = states.reduce((total, state) => total + state.ms, 0) / 1000 +console.log(`${states.length} states, ${seconds.toFixed(1)}s, ` + + `${(fs.statSync(OUT).size / 1024).toFixed(0)} KB -> ${OUT}`) + +fs.rmSync(WORK, { recursive: true, force: true }) From a579ef343961f11fe5339c1fdcd2d0fcb27436d7 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sun, 9 Aug 2026 17:22:16 +0800 Subject: [PATCH 17/19] A Codex install is told when a new version is out MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The update banner only knew how to recognise a Claude Code install, and the Codex profile had the check switched off, so a Codex copy stayed on whatever release it was installed at with nothing to say so. Codex installs are now recognised by the version directory Codex unpacks them into, and the banner names the two commands that take the update. An install sitting behind a symlinked path — /var and /tmp on macOS, or a home directory that has moved — was not recognised as an install either, and got no banner. Covered by a new test, tests/update-check.mjs, which CI now runs. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 2 + CHANGELOG.md | 22 ++++++ CLAUDE.md | 31 ++++++++ plugins/vstack/.claude-plugin/plugin.json | 2 +- plugins/vstack/.codex-plugin/plugin.json | 2 +- plugins/vstack/contracts/host.md | 14 +++- plugins/vstack/contracts/host.schema.json | 4 +- plugins/vstack/host-profiles/codex.json | 10 ++- plugins/vstack/lib/update-check.mjs | 58 ++++++++++---- plugins/vstack/skills/review/hosts/codex.md | 14 +++- .../skills/review/tests/host-profiles.mjs | 14 +++- .../skills/review/tests/update-check.mjs | 77 +++++++++++++++++++ 12 files changed, 223 insertions(+), 27 deletions(-) create mode 100644 plugins/vstack/skills/review/tests/update-check.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 486d915..99cb9ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,8 @@ jobs: run: node plugins/vstack/skills/review/tests/workdir.mjs - name: Round gate run: node plugins/vstack/skills/review/tests/round-gate.mjs + - name: Update check + run: node plugins/vstack/skills/review/tests/update-check.mjs e2e: name: E2E (${{ matrix.host }}) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7eac04..1db83b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,28 @@ The version in `plugins/vstack/.claude-plugin/plugin.json` is what your host compares against to decide an update is available. See the release checklist in [`CONTRIBUTING.md`](CONTRIBUTING.md). +## 6.3.0 — 2026-08-09 + +**Fixed** + +- **Codex never told you a new version was out.** The update banner only knew + how to recognise a Claude Code install, and the Codex profile had the check + switched off, so a Codex copy stayed on whatever release it was installed at + with nothing to say so. Codex installs are now recognised by the version + directory Codex unpacks them into, and the banner shows the two commands that + take the update: + + ```text + codex plugin marketplace upgrade cavalry-collective + codex plugin add vstack@cavalry-collective + ``` + + A running Codex thread keeps the copy it started with, so start a new thread + after updating. +- An install sitting behind a symlinked path — `/var` and `/tmp` on macOS, or a + home directory that has moved — was not recognised as an install, and got no + banner. + ## 6.2.0 — 2026-08-09 **Changed** diff --git a/CLAUDE.md b/CLAUDE.md index bfe3e1f..883d9c7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,6 +35,7 @@ node plugins/vstack/skills/review/tests/review-lifecycle.mjs # end-to-end revi node plugins/vstack/skills/review/tests/host-profiles.mjs # host profiles conform to host.schema.json node plugins/vstack/skills/review/tests/workdir.mjs # .vstack/local working-dir resolution node plugins/vstack/skills/review/tests/round-gate.mjs # `unanswered` and the Stop hook that runs it +node plugins/vstack/skills/review/tests/update-check.mjs # per-host update detection and the banner it produces ``` The Gherkin end-to-end suite lives in `e2e/` — the one directory with a @@ -100,6 +101,16 @@ CLAUDE_CONFIG_DIR=$SANDBOX/.claude claude plugin details vstack # what a user rm -rf $SANDBOX ``` +The same rehearsal under Codex. `CODEX_HOME` is what keeps it out of the real +config, and the directory has to exist before Codex will use it: + +```bash +export CODEX_HOME=$(mktemp -d)/codex && mkdir -p "$CODEX_HOME" +codex plugin marketplace add "$PWD" +codex plugin add vstack@cavalry-collective +codex plugin list # what a user sees +``` + Nothing above runs a review end to end. For that, load the plugin from disk and drive the skill in a real project: @@ -107,6 +118,26 @@ drive the skill in a real project: claude --plugin-dir ./plugins/vstack ``` +Codex has no equivalent flag, and no way to read a working copy live. Adding the +clone as a local marketplace **copies** it into +`$CODEX_HOME/plugins/cache/cavalry-collective/vstack//`, and Codex runs +that copy. So a change made in the clone reaches Codex only when you re-run: + +```bash +codex plugin add vstack@cavalry-collective # re-copies, even at the same version +``` + +Then start a new Codex thread, because a running one keeps the copy it started +with. `codex plugin marketplace upgrade` does not do this — it refuses on +anything but a Git source. + +A marketplace is keyed by the `name` in `.claude-plugin/marketplace.json`, so +the clone and the published repository are both `cavalry-collective` and cannot +be configured at once. Codex refuses the second one until the first is removed +with `codex plugin marketplace remove cavalry-collective`. Working on the plugin +in your real `~/.codex` therefore means giving up the published install until +you add it back. + ## Architecture ### Contracts / engine / adapters / profiles diff --git a/plugins/vstack/.claude-plugin/plugin.json b/plugins/vstack/.claude-plugin/plugin.json index 14f4760..b6ed915 100644 --- a/plugins/vstack/.claude-plugin/plugin.json +++ b/plugins/vstack/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "vstack", "displayName": "Visual Stack", - "version": "6.2.0", + "version": "6.3.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Claude Code. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Claude publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/.codex-plugin/plugin.json b/plugins/vstack/.codex-plugin/plugin.json index bcacb35..9fcda75 100644 --- a/plugins/vstack/.codex-plugin/plugin.json +++ b/plugins/vstack/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "vstack", - "version": "6.2.0", + "version": "6.3.0", "description": "Stop prompting. Start pointing. Visual Stack adds a Figma-like feedback layer to Codex. Create a new screen from a prompt, screenshot, reference site, or design system, or open an app you already have running. Click any element and leave feedback exactly where the problem is hiding, and Codex publishes the next revision into the same workspace. Compare revisions on a timeline, preview desktop, tablet, and mobile layouts, and keep every comment attached to the element, route, and version it refers to. Wireframes are self-contained HTML and review state stays in your project.", "author": { "name": "Cavalry Collective", diff --git a/plugins/vstack/contracts/host.md b/plugins/vstack/contracts/host.md index 5454219..b45e6d9 100644 --- a/plugins/vstack/contracts/host.md +++ b/plugins/vstack/contracts/host.md @@ -104,8 +104,18 @@ When serving a workspace, the server: The workspace uses `name` (and related strings) for chrome. It never hardcodes a product name. -Update banners use `install` from the same profile when the Host supports -update detection (`capabilities.updateDetect`). +The server also checks whether a newer release exists, and hands the answer to +the page. `capabilities.updateDetect` says where an installed copy is found: + +| `capabilities.updateDetect` | Where the installed version comes from | +| --- | --- | +| `claude-install` | Claude Code's record in `~/.claude/plugins/installed_plugins.json` | +| `codex-install` | The version directory Codex unpacked the copy into, under `~/.codex/plugins/cache/` | +| `none` | Nowhere. No check runs and no banner appears | + +A Host that is not `none` must also give `install.commands`, because the banner +shows the reader how to take the update. A copy running from a clone matches no +install, and never produces a banner. --- diff --git a/plugins/vstack/contracts/host.schema.json b/plugins/vstack/contracts/host.schema.json index 4cbbfec..c610de1 100644 --- a/plugins/vstack/contracts/host.schema.json +++ b/plugins/vstack/contracts/host.schema.json @@ -37,8 +37,8 @@ }, "updateDetect": { "type": "string", - "enum": ["claude-install", "none"], - "description": "How to detect an installed copy for update banners." + "enum": ["claude-install", "codex-install", "none"], + "description": "Where to look for an installed copy when deciding whether to show an update banner. none skips the check." } } }, diff --git a/plugins/vstack/host-profiles/codex.json b/plugins/vstack/host-profiles/codex.json index c51e3d6..d651eec 100644 --- a/plugins/vstack/host-profiles/codex.json +++ b/plugins/vstack/host-profiles/codex.json @@ -5,6 +5,14 @@ "share": "copy", "watch": "stream", "browser": true, - "updateDetect": "none" + "updateDetect": "codex-install" + }, + "install": { + "howLead": "Run these in your shell, then start a new Codex thread:", + "commands": [ + "codex plugin marketplace upgrade cavalry-collective", + "codex plugin add vstack@cavalry-collective" + ], + "auto": null } } diff --git a/plugins/vstack/lib/update-check.mjs b/plugins/vstack/lib/update-check.mjs index 4272bbe..0093297 100644 --- a/plugins/vstack/lib/update-check.mjs +++ b/plugins/vstack/lib/update-check.mjs @@ -9,11 +9,20 @@ * dismissable line under the bar. * * WHAT COUNTS AS NEWER - * This asks the question Claude Code itself would ask, so the banner never - * disagrees with what `/plugin update` would do. Claude Code keys its update - * decision on the plugin's `version` when plugin.json declares one, and on the - * git commit the plugin was installed from when it does not, recording either - * in ~/.claude/plugins/installed_plugins.json. + * This asks the question the Host itself would ask, so the banner never + * disagrees with what that Host's own update command would do. Each Host says + * which question that is in `capabilities.updateDetect`, and each records an + * install somewhere different: + * + * claude-install Claude Code keys its update decision on the plugin's + * `version` when plugin.json declares one, and on the git + * commit the plugin was installed from when it does not, + * recording either in ~/.claude/plugins/installed_plugins.json. + * codex-install Codex keeps no such record. It unpacks each release into + * ~/.codex/plugins/cache////, + * so the directory the running copy sits in is the version + * Codex resolved, and its presence is what proves an install. + * none The Host has no install to compare. No banner. * * plugin.json declares a version, so the comparison is normally version against * version. A copy installed before that version existed has no version on @@ -21,7 +30,7 @@ * branch. * * A working copy is not an install. Running from a clone (developing the plugin - * itself) finds no entry, and the check returns nothing rather than telling you + * itself) matches nothing, and the check returns nothing rather than telling you * your own uncommitted branch is out of date. * * What it does, exactly, so nothing here is a surprise: @@ -40,13 +49,20 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import { injectHead } from './live-link.mjs' -const HERE = path.dirname(fileURLToPath(import.meta.url)) +/* Deciding whether one directory contains another is a string compare, and a + symlinked prefix — /var and /tmp on macOS, a home directory someone moved — + gives the same directory two names. Node hands a module its real path, so + every path compared against that one is put through the filesystem too. */ +const realPath = p => { try { return fs.realpathSync(p) } catch { return path.resolve(p) } } + +const HERE = realPath(path.dirname(fileURLToPath(import.meta.url))) const MANIFEST = path.join(HERE, '..', '.claude-plugin', 'plugin.json') const REPO = 'Cavalry-Collective/visual-stack' const BRANCH = 'main' const MARKET = 'cavalry-collective' // .claude-plugin/marketplace.json → name const PLUGIN = 'vstack' // the marketplace entry's name const INSTALLS = path.join(os.homedir(), '.claude', 'plugins', 'installed_plugins.json') +const CODEX_CACHE = path.join(os.homedir(), '.codex', 'plugins', 'cache', MARKET, PLUGIN) const CACHE = path.join(os.tmpdir(), 'vstack-update-check.json') const TTL_MS = 6 * 60 * 60 * 1000 const TIMEOUT_MS = 2500 @@ -66,7 +82,7 @@ function installedCopy () { if (!all) return null for (const [id, entries] of Object.entries(all)) { for (const e of entries || []) { - const root = e.installPath && path.resolve(e.installPath) + const root = e.installPath && realPath(e.installPath) if (root && (HERE === root || HERE.startsWith(root + path.sep))) { return { id, sha: e.gitCommitSha || null, version: e.version || null } } @@ -75,6 +91,19 @@ function installedCopy () { return null } +/** + * The Codex install this file belongs to, read from where it is sitting. Codex + * writes no install record, so the path is the record: a copy under + * //// was put there by `codex plugin add` + * at that version, and a copy anywhere else is a clone. + */ +function codexCopy () { + const root = realPath(CODEX_CACHE) + if (!HERE.startsWith(root + path.sep)) return null + const version = path.relative(root, HERE).split(path.sep)[0] + return version ? { id: `${PLUGIN}@${MARKET}`, sha: null, version } : null +} + /** 4.10.0 is newer than 4.9.3 — compare numbers, not strings. */ function isNewer (a, b) { const parts = v => String(v).split('-')[0].split('.').map(n => parseInt(n, 10) || 0) @@ -167,15 +196,18 @@ export function dismissUpdate (key) { * `{ pill, key, title, install, howLead, auto }` when there is something newer, * otherwise null. Never throws, never blocks longer than the timeout. * - * @param {object} [hostProfile] Host profile (contracts/host.md). When - * capabilities.updateDetect is "none", returns null. install/howLead/auto - * come from the profile when present so banners stay host-agnostic. + * @param {object} [hostProfile] Host profile (contracts/host.md). + * capabilities.updateDetect picks where an installed copy is looked for, and + * "none" returns null without looking. install/howLead/auto come from the + * profile when present so banners stay host-agnostic. */ export async function checkForUpdate (hostProfile = null) { if (process.env.VSTACK_NO_UPDATE_CHECK) return null - if (hostProfile?.capabilities?.updateDetect === 'none') return null + const detect = hostProfile?.capabilities?.updateDetect || 'claude-install' + const find = { 'claude-install': installedCopy, 'codex-install': codexCopy }[detect] + if (!find) return null // "none", or a Host this copy predates - const installed = installedCopy() + const installed = find() if (!installed) return null // a clone is not an install let words = null diff --git a/plugins/vstack/skills/review/hosts/codex.md b/plugins/vstack/skills/review/hosts/codex.md index 9ef51d4..87b81d1 100644 --- a/plugins/vstack/skills/review/hosts/codex.md +++ b/plugins/vstack/skills/review/hosts/codex.md @@ -86,6 +86,14 @@ codex plugin add vstack@cavalry-collective Start a new Codex thread and invoke **`$vstack:review`**, or describe a wireframe or UI-review task and let the skill trigger implicitly. -Update detection is disabled for Codex (`updateDetect: none`); use -`codex plugin marketplace upgrade cavalry-collective` and reinstall the plugin -when testing a newer marketplace revision. +Update detection uses the version directory Codex unpacked this copy into +(`capabilities.updateDetect: codex-install`), so the workspace says when a newer +release exists. Update with the two commands the banner shows: + +```text +codex plugin marketplace upgrade cavalry-collective +codex plugin add vstack@cavalry-collective +``` + +A running Codex thread keeps the copy it started with. Start a new thread after +updating. diff --git a/plugins/vstack/skills/review/tests/host-profiles.mjs b/plugins/vstack/skills/review/tests/host-profiles.mjs index e0accdf..ebf0100 100644 --- a/plugins/vstack/skills/review/tests/host-profiles.mjs +++ b/plugins/vstack/skills/review/tests/host-profiles.mjs @@ -18,7 +18,7 @@ assert.deepEqual(codex.capabilities, { share: 'copy', watch: 'stream', browser: true, - updateDetect: 'none', + updateDetect: 'codex-install', }) assert.equal(resolveHostId({ host: ' CODEX ' }), 'codex') @@ -29,8 +29,8 @@ assert.match(html, /"name":"Codex"/) /* Every profile conforms to contracts/host.schema.json. loadHost checks only the top-level keys, so the schema's shape is enforced here — nowhere else - validates it, and an off-enum value would otherwise fail silently at - runtime (update-check gates on "none" alone). */ + validates it, and an off-enum updateDetect would otherwise silently show no + banner, which reads exactly like having nothing to report. */ for (const id of listHosts()) { const p = loadHost(id) const where = `host-profiles/${id}.json` @@ -45,12 +45,18 @@ for (const id of listHosts()) { assert.ok(['artifact', 'copy', 'none'].includes(c.share), `${where}: share enum`) assert.ok(['stream', 'oneshot'].includes(c.watch), `${where}: watch enum`) assert.equal(typeof c.browser, 'boolean', `${where}: browser`) - assert.ok(['claude-install', 'none'].includes(c.updateDetect), `${where}: updateDetect enum`) + assert.ok(['claude-install', 'codex-install', 'none'].includes(c.updateDetect), `${where}: updateDetect enum`) if (p.install) { assert.deepEqual(Object.keys(p.install).filter(k => !['howLead', 'commands', 'auto'].includes(k)), [], `${where}: unknown install keys`) assert.ok((p.install.commands || []).every(x => typeof x === 'string'), `${where}: install.commands`) } + /* A Host that detects an update has to be able to say how to take it. The + fallback wording in update-check.mjs is Claude Code's slash commands, and + printing those to anyone else is worse than saying nothing. */ + if (c.updateDetect !== 'none') { + assert.ok(p.install?.commands?.length, `${where}: updateDetect without install.commands`) + } } console.log('host profiles: ok') diff --git a/plugins/vstack/skills/review/tests/update-check.mjs b/plugins/vstack/skills/review/tests/update-check.mjs new file mode 100644 index 0000000..ce244c1 --- /dev/null +++ b/plugins/vstack/skills/review/tests/update-check.mjs @@ -0,0 +1,77 @@ +#!/usr/bin/env node +/* + * update-check: a Host that says it can detect an update actually gets one. + * + * Every way this feature fails is silence — the wrong profile flag, an install + * this copy cannot recognise, a clone mistaken for an install — and silence is + * also what "you are up to date" looks like. So the banner is observed here + * rather than reasoned about. + * + * No network: the answer cache is seeded ahead of the call, so `ask` is inside + * its TTL and never reaches GitHub. + */ + +import assert from 'node:assert/strict' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' + +const PLUGIN = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../') +const profile = id => JSON.parse(fs.readFileSync(path.join(PLUGIN, 'host-profiles', `${id}.json`), 'utf8')) +const VERSION = JSON.parse(fs.readFileSync(path.join(PLUGIN, '.claude-plugin/plugin.json'), 'utf8')).version +const LATEST = '99.0.0' + +const sandbox = fs.mkdtempSync(path.join(os.tmpdir(), 'vstack-update-')) +/* Read at import time, so both must be in place before anything is loaded. */ +process.env.HOME = path.join(sandbox, 'home') +process.env.TMPDIR = path.join(sandbox, 'tmp') +fs.mkdirSync(process.env.TMPDIR, { recursive: true }) +delete process.env.VSTACK_NO_UPDATE_CHECK + +/* Where `codex plugin add` puts a release: one directory per version, which is + the only record Codex keeps of what it installed. */ +const installed = path.join(process.env.HOME, '.codex/plugins/cache/cavalry-collective/vstack', VERSION) +fs.mkdirSync(installed, { recursive: true }) +for (const part of ['lib', 'host-profiles', '.claude-plugin']) { + fs.cpSync(path.join(PLUGIN, part), path.join(installed, part), { recursive: true }) +} + +const cache = path.join(process.env.TMPDIR, 'vstack-update-check.json') +const seed = extra => fs.writeFileSync(cache, JSON.stringify({ at: Date.now(), kind: 'version', value: LATEST, ...extra })) +seed({}) + +const asCodexInstall = await import(pathToFileURL(path.join(installed, 'lib/update-check.mjs')).href) + +// The run that first hears about a release keeps it to itself; the next one says so. +assert.equal(await asCodexInstall.checkForUpdate(profile('codex')), null, 'first sighting is held back') + +const banner = await asCodexInstall.checkForUpdate(profile('codex')) +assert.ok(banner, 'Codex install is offered the update') +assert.equal(banner.key, LATEST) +assert.equal(banner.pill, 'update') +/* The commands are the Codex ones, not the `/plugin` fallback: printing Claude + Code slash commands to a Codex user is worse than printing nothing. */ +assert.deepEqual(banner.install, [ + 'codex plugin marketplace upgrade cavalry-collective', + 'codex plugin add vstack@cavalry-collective', +]) +assert.ok(!banner.install.some(line => line.startsWith('/')), 'no slash commands in a Codex banner') +assert.equal(banner.auto, null) + +// "Not now" is remembered for that release, and survives the ephemeral port. +asCodexInstall.dismissUpdate(LATEST) +assert.equal(await asCodexInstall.checkForUpdate(profile('codex')), null, 'a dismissed release stops asking') + +seed({ met: LATEST }) +// A Host with nothing to compare against is never asked the question. +assert.equal(await asCodexInstall.checkForUpdate(profile('grok')), null, 'updateDetect none stays quiet') + +/* This clone is not an install under any profile, so working on the plugin + never produces a banner about the branch in front of you. */ +const asClone = await import(pathToFileURL(path.join(PLUGIN, 'lib/update-check.mjs')).href) +assert.equal(await asClone.checkForUpdate(profile('codex')), null, 'a clone is not a Codex install') +assert.equal(await asClone.checkForUpdate(profile('claude')), null, 'a clone is not a Claude install') + +fs.rmSync(sandbox, { recursive: true, force: true }) +console.log('update check: ok') From d363c3aec7fbd267c5bc1a27f3a09a1a449c79f9 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sun, 9 Aug 2026 17:22:16 +0800 Subject: [PATCH 18/19] Design reference, and the rules for tweaking a screen that already exists design/ holds the prototypes, the design guide and its tokens. CLAUDE.md gains the rules that go with them: treat a tweak as a delta rather than a redesign, reuse the nearest comparable composition, and give a composition one owner once it appears twice. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 7 + design/CLAUDE.md | 34 + design/README.md | 34 + design/design-guide.html | 2193 ++++++++++++++++++++++++++++++++++++++ design/tokens.css | 248 +++++ 5 files changed, 2516 insertions(+) create mode 100644 design/CLAUDE.md create mode 100644 design/README.md create mode 100644 design/design-guide.html create mode 100644 design/tokens.css diff --git a/CLAUDE.md b/CLAUDE.md index 883d9c7..08c9750 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -534,3 +534,10 @@ These are load-bearing and easy to undo by accident: character is in no text node, no caret resolves there, and the strike silently takes nothing. +## UI tweaks and composition reuse + +- **Existing screens are the baseline for tweak work.** Before changing an existing screen, inspect the current implementation in the affected state and viewport, using the running app or the review context already supplied with the request. Treat the request as a delta, not permission to redesign: preserve its layout, hierarchy, spacing, typography, component variants, copy, states, and responsive behaviour unless the request explicitly changes them. A tweak never re-derives the screen from the design guide or its original mockup; the existing app is the reference. +- **Reuse components and compositions.** Before adding or changing a UI action, search the same feature and then the app for the most comparable existing instance of that action or composition. Reusing the same atom is not sufficient: in comparable contexts, also match placement, density, label shape, loading/disabled behaviour, and responsive treatment. If the new instance deliberately differs, record the contextual reason. +- **One owner at the second comparable instance.** When the same semantic composition appears twice in comparable contexts, give it one implementation in the same change: reuse or extend the owning molecule/organism, or extract one at the appropriate tier. Share a coherent interaction, not merely a bundle of matching classes. If the contexts require meaningfully different behaviour, keep them separate and document the distinction. +- **Verify without duplicating the visual workflow.** For a tweak to an existing screen, reuse the running screen or supplied review capture as the baseline; no separate before/after capture is required. Confirm the requested delta is present and unrelated visual structure is unchanged. +- **Self-review the baseline.** For every UI composition added or changed, name the comparable existing instance or documented pattern used as its baseline — or say why none fits — and confirm that unrelated visual structure was preserved. diff --git a/design/CLAUDE.md b/design/CLAUDE.md new file mode 100644 index 0000000..beceeb7 --- /dev/null +++ b/design/CLAUDE.md @@ -0,0 +1,34 @@ +# UI prototypes + +Rules for creating and iterating **UI prototypes in this folder only** — they do not govern app development (`apps/*` has its own `CLAUDE.md` files). The requirements spec under `specs/` is the source of truth for what to build; these rules govern how. + +## Deliverable contract + +- **One prototype = one self-contained HTML file.** Plain HTML, CSS, and JavaScript only — no frameworks, build step, package manager, or external requests. Everything (styles, scripts, data, icons) is inlined; the file opens from disk and works. +- **No backend.** All data is an in-file fake dataset; all behaviour is simulated client-side. Simulated latency is fine where it makes a loading state reviewable. +- **Fully interactive, honestly.** Navigation, forms, filters, dialogs, menus, sorting, and other controls the spec implies actually work against the fake data. A control that can't act is absent — never a dead button or fake link. +- **No tests.** No test code, harnesses, or app mechanics (persistence, auth, routing infrastructure). Effort goes into the experience, not engineering. + +## Visual source + +`tokens.css` + `design-guide.html` are the visual keystone. Use the semantic tokens (colour, type, spacing, radius) so every prototype looks like the same product. If a needed value is missing, extend the token scale — never hard-code per screen. + +## What to cover + +- **The main user journeys** in the spec, end to end — a reviewer should be able to *do* the tasks, not just look at screens. +- **Every relevant state**: loading, empty, success, error, validation, disabled, and permission-restricted where roles exist. Make states reachable through the UI itself (or an unobtrusive demo switch if they can't be triggered naturally). +- **Representative edge cases**: long names, large counts, zero results, partial data — chosen from what the domain will really produce. + +## Principles + +1. **Follow the spec; exercise judgement in its gaps.** Where the spec is silent, follow the patterns of established products in the domain — users already know them. Divergence needs a defensible improvement. +2. **Start lean, iterate to polished.** First pass covers the journeys plainly; refinement comes through review rounds. Exception: patterns that are table-stakes in the domain ship complete from day one. +3. **Tables are the enterprise workhorse.** Growing collections get real datagrids — search, sort, column filters, pagination — not cards or simple lists. +4. **Order by attention, place by belonging.** What the user acts on comes first; metrics last. Every control lives on the object it conceptually belongs to. +5. **Disclose progressively.** Big forms become steps; records lead with the most-used details, rest behind tabs — but don't hide what fits. +6. **Realistic, causally consistent data.** Credible scale, honest metrics: undefined is an em dash, never a fake zero. Numbers that should add up, do. +7. **Sweat the details.** Alignment, centred glyphs, conventional icons, live feedback during direct manipulation. Polished enough that stakeholders discuss the product, not the prototype. + +## Anti-patterns (remove on sight) + +Commentary copy (subtitles, explainer banners, self-narrating UI) · elements that don't earn their place · redundant marks (same fact twice) · dead or misleading controls · bold on data values (weight marks identity; colour marks state) · wrapping toolbars (overflow into …) · scrolling content inside a modal (the modal scrolls whole) · non-standard icons · desktop layouts compressed into phone widths. diff --git a/design/README.md b/design/README.md new file mode 100644 index 0000000..9ffa800 --- /dev/null +++ b/design/README.md @@ -0,0 +1,34 @@ +# design — UI prototype / design reference + +**Reference only — not part of the buildable workspace.** Prototypes live here and +are the source for visual design, screen inventory, copy, and flows. **Do not copy +the prototype code** into the apps (its structure is a single-file simulation, not +the app stack). See the *UI mockup / design reference* section in the root `CLAUDE.md`. + +This folder also holds the **design guide** — `design-guide.html` + `tokens.css`, +the visual keystone confirmed before any UI work (`apps/frontend/CLAUDE.md` → +*Design guide*) — and **`CLAUDE.md`**, the rules for creating the prototypes +(prototype work only, not app development). Everything below concerns the prototypes. + +The guide ships as foundations and is **hydrated per project**: reconciled with the +chosen UI component approach, then populated with that project's own component +specimens as they are built (`apps/frontend/CLAUDE.md` → *Hydrating the design guide*). + +## Layout + +Keep prototypes findable so "point the relevant prototype at the spec" is mechanical, not a hunt. + +- **One prototype = one self-contained HTML file per feature** (see `CLAUDE.md` → *Deliverable contract*), named by the feature's semantic name — never by tool export names like `screen-3-final-v2`. A prototype's screens are navigated inside the file. +- **Inventory table (below) is the index — keep it current** as screens are added. Columns: **screen** (semantic name) · **prototype file** · **owning spec**. Several screens may point at the same prototype file. The *screen* name must match its name in the central route registry (`apps/frontend/CLAUDE.md`), so a screen, its prototype, and its URL cross-reference through the registry — which stays the **only** route→URL surface (the frontend file forbids a second list, so this table carries no route column). +- **Flows** are shown by the prototype's own navigation — don't mandate separate flow diagrams. + +| Screen | Prototype file | Owning spec | +|---|---|---| +| _(example) dashboard_ | `dashboard.html` | `specs/2026-01-01-dashboard.md` | + +## Building from a prototype + +A screen's **initial build** is verified against its design reference — never declared done from reading the code. Prototypes guide that first build only: once a screen is iterated and improved it drifts from the prototype by design, so **later changes are verified against the running app, not re-checked against the prototype**. + +- **With a prototype — verify, don't assume.** After first building a screen that has a prototype, run the app and view the built screen at the project's declared primary form factor plus the responsive baseline's other end (e.g. mobile + desktop), compare against the prototype, and iterate until layout, spacing, visual hierarchy, and copy match. **Capture and actually look at the rendered output** (a screenshot or equivalent) — don't reason about the code and declare it done. This is the success marker for the screen's **initial build** (ties to root `CLAUDE.md` *Goal-driven execution*). The capture/visual-diff tool is a per-project choice; the view-and-compare-against-reference step is mandatory regardless of tool. +- **Without a prototype — don't invent silently.** For a non-trivial **new** screen with no prototype, sketch the screens/copy/flow in the feature's spec under `specs/` and get it approved there before building — reuse the existing spec gate, don't create a second approval process. For minor changes to an existing screen, build to the conventions in `apps/frontend/CLAUDE.md` and note in the PR that it was "built to convention, no prototype." Never improvise UI for a non-trivial new screen with no reference. diff --git a/design/design-guide.html b/design/design-guide.html new file mode 100644 index 0000000..95689b6 --- /dev/null +++ b/design/design-guide.html @@ -0,0 +1,2193 @@ + + + + + +Keystone — Design Guide + + + + + + + +
+
+ + + +
+ +
+

Keystone · design guide

+

Introduction

+

Cavalry ships many applications, and they should feel like the work + of one team. This guide is the design standard behind all of them: the principles, + tokens, and rules that define how our products look, behave, and communicate.

+

Every project chooses its own tech stack and component library, so this guide + deliberately stops short of implementation. It fixes the design decisions — the + visual language, the patterns, the values — and leaves each stack free to apply + them. Stating the expectations once, here, lets every new project start consistent + and scale quickly without restating them.

+
    +
  • Starting a project: rebrand by editing the primitive tier of + the design tokens; every page of this guide re-renders from the new values. + Review it in a browser before building any screen.
  • +
  • Building a screen: choose its screen archetype first, and + build with semantic tokens only.
  • +
  • Reviewing: check each chapter's closing rules; every + violation is a defect.
  • +
+
+

No special cases. When a shared building block cannot do what + a screen needs — a token scale missing a value, a component missing a feature — + extend the block, then use it. Never build a one-off inside a screen.

+
+
+ +
+

Start

+

Principles

+

Every principle serves one goal: reduce the user's cognitive effort. + The system adapts to the user's mental model, not the other way around. Six + principles in priority order — when two conflict, the earlier one wins.

+
+
01

Familiarity over novelty

+

Prioritize established design patterns over original ones. Users should immediately understand how to interact with the system without needing to learn a new interface. Every page should feel familiar, predictable, and consistent with the rest of the product.

+
02

Content before commentary

+

Interfaces exist to help users work with data, not read explanations. Keep instructional text and decorative copy to a minimum. Every word should have a purpose.

+
03

Make structure visible

+

Information is rarely flat. Use visual hierarchy, grouping, spacing, nesting, and typography to reflect relationships between data so users can quickly understand how information is organized.

+
04

Progressive disclosure

+

Present information and functionality only when it is needed. Use expandable sections, nested views, secondary pages, and contextual controls to reduce cognitive load while keeping advanced functionality easily accessible.

+
05

Guide the primary journey

+

Every screen should make the intended workflow obvious. The primary action should stand out through placement, visual emphasis, and button hierarchy, allowing users to complete common tasks with minimal thought.

+
06

Motion with purpose

+

Animation should communicate, not decorate. Use motion to soften transitions, indicate cause and effect, provide feedback, direct attention, and make waiting feel more natural. Motion should never distract from the task.

+
+
+ +
+

Start

+

Tokens

+

Every design decision is a named token. Screens reference roles, + never raw values.

+

A design token names the role of a value: a button references + --primary, never #e02b20. Screens contain no hard-coded + colour, spacing, typography, or motion values, so changing a token updates every + screen that depends on it. In this template the tokens live in one file, + tokens.css.

+ +

Token hierarchy

+

The tokens are organised in three tiers.

+
+
+
1 · primitiveRaw design values — the brand palette, spacing scale, type scale, motion durations. Only this tier changes in a rebrand. --red-400 · --space-3 · --duration-fast
+
↓ referenced by
+
2 · semanticNamed design roles, mapping intent to primitives — what screens and components consume. --primary · --muted-foreground · --gutter-screen
+
↓ referenced by
+
3 · componentComponent-specific values, created sparingly — only when a reusable component needs values shared nowhere else. --control-height · --box-padding
+
+
A rebrand touches tier 1; screens consume tier 2; tier 3 grows only as + components stabilise.
+
+ +

How tokens resolve

+

A screen asks for a role; the role resolves through the tiers to one raw value, + set once.

+
+
+
screen asks"What colour is the primary action?" → --primary
+
resolves to ↓
+
semantic--primary: var(--red-400) — the role picks a step
+
resolves to ↓
+
primitive--red-400 = — the raw value, set once
+
+
Changing the primitive updates every component that references it; the + screen never changes. Every annotation in this guide is read from the tokens the + same way, at load.
+
+ +

Naming

+

Name tokens by purpose, not appearance. --primary · + --muted-foreground · --gutter-screen survive a rebrand; + --red · --light-grey · --large-padding become wrong the + day the brand changes.

+ +

Theming

+

There is one light theme today. A future theme — dark, or a brand variant — + remaps the semantic tier only; screens and components need no changes.

+ +

Framework compatibility

+

Semantic colour roles follow shadcn/ui's theme vocabulary + (--background, --primary, + --muted-foreground …), so components can be adopted with minimal + modification. One intentional difference: --primary is the primary + action colour, while shadcn's --accent is reserved for low-emphasis + interactive surfaces such as hover states.

+ +
    +
  • Screens use semantic tokens only. Semantic tokens reference primitives; + component tokens reference semantic or primitive tokens as required.
  • +
  • No hard-coded colour, spacing, typography, duration, or radius inside a + screen — a hex or px literal is a violation, and a text search finds every + instance.
  • +
  • If a required token does not exist, add it to the shared token system; + never introduce a one-off value.
  • +
  • Semantic names describe purpose, not appearance.
  • +
+
+ +
+

Foundation

+

Colour

+

A small, consistent palette: neutral surfaces with a subtle purple + cast, Cavalry red for primary actions, and supporting colours for semantic + meaning.

+

Screens never reference raw colours directly. They consume semantic colour + tokens, which resolve to the underlying colour ramps + (Tokens).

+ +

Semantic colour roles

+

Semantic tokens describe the purpose of a colour rather than its appearance. + These are the only colour tokens screens use.

+
+ +
TokenValuePurpose
+ +

Colour ramps

+

Semantic tokens resolve to primitive colour ramps. Each colour family is a small + ramp of numbered steps, darker steps giving greater contrast; the neutral ramp + carries six steps to cover surfaces, borders, and text. Screens never reference a + ramp step directly. Hover a step for its value.

+
+ +

Intent formula

+

Status colours follow one structure throughout the system.

+
+ + + + + +
PurposeRamp step
Subtle background50
Border200
Interactive elements and content400
Text on tinted backgrounds600
+

The primary action colour adds hover (500) and pressed + (600) states. Supporting intent colours carry no interactive states, + so four steps is their whole ramp.

+ +

Accessibility

+

Every semantic colour pairing meets WCAG AA — verified, not assumed: 4.5:1 for + body text, 3:1 for large text and UI elements. Brand-vivid values that cannot hold + 4.5:1 (--red-300, the pure brand red, and --amber-400) + are for illustrations, decorative accents, and large graphics only — never + body-size text on a light background.

+ +

Meaning

+

Colour reinforces meaning but is never the only indicator. Pair it with icons, + labels, typography, and layout so every state remains understandable without + colour perception.

+
+
+
✕ Payment failed
+
Do — one colour family on the intent formula; the icon and text carry the meaning.
+
+
+
+
Don't — a bare red dot carries meaning by colour alone.
+
+
+

Destructive actions share the same brand red as primary actions. They are + distinguished through verb-first labels, confirmation flows, placement, and + context — never by introducing a separate red.

+ +
    +
  • Screens use semantic colour tokens only — never a ramp step, never a + hard-coded value.
  • +
  • Every colour pairing meets AA: 4.5:1 for body text, 3:1 for large text + and UI.
  • +
  • One semantic colour family per message or status.
  • +
  • Never rely on colour alone to communicate meaning.
  • +
  • Reserve the brand red for the primary action, links, and the focus + indicator.
  • +
+
+ +
+

Foundation

+

Typography

+

Typography creates clear hierarchy while staying quiet: as few + sizes and weights as necessary, so information rather than styling carries + the emphasis.

+

The system uses Space Grotesk for display text and headings, and Inter for all + interface and body text. When neither font is available, both fall back to the + system font stack.

+ +

Type scale

+

The type scale is a small set of reusable roles; the specimens below render from + the live tokens.

+
+ + + + + + + + + + +
RoleSpecimenTokenUse for
DisplayDisplay600 · display · boldCovers, heroes, full-page utility
TitlePage title500 · display · boldOne per page
HeadingSection400 · display · boldSections, cards, dialogs
BodyThe reading default.300 · regularParagraphs, forms
SecondaryLabels, tables, dense UI200 · regular/mediumControls, tables
CaptionMeta, helper text100 · regularDe-emphasized text
OverlineGroup label100 · capsGrouping labels
Metric12,480400 · tabularKPIs, dashboard stats
Codesum(rows)monoCode, ids
+

The scale is intentionally limited. Most screens need no more than four type + sizes and two font weights.

+ +

Hierarchy

+

Typography communicates structure before decoration. Each screen carries one + page title, and heading levels descend without skipping. Express hierarchy with + size first, before reaching for additional weights or colours; introduce a new + size only by extending the shared scale, never as a one-off value.

+ +

Line height

+

Reading text prioritises comfort; interface text prioritises alignment. Body + copy uses the base reading line height. Controls, labels, table + cells, and other dense UI use tight, so rows align consistently to + the spacing rhythm rather than optimising for long-form reading.

+
+
+
LabelInput values, one-liners, and checkbox labels use tight line-height and stay aligned in their row.
+
Dotight inside components: the row stays on the rhythm.
+
+
+
LabelBody line-height inside a component row pushes the rhythm apart and misaligns columns.
+
Don'tbase line-height breaks component alignment.
+
+
+ +

Numbers

+

Use tabular figures wherever values are compared vertically — tables, financial + data, dashboards, metrics, counters. Inside normal sentences, proportional + figures let the text flow naturally.

+
+
+
88,888.88
11,111.11
+
Do — tabular figures in tables and metrics: digits align, values compare.
+
+
+

You have 1,298 unread messages.

+
Don't — tabular digits inside a sentence stick out; prose uses proportional figures.
+
+
+ +

Wrapping & truncation

+

Text wraps by default, and layouts accommodate varying content lengths rather + than assuming fixed-height text. Truncation is reserved for genuinely fixed-width + slots such as a table cell or a list-row title: one line, an ellipsis, and the + complete value reachable through a tooltip, detail view, or equivalent. Page + titles, headings, labels, and action text never truncate — rewrite the copy + instead. Long unbroken strings (URLs, emails) wrap mid-string rather than + stretch their container; data values are the exception and never truncate or + split (Data formatting).

+
+
+
Meeting notes — Acme Corp renewal call, 12 Jan
+
Do — a fixed slot ellipsizes one line; the full value stays + reachable.
+
+
+
Save cha…
+
Don't — labels, headings, and actions never truncate; + reword them instead.
+
+
+
    +
  • Use the shared type scale only; a new size is a scale step, never a + one-off value.
  • +
  • Prefer four sizes and two weights per screen.
  • +
  • One page title per page; no skipped heading levels.
  • +
  • Body text stays within the reading measure (--measure).
  • +
  • UI text — buttons, badges, table headers, card values — is a + full string set in medium; bolding a word inside a + sentence uses strong, a separate role.
  • +
  • Tabular figures for comparable numeric data only.
  • +
  • Wrap by default; truncate only in fixed-width slots with the full value + reachable — never headings, labels, or buttons.
  • +
+
+ +
+

Foundation

+

Spacing

+

Spacing communicates relationships: elements that belong together + sit closer together, and every increase in spacing signals a stronger + separation.

+

Enterprise applications also use screen space efficiently. Prefer compact + layouts that maximise information density without compromising readability, + hierarchy, or ease of interaction — and remove decorative whitespace before + reducing spacing that communicates structure.

+

The system uses a six-step spacing scale. Related elements sit one step closer + together than unrelated elements.

+
+ +

Container padding

+

Padding inside a container is managed separately from spacing between + components: the spacing scale controls the distance between elements, the + box scale controls the space inside containers. Three sizes, + with the default in the middle and one size per column.

+
+
+
box-sm · dense tables
+
box · cards, dialogs (default)
+
box-lg · spacious panels
+
+
--box-padding-sm / --box-padding / --box-padding-lg — + the spacing scale governs space between siblings; boxes the padding within a container.
+
+ +

Information density

+

Users of enterprise systems spend most of their time scanning, comparing, and + editing information. Interfaces maximise the useful content visible at once + without feeling cluttered: compact layouts reduce scrolling, improve comparison + between related information, and increase efficiency. Prefer tighter layouts + over excessive whitespace, keep related information close, and group it into + clear visual sections — but preserve the spacing that communicates hierarchy, + and add no whitespace purely for aesthetics.

+ +

Vertical rhythm

+

Spacing, typography, and component dimensions work together: all land on the + same underlying 4px grid, so rows align naturally between neighbouring columns + and components and users can scan quickly. Text within components uses tighter + line heights so controls stay aligned to the grid.

+
+
+
Heading
+ +
Text blocks separated by uniform steps read as one column…
+ +
…so adjacent columns align row-for-row across a screen.
+
+
Line-heights and control heights land on the 4px grid — the rhythm is why + component text uses tight.
+
+ +

Page-level spacing is defined by semantic tokens — --page-title-gap, + --page-section-gap — rather than re-derived per page. These values + belong to the screen archetype and stay consistent + across the application.

+ +
    +
  • Use the spacing scale for all gaps between elements; use the box scale for + container padding.
  • +
  • Keep related elements one spacing step closer together than unrelated + elements.
  • +
  • Prefer compact layouts that maximise information density. Remove decorative + whitespace before structural spacing, and preserve the spacing that + communicates hierarchy and grouping.
  • +
  • No arbitrary spacing values. If the scale cannot express a layout, extend + the shared scale rather than the instance.
  • +
  • Maintain one consistent vertical rhythm through the page; page-level gaps + use their archetype-fixed tokens.
  • +
+
+ +
+

Foundation

+

Layout

+

One consistent frame for every screen: the responsive grid, + breakpoints, gutters, and content widths every page inherits.

+

Pages never recreate these values. They inherit them from the shared layout, + so every page behaves consistently across the product.

+ +

Responsive grid

+
+ + + +
12 columns ≥ lg · 8 from sm · 4 below. Columns are percentages; + gutters fixed at --space-3; margins are --gutter-screen.
+
+

Columns scale proportionally with the viewport while gutters stay fixed at + --space-3, so density stays even at any width; screen margins are + --gutter-screen. Components span columns, never fixed pixel + widths — six of twelve is half the page everywhere.

+ +

Content width

+

Pages use one of two standard content widths; the + screen archetype determines which.

+
+ + + +
TokenValuePurpose
--container-contentStandard application screens
--container-narrowReading, forms, focused workflows
+ +

Responsive behaviour

+

Design mobile-first, starting from a 320px viewport. Prefer intrinsic layouts + that adapt to available space through wrapping, flexible sizing, and + content-driven dimensions; introduce a breakpoint only when the overall layout + must change. The system defines two layout breakpoints.

+
+ + + +
TokenValuePurpose
--breakpoint-smNavigation docks; fields may align horizontally; 8-column grid
--breakpoint-lg12-column grid; secondary panels become available
+ +

Shared layout

+

The shared layout owns the application frame — navigation, headers, gutters, + safe-area handling, and fixed chrome. It alone reads the clearance tokens, so + fixed chrome reserves its space exactly once, safe areas included. Pages consume + these values; they never redefine them.

+
+ + + + +
TokenValuePurpose
--side-nav-widthThe fixed navigation rail
--gutter-screenScreen margins — applied by the layout
--header-clearanceReserved space for fixed headers and safe areas, counted once
+ +
    +
  • Build from a 320px viewport up; the page never scrolls sideways.
  • +
  • Prefer intrinsic layouts to breakpoints; add one only when the layout + genuinely changes.
  • +
  • Size content in grid columns, never fixed pixel widths.
  • +
  • Pick a standard container width; never define a custom page width.
  • +
  • Never redefine gutters, clearances, or navigation dimensions inside a + page.
  • +
  • The shared layout owns the application frame; the + screen archetype defines the structure within the + content area.
  • +
+
+ +
+

Foundation

+

Shape

+

Shape establishes visual hierarchy and grouping: a small set of + corner radii keeps components consistent and nested surfaces coherent.

+ +

Corner radius

+

Use the smallest radius that suits the component; larger surfaces generally + use larger radii.

+
+
--radius-1 badges, chips, small elements
+
--radius-2 buttons, inputs, cards (default)
+
--radius-3 dialogs, large panels
+
--radius-round avatars, pills
+
+ +

Nested surfaces

+

Nested surfaces appear as part of one visual system. A child surface never has + a larger corner radius than its parent; the outer radius equals the inner radius + plus the padding between them, so concentric corners stay visually aligned. This + rule applies to all nested containers, inset panels, and elevated surfaces + (Surfaces & elevation).

+
+
outer = inner + padding
concentric nesting
+
+ +

Borders

+

Borders define separation, not decoration. --border-1 is the + default border throughout the interface; --border-2 is reserved for + selected, active, and focused elements. Heavier borders are not an emphasis + tool — create hierarchy through layout, spacing, and typography instead.

+ +
    +
  • Use only the shared radius tokens; larger surfaces generally carry larger + radii.
  • +
  • A nested surface never out-rounds its parent; the concentric formula governs + every nested container and inset.
  • +
  • --border-1 for separation; --border-2 for selection + and focus states only.
  • +
  • Never use a heavier border for emphasis.
  • +
+
+ +
+

Foundation

+

Surfaces & elevation

+

Surfaces establish hierarchy by grouping related content. Every + surface belongs to a defined level that sets its background, shadow, and + stacking order together.

+

Create hierarchy with the simplest visual treatment possible: spacing before + backgrounds, backgrounds before borders, borders before shadows.

+ +

Surface levels

+

The interface uses four surface levels. Cards group content, not other + cards.

+
+ + + + + +
LevelTokensHoldsMay contain
Recessed--muted · no shadowWells, table headers, inset panels, disabled areasFlat content only — nothing raised
Page--background · no shadowThe primary page canvas: text, forms, tablesRecessed insets · cards
Card / panel--card · --shadow-1A self-contained group of related contentFlat content · a recessed inset — never another card
Floating--popover for menus and popovers, --card for dialogs, sheets, toasts · --shadow-2/3 · z-bandMenus, dialogs, popovers, toasts (layers below)Its own content; stacks by layer
+ +

Nesting

+

Nested surfaces communicate structure without adding visual weight. A card + never contains another card; organise content within a card using spacing + first, then a recessed inset, then a border where appropriate. Inset corners + follow the concentric formula (Shape) — a nested surface + never out-rounds its parent.

+
+
+
BillingPlan, seats, renewal date
A recessed inset groups the sub-content
+
Do — one card; spacing or a recessed inset groups within it.
+
+
+
Billing
A card inside the card
+
Don't — a card inside a card adds a border and shadow + without adding hierarchy.
+
+
+

Separation

+

To separate adjacent content, use the first separator in this list that makes the + grouping clear:

+
+ + + + + +
SeparatorReach for it when
1 · WhitespaceDefault. Proximity alone groups — Spacing owns the steps.
2 · Background shiftA zone needs enclosure without a line: recessed insets, table headers.
3 · BorderDense UI where space is already spent: input edges, table wrap, split panes.
4 · DividerRows in tables and dense lists only — never between page sections.
+ +

Floating layers

+

Floating surfaces exist outside the normal page hierarchy. Each layer pairs a + predefined shadow with a z-index, and the two always change together. Floating + surfaces render through the application's overlay system, never inside the page + layout.

+
+ +
Raised → overlay → modal: the deeper the shadow, the higher the + layer.
+
+
+ + + + + + + +
LayerZShadowHolds
ChromeSticky header, bottom nav
Popover--shadow-2Menus, dropdowns
Scrim--scrim behind modals
Modal--shadow-3Dialogs, sheets
Toast--shadow-2Toasts
Tooltip--shadow-1Tooltips
+
    +
  • Every container belongs to a defined surface level, which sets its surface + colour, shadow, and stacking order.
  • +
  • No card inside a card — group within a card using spacing or a recessed + inset, following the concentric corner rule.
  • +
  • Choose the lightest separator that communicates the grouping: whitespace → + background → border; dividers live in tables and dense lists only.
  • +
  • Recessed holds nothing raised; only floating surfaces cast + --shadow-2 and above.
  • +
  • Overlays and fixed chrome render through the shared overlay layer at their + predefined z-index — never where an ancestor's transform can + trap them.
  • +
+
+ +
+

Foundation

+

Motion

+

Motion communicates change: what happened, where content came + from, and what to focus on next. It never exists purely for decoration.

+

Every animation has a clear purpose — communicating state, preserving context, + or guiding attention.

+ +

Duration

+

Three duration bands, chosen by the size of the transition: larger surfaces + move more slowly than smaller interactions. Hover a lane to preview it.

+
+
fast press, toggle, hover
+
base menus, fades, expanding content
+
slow dialogs, sheets
+
+ +

Easing

+

Use the shared easing tokens throughout: --ease-decelerate for + entrances, --ease-standard for every other transition.

+ +

Purpose

+

Motion is used only to communicate state changes, explain where content comes + from or goes, guide attention to important changes, smooth transitions between + interface states, and make waiting and loading feel more natural. Decorative, + looping, and ambient animation is avoided.

+ +
    +
  • Every animation has a purpose.
  • +
  • Choose the duration band by the size of the transitioning surface.
  • +
  • Use the shared easing tokens.
  • +
  • Do not animate static interfaces or idle states.
  • +
  • Prefer subtle transitions over dramatic effects; motion clarifies the + interface, never competes with it.
  • +
+
+ +
+

Foundation

+

Icons

+

Icons aid recognition, never decoration. The system uses one icon + set and four sizes, and an icon always belongs to a label.

+ +

Sizes

+

Four sizes cover every context; choose by where the icon sits, not by taste.

+
+
--icon-size-xs · dense meta, table chips
+
--icon-size-sm · inline with text
+
--icon-size-md · buttons, controls
+
--icon-size-lg · navigation, features
+
+ +

Consistency

+

Each project adopts one icon set, recorded once at adoption; sets are never + mixed — a second set's line weight and style break the familiarity the icons + exist to provide. Use the conventional icon for an action, the one users already + know from established products.

+ +

Icons and labels

+

An icon is part of its label: it inherits the label's colour and centres to the + label's first line. Default to icon plus label. An icon-only control is allowed + only when the metaphor is established and the control carries an + accessible name; otherwise keep the label. Add icons only where they aid + recognition — an icon on every item helps no one.

+ +
    +
  • One icon set per project, recorded once — never mixed.
  • +
  • Use the four size tokens; choose by context.
  • +
  • Icons inherit the label's colour and centre to its first line.
  • +
  • An icon-only control needs an established metaphor and an accessible name; + otherwise keep the label.
  • +
  • Add icons only where they aid recognition.
  • +
+
+ +
+

Foundation

+

States & focus

+

Every interactive element follows the same interaction states, so + users can predict how a control responds regardless of its type.

+

State changes are driven by the design tokens, not by individual components. + A component never defines its own interaction colours or behaviour.

+ +

Interaction states

+

Every interactive element progresses through the same state model, shown here + on an abstract control. Hover and pressed derive automatically from the + underlying colour ramp — one step above rest for hover, two for pressed.

+
+
Rest400
+
Hover500 (+1)
+
Pressed600 (+2)
+
Focusring, visible
+
Selectedsubtle + border
+
Disabledmuted, not hidden
+
+ +

Focus

+

Keyboard focus is always clearly visible: a + ring in + --ring, offset + , applied on + :focus-visible so it appears for keyboard navigation. Never remove + the browser's focus outline unless it is replaced with the system focus + ring.

+ +

Touch feedback

+

Touch interactions always provide immediate visual feedback. Where hover is + unavailable, the pressed state communicates that the interaction has been + recognised.

+ +
    +
  • Every interactive element follows the shared state model.
  • +
  • Hover is one ramp step above rest; pressed is two. No component-specific + hover or pressed colours.
  • +
  • Always show a visible keyboard focus indicator; never remove focus styling + without the equivalent replacement.
  • +
  • Disabled stays visible — muted, not hidden.
  • +
  • Every interaction gives immediate visual feedback.
  • +
+
+ +
+

Foundation

+

Accessibility

+

Every screen meets one consistent baseline. Most of it is built + into the system through the shared tokens and components.

+
    +
  • Semantic colour pairings meet WCAG AA contrast requirements.
  • +
  • Interactive elements show a visible keyboard focus indicator.
  • +
  • Respect the user's reduced-motion preference — the duration tokens collapse + to zero automatically, and essential feedback never rides on motion alone.
  • +
  • Layouts remain usable from a 320px viewport and at 200% browser zoom.
  • +
  • Touch targets are at least + .
  • +
  • Never rely on colour alone to communicate meaning.
  • +
  • Headings establish a logical document structure.
  • +
+

Detailed accessibility guidance and implementation requirements — ARIA, + keyboard behaviour, screen-reader support — live in + apps/frontend/CLAUDE.md.

+
+ +
+

Foundation

+

Content

+

Interface copy helps users understand, decide, or act. Write only + what users need to complete their task.

+

Prioritise, in order: accuracy, clarity, relevance, concision, tone. Never + sacrifice meaning for brevity.

+ +

Writing principles

+

Write in plain, direct English. Avoid promotional, conversational, or overly + enthusiastic language.

+
    +
  • Sentence case everywhere; actions verb-first — "Save changes", never + "OK".
  • +
  • Short, complete sentences; active voice unless passive is clearer; one idea + per sentence.
  • +
  • Lead with the information users need first, and group related information + together.
  • +
  • Specific nouns and verbs; state observable actions and outcomes, not vague + claims.
  • +
  • Use established product and domain terminology; define unfamiliar terms + only when necessary.
  • +
  • Remove words that do not change the meaning.
  • +
  • Never blame the user.
  • +
+ +

Common patterns

+

Each surface has a specific purpose.

+
+ + + + + +
SurfaceThe copy's job
EmptyWhy it's empty + the next step: "No invoices yet. Create your first invoice."
ErrorWhat happened + how to recover, with the reference id; always a next step.
SuccessConfirm and name the object: "Invoice sent to Acme."
DestructiveName the consequence and count before confirmation: "Delete 3 invoices? This can't be undone."
+
+
+
+ + No invoices yet + Create your first invoice to start getting paid. + Create invoice +
+
Do — an empty state explains and offers the next step.
+
+
+
No data.
+
Don't — no explanation and no next step.
+
+
+ +

Action labels

+

One verb for one action throughout the application; an action never ships + under two labels.

+
+ + + + + + + + + + + +
VerbUse forNot
CreateMaking a new record — "Create invoice"New, Add
AddAttaching something that exists — "Add member"Create
EditOpening a record for changeModify, Change
SaveCommitting changes — "Save changes"Update, Submit (Submit = send for processing)
DeleteDestroying data — confirmed, per the row aboveRemove
RemoveDetaching without destroying — "Remove member"Delete
SearchFree-text lookup across recordsFind
FilterConstraining the visible listRefine
ExportProducing a file from dataDownload (Download = fetch an existing file)
CancelLeaving without savingClose (Close = dismiss, nothing pending)
+ +

What to avoid

+
    +
  • Filler, unnecessary words, and explanations of obvious behaviour.
  • +
  • Invented terminology when established terms exist.
  • +
  • Marketing language, exaggerated claims, rhetorical questions, and + slogans.
  • +
  • Artificial contrasts for emphasis, and the same point repeated in + different words.
  • +
  • Introductions or conclusions that do not help the user.
  • +
+

Prefer instructions and outcomes over explanations.

+
+ + + +
Instead ofWrite
The system handles the issue automatically.The system retries the request up to three times.
The setting controls visibility, not access.The setting controls whether the item is visible. It does not change who can access it.
+ +

Content management

+

Store all user-facing copy in the application's localisation or string + resources — reviewable as one surface. No hard-coded text in components.

+ +
    +
  • Write to help users understand, decide, or act; prioritise accuracy over + brevity.
  • +
  • Plain, direct English; sentence case; established terminology.
  • +
  • One action, one verb.
  • +
  • Empty states explain and guide; errors explain what happened and how to + recover; success messages confirm the completed action.
  • +
  • Never blame the user.
  • +
  • All interface copy lives in localisation resources.
  • +
+
+ +
+

Foundation

+

Data formatting

+

Users never relearn how dates, numbers, or currencies are + displayed from one screen to another: the same value always appears in the + same format.

+

Each data type has one format, implemented through the platform's formatting + libraries rather than custom logic. Store data in its canonical form and format + it only when presented to users.

+ +

Standard formats

+
+ + + + + + + + +
DataRuleExample
DatesMonth name in prose; ISO 8601 when numericJan 12, 2026 · 2026-01-12
Relative timeRelative for recent events, then absoluteJust now · 13 min ago · Yesterday at 10:30 am · Jan 12
NumbersThousands separators; tabular figures when values are compared vertically12,480
CurrencySymbol day-to-day; ISO code where currencies mix — one or the other, never both$12.50 · SGD 12.50 · −$4.20
Empty valueEm dash — never blank, "null", or a fake 0
TextWraps by default; truncates only in fixed-width slots with the full value accessibleQuarterly Financial Rep…
IdentifiersAtomic — never wrap, split, or truncateINV-2041
+ +

Dates and time

+

Store timestamps in UTC. Render dates, times, time zones, and locales through + the shared formatting utilities, pinned in one place, so every screen presents + them identically.

+ +
    +
  • Use the shared formatting utilities for every data type; no custom + formatting.
  • +
  • One format per data type throughout the application.
  • +
  • Tabular figures when comparing numeric values; an em dash for empty + values.
  • +
  • Wrap free text by default; never split identifiers, codes, or other atomic + values.
  • +
  • Store timestamps in UTC and format them in the user's locale.
  • +
+
+ +
+

Composition

+

Screen archetypes

+

Most enterprise applications consist of a small number of + recurring page layouts. Start from one of these archetypes before designing a + new screen.

+

Consistent page structures reduce the learning curve for users, speed up + development, and keep the product visually coherent. A page has one primary + archetype; individual sections may reuse patterns from another archetype (a + dashboard widget shows a small table), but the overall page structure stays + consistent. If no archetype fits, extend this guide before creating a new page + layout.

+ +

Application frame

+

Every page lives within the shared application layout + (Layout), which owns the header, the navigation, the + responsive behaviour, the gutters, and the content width. The archetype defines + only the content area. Below sm the nav rail collapses into a + menu — or a bottom bar on a mobile-first project — and the same page fills the + same region unchanged.

+
+
+
+ +

sm: fixed side nav

+
+
+ +

< sm: nav collapses (menu, or bottom nav on mobile-first)

+
+
+
1 top bar (--header-height) · + 2 side nav (--side-nav-width, fixed width) · + 3 the page — the archetype's territory.
+
+ +

Shared page structure

+

Every page begins the same way: a page title (the page's only H1), an optional + description, an optional breadcrumb or back action, page-level actions on the + trailing edge, then the page content.

+
+ +
Title left, page actions trailing, content below. Spacing and widths + come from the layout and the page-rhythm tokens + (Spacing · Layout).
+
+ +

Table / grid

+

Browse, search, filter, and act on many records — customers, orders, users, + invoices. Use when the primary task is finding or managing many items.

+
+ +
Zones: page header → search and filters → table or card list + (Tables & grids) → pagination. Reflow: rows become + cards below sm; the toolbar wraps; row actions fold into a + menu.
+
+ +

Record detail

+

Everything about a single record — a customer profile, an invoice, an employee + record. Use when understanding one record is the primary task.

+
+ +
Zones: page header (record name · status · actions) → key-facts + strip → content sections → related records and activity last. Reflow: the + facts strip wraps; side-by-side sections stack below sm.
+
+ +

Form

+

Create or edit a record on a single page — create customer, edit invoice, + update profile. Use when users can complete the task comfortably in one + sitting.

+
+ +
Zones: page header → field groups (one column) → primary actions. + Field anatomy, widths, and validation: the Forms pattern. + Reflow: one column at every width; only short, related fields pair up from + sm.
+
+ +

Multi-step flow

+

Guide users through a longer or unfamiliar process — onboarding, a loan + application, checkout, product setup. Use when the task has several logical + stages or would otherwise overwhelm users.

+

The progress stepper is horizontal, centred at the top of the content, above + the step. A stepper implies sequence — a long page that merely has many + sections is not a multi-step flow; give it vertical section tabs that work as + a minimap, never a stepper.

+
+ +
Zones: page header → horizontal progress stepper, centred → one + topic per step → step actions (previous · continue) → a review step before + completion. Reflow: the stepper compresses to "Step 2 of 4" below + sm.
+
+ +

Dashboard

+

An overview of system status that directs users to the operational pages — + executive, sales, operations. A dashboard summarises and links to where the + work happens; it never becomes the workplace itself.

+
+ +
Zones: page header (+ scope/time filter) → KPI strip → charts, + recent activity, alerts, and shortcuts on the grid. + Each widget hosts another archetype's content pattern in miniature and links + to it. Reflow: 12 → 8 → 4 columns; the KPI strip wraps 4 → 2 → 1.
+
+ +

Settings

+

View and modify configuration — profile, security, billing, notifications, + team. Group related settings; a large settings area earns vertical tabs — a + minimap of the groups — never a long scrolling page.

+
+ +
Zones: page header → settings groups — one group, one surface; + label-left, control-right rows inside. Save behaviour: the + Forms pattern. Reflow: label/control rows stack below + sm.
+
+ +

Utility

+

Standalone pages outside the application shell — sign in, sign up, password + reset, verify email, invitation acceptance, first-run onboarding. These pages + omit the application navigation and focus on one task.

+
+ +
Zones: one centred column — logo → headline → supporting text → + primary action. No nav, no chrome. Copy rules: + Content.
+
+ +

Error & status

+

Communicate that something prevented the requested action and guide the user + to recovery — not found, forbidden, server error, maintenance, offline, session + expired. Every error page explains what happened and offers a meaningful next + step.

+
+ +
Zones: one centred column — status icon or illustration → clear + heading → short explanation → recovery action → optional secondary + action.
+
+ +

View states

+

Every archetype defines its common states — loading, empty, populated, error, + partial failure, permission denied. A view state replaces the content within + the page; it never changes the page's archetype. The full patterns: + View states & feedback.

+ +

Choosing an archetype

+
+ + + + + + + + + +
Primary user goalArchetypeNot for → use insteadWidth
Browse many recordsTable / gridReading one record → Record detailcontent
Understand one recordRecord detailHeavy editing → Formcontent
Create or edit dataFormLong or unfamiliar tasks → Multi-step flownarrow
Complete a guided workflowMulti-step flowTasks that fit one screen → Formnarrow
Monitor the systemDashboardActing on records → Table / gridcontent
Configure behaviourSettingsOne-shot data entry → Formcontent
Complete a standalone taskUtilityAnything with navigation → the othersnarrow
Recover from an errorError & statusA zone-level failure → the page's error view statenarrow
+ +

Density

+

The box scale (Spacing) sets the app's density: a denser + product remaps --box-padding-* once, at the token layer. A zone's box size is + part of its archetype — table rows sit in box-sm by definition, set by + the archetype rather than per page.

+ +
    +
  • Start every page from an existing archetype; one primary archetype per + page.
  • +
  • The shared layout owns the application frame; the archetype owns the page + structure within it.
  • +
  • Sections may reuse another archetype's content pattern; the overall page + keeps one structure.
  • +
  • Page rhythm, edges, and widths come from the tokens and the layout — never + re-derived per page.
  • +
  • View states replace content, never the layout.
  • +
  • A sequence gets a horizontal, centred progress stepper; a long page gets + vertical section tabs (a minimap) — never a stepper.
  • +
  • No fit → extend this set in the guide before inventing a new page + layout.
  • +
  • One density app-wide, set at the token layer — never mixed within a + page.
  • +
+
+ +
+

Composition

+

Tables & grids

+

Tables are the primary workspace in enterprise applications. + Default to the standard table pattern whenever users work with collections of + data.

+

Search, sorting, filtering, pagination, column management, and bulk actions + are part of the standard experience — present by default, never added later as + requirements emerge. This pattern implements the + Table / grid archetype: build it with the project's + shared data table component, based on the adopted component library and table + engine, and extend the shared component through the + reuse order rather than creating feature-specific + implementations.

+
+

Optimise for repeated use, not first use. Enterprise users + work in the same tables every day, so consistency, efficiency, and + discoverability outrank a minimal first impression. A capability experienced + users rely on is part of the standard table, never an optional enhancement — + which is why these defaults are richer than a consumer application's.

+
+ +

Anatomy

+
+
+
+ Search invoices… + Issued: Q2 2026 + Clear all + Columns ▾Export +
+
+ + + + + + +
InvoiceCustomerStatusIssued ↓Amount
INV-2041Acme CorpOverdueJun 28, 202612,480.00
INV-2040NorthwindPaidJun 21, 20263,150.00
INV-2036GlobexPendingMay 30, 2026890.50
INV-2029InitechPaidMay 12, 202624,000.00
+
+
+ Rows: 25 ▾ + 1–25 of 37 · filtered from 312 + +
+
+
Zones, top to bottom: toolbar (global search leading · + active filters as chips · view controls trailing) → header row + (recessed, sortable, sticky) → rows in box-sm → + footer (page size · count · pages). The footer count keeps the + unfiltered total visible: a filtered table reads filtered from 312, + never just "37".
+
+ +

The toolbar order is fixed: search, then active filter chips, then view + controls (Columns, Export). The page's primary action belongs in the page + header, never inside the toolbar.

+ +

Standard capabilities

+

Every capability below is on by default for a working table. + Removing one (pagination on a bounded ten-row list, selection where no bulk + action exists) is a deliberate product decision, and it is recorded.

+
+ + + + + + + + +
CapabilityThe norm
Global searchOne box, leading in the toolbar; matches as you type across every searchable column; behaves as a filter and clears like one.
SortingEvery column sorts unless order is meaningless; one column at a time; the active header shows its direction and announces aria-sort; every table declares a default sort.
Column filtersEach column filters from its own header menu — free text within the column, or pick-from-values; active criteria surface as toolbar chips, removable one by one or via Clear all.
PaginationNumbered pages with an "x–y of z" count and a page-size picker — 10 / 25 / 50 / 100, default 25. Work tables never infinite-scroll.
Column customisationA Columns control toggles visibility and order; the identity column can't be hidden; choices persist per user, per table.
Selection & bulkLeading checkbox column; the header checkbox selects the page and offers "select all z"; a bulk bar with the count replaces the toolbar while a selection exists.
ExportExports the current dataset or the current selection, from the view controls.
+ +

Bulk actions

+
+
+
+ 2 selected + Select all 312 + ExportDelete +
+
+ + + + +
INV-2041Acme Corp12,480.00
INV-2040Northwind3,150.00
INV-2036Globex890.50
+
+
+
While a selection exists, a bulk bar replaces the toolbar. It shows the + selected count, its actions apply to exactly that count, and ✕ clears the selection. + Destructive bulk actions confirm with the count (Content).
+
+ +

Column conventions

+
+ + + + + + + + + +
ContentConvention
Identity (name, number)First after selection; links to the record; can't be hidden; one line, truncates with the full value reachable
TextLeft-aligned, one line
NumbersRight-aligned, tabular numerals, one precision per column (Data formatting)
CurrencyRight-aligned, the shared currency formatter (Data formatting)
DatesLeft-aligned, one format per table (Data formatting)
StatusA badge on the intent formula — text + tint, never colour alone (Colour)
IDs & codesMono, atomic — never truncated or wrapped
ActionsTrailing edge; at most two visible, the rest in a ⋯ menu
+
+
+
Amount
12,480.00
890.50
+
Do — amounts right-aligned in tabular numerals, one precision: magnitudes compare at a glance.
+
+
+
Amount
12480
890.5
+
Don't — left-aligned with mixed precision; each comparison requires re-reading the values.
+
+
+

Row behaviour

+

The row is the primary interaction target: clicking it opens the record, and + the trailing actions column carries the secondary tasks. One row height per + table (box-sm padding, font-size-200, tight + line-height) — cell content truncates with the full value reachable, and the + row never grows. The header is recessed and sticks while the table scrolls; + selection and identity columns stay pinned when it scrolls horizontally.

+ +

Filter state

+

Filtering always remains visible: active filter chips, a Clear all action, and + a count that keeps the unfiltered total on screen — "1–25 of 37 · filtered from + 312". Never show only the filtered count; users must always see that more + records exist.

+
+
+
Status: Overdue 1–8 of 8 · filtered from 312
+
Do — the filter is visible: a removable chip and a count that shows the unfiltered total.
+
+
+
8 items
+
Don't — with no filter indicator the table looks complete; the 304 hidden rows are invisible.
+
+
+ +

Responsive behaviour

+

Wide tables scroll horizontally inside their own container; the page itself + never scrolls sideways (Layout). Below sm + the table becomes cards — identity, one or two key attributes, status, and the + primary action. Never compress a desktop table into a narrow layout.

+ +

Loading and empty states

+

Tables use the standard view states. Loading + renders skeleton rows that preserve the table layout. Empty distinguishes "no + records yet" — with a primary action to create one — from "no matching + results", with guidance to clear or adjust filters. Errors follow the standard + error pattern.

+ +

Performance

+

Past one page of data, search, sorting, filtering, and pagination execute + together on the server. Never mix client-side and server-side behaviour — a + search that sees only the loaded page is broken.

+ +

User preferences

+

Visible columns, column order, sort order, and page size persist per user, per + table. Users configure a table once, never repeatedly.

+ +
    +
  • Default to the standard table pattern; search, sorting, filtering, + pagination, column management, bulk actions, and export are present unless + their removal is a recorded decision.
  • +
  • Toolbar order fixed: search → filter chips → view controls. The page's + primary action stays in the page header.
  • +
  • The row is the primary target; one row height per table; row dividers are + the sanctioned divider use (Surfaces).
  • +
  • Columns follow the shared formatting conventions + (Data formatting).
  • +
  • Filter state and the unfiltered total are always visible.
  • +
  • Search, sort, filter, and pagination run server-side together.
  • +
  • Preferences persist per user, per table.
  • +
  • Below sm the table becomes cards — never a compressed + grid.
  • +
+
+ +
+

Composition

+

Forms

+

Forms are the primary pattern for creating and editing data. They + minimise cognitive load through a clear, predictable structure.

+

Use the project's shared form components rather than composing fields directly + from HTML elements. Configure the component library to follow this standard, + and extend the shared components through the + reuse order instead of creating feature-specific + variations.

+
+

Optimise forms for data entry, not visual symmetry. Field + widths match the expected input, not the grid — not every field is full width. + Dense forms are acceptable while they stay readable; reduce scrolling before + adding decorative whitespace. Short related pairs — first and last name, postal + code and country — share a row instead of each spanning the page.

+
+ +

Structure

+

Every form follows the same layout: page header → field groups → actions. Each + field group holds its fields in one column; only short, closely related fields + share a row. Fields sit --space-3 apart, groups + --page-section-gap apart (Form + archetype). Avoid complex multi-column forms unless there is a clear + usability benefit.

+ +

Field anatomy

+

Every field follows the same structure: label, input, helper text. Labels are + always visible and sit above the field. Helper text sits below the input and + explains; the validation message replaces it when present. Placeholders give + examples only — never labels.

+
+
+
+ Company name + + As it appears on the invoice. +
+
Do — label above, helper below; the field is its own row.
+
+
+
+ Company name +
+
Don't — a placeholder as the label: it vanishes on focus + and fails as a label.
+
+
+

Field width

+
+
+
+ Postal code + +
+
Do — width mirrors the expected answer.
+
+
+
+ Postal code + +
+
Don't — a six-character answer in a paragraph-wide field.
+
+
+ +

Validation

+

Validate as early as practical without interrupting the user's flow. When + validation fails: the error appears directly beneath the affected field, + replacing the helper text; it explains what is wrong and how to fix it; and on + submission, focus moves to the first invalid field. Errors help users recover — + they never merely state that validation failed.

+
+
+ Email + + Enter an email with an @ — like name@company.com. +
+
The error replaces the helper, under the field it describes — what happened + plus what to do (Content).
+
+ +

Required and optional fields

+

Fields are required unless marked otherwise. Mark optional fields + "(optional)"; never use asterisks to indicate required fields.

+ +

Actions

+

Actions close the form: the primary action on the trailing edge, secondary + actions beside it, destructive actions kept separate on the leading edge. The + same order applies to pages, dialogs, and inline forms.

+ +

Choosing the right control

+

Use the simplest control that accurately captures the data. Avoid custom + controls when a standard component communicates the intent more clearly.

+
+ + + + + + + + + +
DataControl
Short textText input
Long textTextarea
One option from a small setRadio group
One option from a large setSelect, or a searchable combobox
Multiple optionsCheckbox group
BooleanSwitch
DateDate picker
NumberNumber input
+ +

Progressive disclosure

+

Show only the fields the current task requires; reveal additional fields when + earlier input or the workflow makes them relevant. Large forms divide into + logical sections. A long or unfamiliar workflow uses the + Multi-step flow archetype, never a single very long + page.

+ +
    +
  • Use the shared form components; standard controls before custom ones.
  • +
  • Labels always visible, above the field; the placeholder is never the + label.
  • +
  • Single column by default; only short, related fields share a row (from + sm); field width reflects the expected input.
  • +
  • Helper text explains; validation replaces it, names the fix, and focus + moves to the first failure on submit.
  • +
  • Mark optional fields "(optional)" — nothing is asterisked.
  • +
  • Actions close the form: primary trailing, secondary beside, destructive + apart on the leading edge — the same order everywhere.
  • +
  • Split long workflows into steps instead of building very long forms.
  • +
  • The pattern outranks the library default: configure the library to match; + what it can't express is justified via the + reuse order.
  • +
+
+ +
+

Composition

+

View states & feedback

+

Every page and component communicates its current state clearly. + A state replaces only the content it describes; feedback appears as close as + possible to what caused it.

+

This chapter decides placement; the wording is covered in + Content.

+
+

Preserve context whenever possible. Never wipe the page + during a refresh, replace the whole screen because one zone is loading, or + show a full-screen spinner for a partial update. Stale data stays visible + while newer data loads, and errors appear only where they occurred.

+
+ +

View states

+

The same view states apply throughout the application. A loading or error + state replaces only the affected content, never the entire page.

+
+ + + + + + +
StateWhere it rendersBehaviour
LoadingIn the zone it describesSkeletons matching the final layout
RefreshingStale content stays putSubtle indicator on the zone or control — never a page wipe
EmptyIn the zone, where records would beWhy it's empty + the next step
ErrorIn the zone that failedWhat failed + a recovery action
PartialLoaded zones renderSkeletons or retries only where data is still due
+
+
+
+
Do — the records zone skeletons; header and toolbar + stay interactive.
+
+
+
+
Don't — one zone's wait wipes the whole page behind + a spinner.
+
+
+ +

Loading

+

Skeletons preserve layout and reduce perceived waiting: simple geometric + shapes matching the size and structure of the final content, so the swap causes + no layout shift, pulsing subtly on the shared motion tokens. No full-page + spinners, no shimmer sweeps, no placeholder text. If the layout is known, use + skeletons; if only an individual action is pending, show progress on the + control itself instead.

+
+ +
One zone's skeleton: an identity row (avatar + two lines), a media block, + three text lines. Each box mirrors the element it holds space for — nothing more.
+
+ +

Empty states

+

An empty state explains why nothing is shown and what the user can do next. + Differentiate three situations, each guiding its own next action: no data + exists yet (offer the create action), filters returned no results (offer to + clear or adjust them), and the user lacks permission (say so, and name who to + ask).

+ +

Refreshing

+

Refreshing preserves context: existing content stays visible under a subtle + indicator while newer data loads. Never replace populated content with a + loading screen during a refresh.

+ +

Feedback

+

Choose the lightest feedback mechanism that clearly communicates the outcome, + and show it as close as possible to the cause.

+
+ + + + + +
SituationPattern
Field validation, control feedback — validation, toggle, pressInline, at the control that caused it
Background action completed or failed — invoice sent, settings saved, export startedToast — transient, non-blocking, names the object
Confirmation required — delete records, discard changes, replace dataDialog — names the consequence and count before the user proceeds
System-wide condition — offline, subscription expired, maintenance, missing permissionsBanner atop the affected zone or page, visible until resolved or dismissed
+

Toasts confirm, never interrupt. Dialogs interrupt only when a decision blocks + the action. Banners persist while their condition holds.

+ +
    +
  • Replace only the affected content, never the entire page; the surrounding + layout stays visible.
  • +
  • Skeletons for known layouts, progress on the control for a pending action — + never both for one wait, never a full-page spinner.
  • +
  • Refresh keeps stale content visible under a subtle indicator — no wipes, + no layout jumps.
  • +
  • Empty states explain what happened and what to do next.
  • +
  • Route feedback by cause — inline → toast → dialog → banner, the lightest + that fits, always on or naming what caused it.
  • +
  • Dialogs interrupt only when user confirmation is required.
  • +
  • Every state's copy follows the Content table — + placement here, words there.
  • +
+
+ +
+

Beyond

+

Components

+

Applications are built by composing reusable components. Screens + never build UI directly from HTML elements or duplicate existing components.

+

Components own appearance, interaction, accessibility, and behaviour; screens + compose them. Components consume the design system through semantic tokens, + never hard-coded values.

+
+

Never style HTML elements directly in application code. + HTML elements are implementation details of the component library, not building + blocks for screens: <Button />, never + <button className="…">.

+
+ +

Component hierarchy

+
+
+
tokensNamed design decisions — colour, type, spacing, motion (Tokens).
+
+
atomsThe smallest reusable components.
+
+
moleculesAtoms combined into reusable interactions.
+
+
organismsFeature-specific sections composed of atoms and molecules.
+
+
archetypesOrganisms arranged into a page structure (Screen archetypes).
+
+
pagesAn archetype filled with the feature's content.
+
+
Each layer is built from the one above it.
+
+

Atoms — Button, Input, Checkbox, Switch, Badge, Avatar, Icon, + Spinner — own their styling, states, accessibility, and interaction behaviour. + Screens use these shared components rather than styling HTML elements.

+

Molecules — Form field, Search input, Empty state, Pagination, + Date picker, Command palette — are complete interactions that appear in multiple + places.

+

Organisms — Billing summary, User profile, Navigation sidebar, + Data table, Activity feed — belong to the application, not the design + system.

+ +

Reuse order

+

Before creating anything new, stop at the first option that fits. "It would be + cleaner to rewrite it" is not a valid reason to create another component; a + near-duplicate with different styling fails the bar — restyle or extend the + original instead.

+

The reuse order applies to compositions as well as component types. Before + arranging existing atoms in a new way, search for the same action or interaction + in a comparable context and reuse its composition.

+
+
+
1 · archetypeUse an existing screen archetype.
+
no fit ↓
+
2 · patternUse a documented design pattern — tables, forms, view states.
+
no fit ↓
+
3 · organismUse an existing organism.
+
no fit ↓
+
4 · moleculeUse an existing molecule.
+
no fit ↓
+
5 · atomUse an existing atom.
+
no fit ↓
+
6 · extendExtend an existing component with a variant or option.
+
no fit ↓
+
7 · generateGenerate from the project's component library and theme it.
+
no fit ↓
+
8 · newBuild a new shared component — and record why nothing above fit.
+
+
The reuse order: stop at the first option that fits.
+
+ +
    +
  • Build screens from shared components, not raw HTML elements; never style + native HTML elements directly in application code.
  • +
  • Use semantic design tokens only.
  • +
  • Search before creating; extend before duplicating.
  • +
  • Promote repeated components into the shared library.
  • +
  • Screens compose components; components own behaviour.
  • +
+
+ + +
+
+ + + + diff --git a/design/tokens.css b/design/tokens.css new file mode 100644 index 0000000..27e8acc --- /dev/null +++ b/design/tokens.css @@ -0,0 +1,248 @@ +/* + KEYSTONE — design tokens, the single token source. + (see apps/frontend/CLAUDE.md → "Design guide") + + Three tiers: + 1. PRIMITIVE — raw scales. Rebrand HERE; everything re-derives. + 2. SEMANTIC — role-named aliases. Components use THESE, nothing deeper. + Colour roles follow shadcn/ui's theme vocabulary (--background, + --primary, --muted-foreground …) so copy-in components consume the + project's tokens without renaming. Roles shadcn doesn't define + (intent ramps, scrim, link, disabled/inverse text) extend the set + in the same naming style. + 3. COMPONENT — per-component overrides, only where genuinely needed. + + Default palette: the Cavalry brand (cavalry.sg) — Cavalry red primary, + purple-cast neutrals, violet/green/amber support; Space Grotesk display + over Inter body. Swap the primitive tier for another brand's ramps. + + Deliberately small: 4–6 steps per colour family, 6 type sizes, 6 space steps. + If a screen needs a value that isn't here, extend the scale — never the screen. + + One light theme. Dark is a later remap of the SEMANTIC tier only, if a + project needs it. Intent formula: subtle bg = 50 · border = 200 · + interactive/content = 400 (holds ≥ 4.5:1 on white — verified) · + text-on-tint = 600. The interactive red adds hover = 500 · pressed = 600; + support hues carry no hover duty, so four steps is their whole ramp. + Brand-vivid values that can't hold 4.5:1 (pure Cavalry red, amber) sit at + 300/400 for graphics and large accents only, never body-size text on white. + + Note: --primary and --destructive share the brand-red family in this + palette — destructive actions are disambiguated by wording and + confirmation, not hue. And --accent is shadcn's accent: the quiet + hover/selected surface, never the CTA colour — the CTA is --primary. + + Breakpoints can't be custom properties in media queries — keep in sync by + convention: sm 640 · lg 1024. Author from the smallest width up. +*/ + +:root { + color-scheme: light; + + /* ════════════════ 1 · PRIMITIVE ════════════════ */ + + /* Colour — purple-cast neutral, Cavalry red, violet / green / amber */ + --white: #ffffff; + + --gray-50: #f6f4f8; + --gray-200: #e6e2ec; + --gray-300: #cfc9d8; + --gray-400: #aaa2b3; + --gray-600: #665e72; + --gray-900: #171320; + + --red-50: #fff1f0; + --red-200: #ffb3ad; + --red-300: #ff3b30; /* the brand red — graphics & large accents (3.5:1 on white) */ + --red-400: #e02b20; /* interactive Cavalry red — 4.6:1 on white */ + --red-500: #b8231a; + --red-600: #8f1b14; + + --violet-50: #f4effe; + --violet-200: #c9b0f8; + --violet-400: #7c3aed; /* brand-exact */ + --violet-600: #4f1fa3; + + --green-50: #e9f9f2; + --green-200: #7fe0bd; + --green-400: #0b8157; + --green-600: #085c41; + + --amber-50: #fef5e6; + --amber-200: #fbd38d; + --amber-400: #f59e0b; /* brand-exact — graphics only (2.2:1 on white) */ + --amber-600: #8a5c06; + + /* Type — Space Grotesk for titles/headings, Inter for everything else; + both fall back to the system stack when not loaded */ + --font-family-base: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", + Roboto, Helvetica, Arial, sans-serif; + --font-family-display: "Space Grotesk", var(--font-family-base); + --font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + + --font-size-100: 0.75rem; /* 12 — caption, overline */ + --font-size-200: 0.875rem; /* 14 — labels, tables, dense UI */ + --font-size-300: 1rem; /* 16 — body (the default) */ + --font-size-400: 1.25rem; /* 20 — headings */ + --font-size-500: 1.75rem; /* 28 — page title */ + --font-size-600: 2.5rem; /* 40 — display: covers, heroes */ + + --font-weight-regular: 400; + --font-weight-medium: 500; + --font-weight-bold: 700; + + --line-height-tight: 1.25; /* headings, controls */ + --line-height-base: 1.5; /* body copy */ + --tracking-tight: -0.02em; /* titles */ + --tracking-caps: 0.06em; /* uppercase overlines */ + /* Tabular digits in tables/metrics: font-variant-numeric: tabular-nums */ + + /* Space — 6 steps. Every margin, padding, and gap is one of these. */ + --space-1: 0.25rem; /* 4 — inside controls */ + --space-2: 0.5rem; /* 8 — icon↔label, tight groups */ + --space-3: 1rem; /* 16 — component padding, gaps */ + --space-4: 1.5rem; /* 24 — between components */ + --space-5: 2rem; /* 32 — between sections */ + --space-6: 4rem; /* 64 — page-level rhythm */ + + /* Shape — concentric nesting: outer radius = inner radius + padding */ + --radius-1: 0.25rem; /* 4 — badges, chips, checkboxes */ + --radius-2: 0.5rem; /* 8 — buttons, inputs, cards */ + --radius-3: 0.75rem; /* 12 — modals, sheets, panels */ + --radius-round: 9999px; + + --border-1: 1px; /* default */ + --border-2: 2px; /* selected, focus */ + + /* Elevation — shadow and z-band travel together */ + --shadow-1: 0 1px 2px rgba(23, 19, 32, 0.08); /* raised: cards */ + --shadow-2: 0 4px 16px rgba(23, 19, 32, 0.12); /* overlay: menus, popovers */ + --shadow-3: 0 16px 48px rgba(23, 19, 32, 0.22); /* modal: dialogs, sheets */ + + --z-chrome: 100; /* sticky header / bottom nav */ + --z-popover: 200; /* menus, dropdowns */ + --z-overlay: 300; /* scrims, sheets */ + --z-modal: 400; /* dialogs */ + --z-toast: 500; /* toasts */ + --z-tooltip: 600; /* above everything */ + + /* Motion — reduced motion collapses all to 0 */ + --duration-fast: 150ms; /* state feedback: press, toggle */ + --duration-base: 250ms; /* reveals: menu, tooltip, fade */ + --duration-slow: 500ms; /* large surfaces: sheet, modal */ + --duration-pulse: 2000ms; /* skeleton pulse cycle */ + --ease-standard: cubic-bezier(0.2, 0, 0, 1); /* default (exits too) */ + --ease-decelerate: cubic-bezier(0, 0, 0.2, 1); /* entrances */ + + /* Focus — one visible ring everywhere */ + --focus-ring-width: 2px; + --focus-ring-offset: 2px; + + /* Sizing */ + --icon-size-xs: 0.75rem; /* 12 — dense meta, table chips */ + --icon-size-sm: 1rem; /* 16 — inline with text */ + --icon-size-md: 1.25rem; /* 20 — buttons, controls */ + --icon-size-lg: 1.5rem; /* 24 — navigation, features */ + --touch-target-min: 2.75rem; /* 44 — touch form factors */ + + /* Layout */ + --breakpoint-sm: 40rem; /* 640 — informational copy */ + --breakpoint-lg: 64rem; /* 1024 — informational copy */ + --container-content: 72rem; /* standard pages */ + --container-narrow: 42rem; /* reading, focused flows */ + --measure: 65ch; /* body copy cap */ + + /* ════════════════ 2 · SEMANTIC ════════════════ */ + + --background: var(--white); + --foreground: var(--gray-900); + --card: var(--white); + --card-foreground: var(--gray-900); + --popover: var(--white); + --popover-foreground: var(--gray-900); + --scrim: rgba(23, 19, 32, 0.4); + + --muted: var(--gray-50); /* quiet surface: subtle bg, chrome */ + --muted-foreground: var(--gray-600); + --foreground-disabled: var(--gray-400); + --foreground-inverse: var(--white); /* text on a dark (foreground) surface */ + + --border: var(--gray-200); + --border-strong: var(--gray-300); + --input: var(--gray-300); /* form-control border */ + --ring: var(--red-400); + + /* Primary — the single primary action per view; links share the hue */ + --primary: var(--red-400); + --primary-hover: var(--red-500); + --primary-active: var(--red-600); + --primary-subtle: var(--red-50); + --primary-foreground: var(--white); + --link: var(--red-400); + + /* Secondary & accent — quiet interactive surfaces (accent = the + hover/selected surface in shadcn's vocabulary, never the CTA) */ + --secondary: var(--gray-50); + --secondary-foreground: var(--gray-900); + --accent: var(--gray-50); + --accent-foreground: var(--gray-900); + + /* Intent — never colour alone; pair with text or an icon */ + --success: var(--green-400); + --success-strong: var(--green-600); /* text on the subtle tint — formula step 600 */ + --success-subtle: var(--green-50); + --success-border: var(--green-200); + --warning: var(--amber-600); + --warning-subtle: var(--amber-50); + --warning-border: var(--amber-200); + --destructive: var(--red-400); + --destructive-strong: var(--red-600); /* text on the subtle tint — formula step 600 */ + --destructive-subtle: var(--red-50); + --destructive-border: var(--red-200); + --destructive-foreground: var(--white); + --info: var(--violet-400); + --info-subtle: var(--violet-50); + --info-border: var(--violet-200); + + --radius: var(--radius-2); /* shadcn's base radius alias */ + + --text-body: var(--font-size-300); + --text-caption: var(--font-size-100); + + /* The shared layout applies these; pages never re-derive them */ + --gutter-screen: var(--space-3); + --side-nav-width: 9rem; /* fixed nav rail from sm up; collapses below */ + --header-height: 3.5rem; + --header-clearance: calc(var(--header-height) + env(safe-area-inset-top, 0px)); + --bottom-nav-height: 3.5rem; /* mobile-first form factors */ + --bottom-nav-clearance: calc(var(--bottom-nav-height) + env(safe-area-inset-bottom, 0px)); + + /* Page rhythm — fixed by the screen archetype (design-guide.html → + Screen archetypes); pages never re-decide these gaps */ + --page-title-gap: var(--space-4); /* page-header block → first content */ + --page-section-gap: var(--space-5); /* between content sections in a page */ + + /* ════════════════ 3 · COMPONENT ════════════════ */ + + --control-height: 2.25rem; /* 36 — shadcn's default control size (h-9) */ + --control-height-sm: 2rem; /* 32 — dense contexts: table toolbars (h-8) */ + --control-radius: var(--radius-2); + --control-padding-x: var(--space-3); + --control-padding-x-sm: var(--space-2); /* pairs with --control-height-sm */ + + /* Box model — a container's inner padding; one size per column. + The spacing scale governs space BETWEEN siblings, boxes the space WITHIN. */ + --box-padding-sm: var(--space-2); /* dense tables, chips */ + --box-padding: var(--space-3); /* cards, dialogs, widgets (default) */ + --box-padding-lg: var(--space-4); /* spacious panels, sheets */ +} + +/* Reduced motion — essential feedback never rides on motion alone */ +@media (prefers-reduced-motion: reduce) { + :root { + --duration-fast: 0ms; + --duration-base: 0ms; + --duration-slow: 0ms; + --duration-pulse: 0ms; + } +} From e36652f6a0d5fd1bb481ccfd199a39621ff5d951 Mon Sep 17 00:00:00 2001 From: DeyangChan Date: Sun, 9 Aug 2026 22:24:39 +0800 Subject: [PATCH 19/19] The palette comes from the design guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit design/ was a copy of the template repo's design folder, pointing at apps/frontend and specs/ — paths that exist in a scaffolded project, not here — while the shell decided the product's colours on its own. Two token files, each calling itself the source. design/tokens.css is now the source, and every page picks up the guide's Cavalry brand: purple-cast neutrals in place of the cool greys, and the brand red at the step that holds its contrast. Nothing moved and nothing was renamed, so the 1,227 places a page asks for a role are untouched — only the values behind them changed. The guide needed extending on two counts, both of which it allows for. The shell has three neutral steps where it had two, so it gains --gray-100, --gray-700 and a --ground role for the surface a window sits on. And it described dark as a later remap, while all five pages already render both, so dark is part of the source now. Two things it asks for cannot follow. A stamped page fetches nothing, so the type scale is the guide's but the families stay the system stack, and the shell holds literal values rather than importing them. That copy is the drift risk, so tests/design-tokens.mjs resolves both files and fails when they disagree — it already caught the mono stack differing by one fallback. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 2 + CHANGELOG.md | 14 ++ CLAUDE.md | 9 ++ design/CLAUDE.md | 69 ++++---- design/README.md | 81 ++++++---- design/design-guide.html | 4 +- design/tokens.css | 56 ++++++- plugins/vstack/.claude-plugin/plugin.json | 2 +- plugins/vstack/.codex-plugin/plugin.json | 2 +- .../phase-build/assets/build-board.html | 69 ++++---- .../experimental/spec/assets/spec-tree.html | 69 ++++---- .../experimental/start/assets/chooser.html | 69 ++++---- plugins/vstack/lib/shell/tokens.css | 69 ++++---- .../skills/review/assets/workspace.html | 69 ++++---- .../skills/review/tests/design-tokens.mjs | 147 ++++++++++++++++++ .../assets/story-map-template.html | 69 ++++---- 16 files changed, 546 insertions(+), 254 deletions(-) create mode 100644 plugins/vstack/skills/review/tests/design-tokens.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 99cb9ca..b2eecc0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,8 @@ jobs: run: node plugins/vstack/skills/review/tests/round-gate.mjs - name: Update check run: node plugins/vstack/skills/review/tests/update-check.mjs + - name: Design tokens + run: node plugins/vstack/skills/review/tests/design-tokens.mjs e2e: name: E2E (${{ matrix.host }}) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1db83b5..7072bb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,20 @@ The version in `plugins/vstack/.claude-plugin/plugin.json` is what your host compares against to decide an update is available. See the release checklist in [`CONTRIBUTING.md`](CONTRIBUTING.md). +## 6.4.0 — 2026-08-09 + +**Changed** + +- **One place decides what the product looks like.** The palette now comes from + `design/tokens.css`, the design guide's token source, instead of being decided + in the shared shell. Every page — the review workspace, the story map, the + spec tree, the build board, the chooser — picks up the guide's Cavalry brand: + purple-cast neutrals in place of the cool greys, and the brand red at the step + that holds its contrast on white. Nothing moved and nothing was renamed; only + the colours changed. +- Dark is now part of that source rather than something the shell decided on its + own, so both themes come from the same place. + ## 6.3.0 — 2026-08-09 **Fixed** diff --git a/CLAUDE.md b/CLAUDE.md index 08c9750..879a20a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -36,6 +36,7 @@ node plugins/vstack/skills/review/tests/host-profiles.mjs # host profiles c node plugins/vstack/skills/review/tests/workdir.mjs # .vstack/local working-dir resolution node plugins/vstack/skills/review/tests/round-gate.mjs # `unanswered` and the Stop hook that runs it node plugins/vstack/skills/review/tests/update-check.mjs # per-host update detection and the banner it produces +node plugins/vstack/skills/review/tests/design-tokens.mjs # the shell's palette still matches design/tokens.css ``` The Gherkin end-to-end suite lives in `e2e/` — the one directory with a @@ -197,6 +198,14 @@ hand-edit a stamped region; page-specific controls go in `vstack:slot` blocks, which survive stamping. New pages register in the `PAGES` list in `build-shell.mjs`. +The palette itself is decided in [`design/`](design/README.md), not in the +shell. `design/tokens.css` owns the scales; `lib/shell/tokens.css` carries them +as the roles pages consume (`--surface`, `--ink`, `--brand`). It is a copy, +because a stamped page may fetch nothing — so changing a colour means editing +both files and running `stamp`, and `tests/design-tokens.mjs` fails when they +disagree. The type scale is the guide's; the families are not, since a webfont +is an external request. + ### On-disk state Every tool writes per-machine state under `/.vstack/local//` diff --git a/design/CLAUDE.md b/design/CLAUDE.md index beceeb7..da9587f 100644 --- a/design/CLAUDE.md +++ b/design/CLAUDE.md @@ -1,34 +1,35 @@ -# UI prototypes - -Rules for creating and iterating **UI prototypes in this folder only** — they do not govern app development (`apps/*` has its own `CLAUDE.md` files). The requirements spec under `specs/` is the source of truth for what to build; these rules govern how. - -## Deliverable contract - -- **One prototype = one self-contained HTML file.** Plain HTML, CSS, and JavaScript only — no frameworks, build step, package manager, or external requests. Everything (styles, scripts, data, icons) is inlined; the file opens from disk and works. -- **No backend.** All data is an in-file fake dataset; all behaviour is simulated client-side. Simulated latency is fine where it makes a loading state reviewable. -- **Fully interactive, honestly.** Navigation, forms, filters, dialogs, menus, sorting, and other controls the spec implies actually work against the fake data. A control that can't act is absent — never a dead button or fake link. -- **No tests.** No test code, harnesses, or app mechanics (persistence, auth, routing infrastructure). Effort goes into the experience, not engineering. - -## Visual source - -`tokens.css` + `design-guide.html` are the visual keystone. Use the semantic tokens (colour, type, spacing, radius) so every prototype looks like the same product. If a needed value is missing, extend the token scale — never hard-code per screen. - -## What to cover - -- **The main user journeys** in the spec, end to end — a reviewer should be able to *do* the tasks, not just look at screens. -- **Every relevant state**: loading, empty, success, error, validation, disabled, and permission-restricted where roles exist. Make states reachable through the UI itself (or an unobtrusive demo switch if they can't be triggered naturally). -- **Representative edge cases**: long names, large counts, zero results, partial data — chosen from what the domain will really produce. - -## Principles - -1. **Follow the spec; exercise judgement in its gaps.** Where the spec is silent, follow the patterns of established products in the domain — users already know them. Divergence needs a defensible improvement. -2. **Start lean, iterate to polished.** First pass covers the journeys plainly; refinement comes through review rounds. Exception: patterns that are table-stakes in the domain ship complete from day one. -3. **Tables are the enterprise workhorse.** Growing collections get real datagrids — search, sort, column filters, pagination — not cards or simple lists. -4. **Order by attention, place by belonging.** What the user acts on comes first; metrics last. Every control lives on the object it conceptually belongs to. -5. **Disclose progressively.** Big forms become steps; records lead with the most-used details, rest behind tabs — but don't hide what fits. -6. **Realistic, causally consistent data.** Credible scale, honest metrics: undefined is an em dash, never a fake zero. Numbers that should add up, do. -7. **Sweat the details.** Alignment, centred glyphs, conventional icons, live feedback during direct manipulation. Polished enough that stakeholders discuss the product, not the prototype. - -## Anti-patterns (remove on sight) - -Commentary copy (subtitles, explainer banners, self-narrating UI) · elements that don't earn their place · redundant marks (same fact twice) · dead or misleading controls · bold on data values (weight marks identity; colour marks state) · wrapping toolbars (overflow into …) · scrolling content inside a modal (the modal scrolls whole) · non-standard icons · desktop layouts compressed into phone widths. +# Working in design/ + +Rules for changing the visual source. What it is and how it reaches the pages is +in [`README.md`](README.md). + +## The token source + +- **One source.** `tokens.css` owns the palette, type, space, shape and + elevation scales. `plugins/vstack/lib/shell/tokens.css` carries the same + values as the roles pages consume. Change this file, then the shell, then run + `node plugins/vstack/lib/build-shell.mjs stamp` — all in the same commit. +- **Extend the scale, never the screen.** A page that needs a value which is not + here gets a new step here. Hard-coding a colour in a page is how two greys + that should have been one end up on the same screen. +- **Three tiers.** Primitives are raw scales and are where a rebrand happens. + Semantic roles name what a value is for, and are what everything else reads. + Component overrides exist only where a component genuinely differs. +- **Every colour role is defined for light and dark.** A page renders in both, + and a role that exists in one is a hole in the other. + +## The guide + +- `design-guide.html` is the page to open when judging whether a change still + reads as one product. Keep it showing what the tokens currently are, not what + they were. +- It is a page like any other Visual Stack ships: self-contained, no build step, + no external requests, works opened off disk. + +## What this folder does not decide + +- **Behaviour.** How the review loop works is `plugins/vstack/contracts/`. +- **Page structure.** The shared top bar, scrubber and their scripts are + `plugins/vstack/lib/shell/`, stamped into pages rather than linked. +- **Anything host-specific.** A product name reaches a page as data from a Host + profile, never as a value here. diff --git a/design/README.md b/design/README.md index 9ffa800..ac0910c 100644 --- a/design/README.md +++ b/design/README.md @@ -1,34 +1,47 @@ -# design — UI prototype / design reference - -**Reference only — not part of the buildable workspace.** Prototypes live here and -are the source for visual design, screen inventory, copy, and flows. **Do not copy -the prototype code** into the apps (its structure is a single-file simulation, not -the app stack). See the *UI mockup / design reference* section in the root `CLAUDE.md`. - -This folder also holds the **design guide** — `design-guide.html` + `tokens.css`, -the visual keystone confirmed before any UI work (`apps/frontend/CLAUDE.md` → -*Design guide*) — and **`CLAUDE.md`**, the rules for creating the prototypes -(prototype work only, not app development). Everything below concerns the prototypes. - -The guide ships as foundations and is **hydrated per project**: reconciled with the -chosen UI component approach, then populated with that project's own component -specimens as they are built (`apps/frontend/CLAUDE.md` → *Hydrating the design guide*). - -## Layout - -Keep prototypes findable so "point the relevant prototype at the spec" is mechanical, not a hunt. - -- **One prototype = one self-contained HTML file per feature** (see `CLAUDE.md` → *Deliverable contract*), named by the feature's semantic name — never by tool export names like `screen-3-final-v2`. A prototype's screens are navigated inside the file. -- **Inventory table (below) is the index — keep it current** as screens are added. Columns: **screen** (semantic name) · **prototype file** · **owning spec**. Several screens may point at the same prototype file. The *screen* name must match its name in the central route registry (`apps/frontend/CLAUDE.md`), so a screen, its prototype, and its URL cross-reference through the registry — which stays the **only** route→URL surface (the frontend file forbids a second list, so this table carries no route column). -- **Flows** are shown by the prototype's own navigation — don't mandate separate flow diagrams. - -| Screen | Prototype file | Owning spec | -|---|---|---| -| _(example) dashboard_ | `dashboard.html` | `specs/2026-01-01-dashboard.md` | - -## Building from a prototype - -A screen's **initial build** is verified against its design reference — never declared done from reading the code. Prototypes guide that first build only: once a screen is iterated and improved it drifts from the prototype by design, so **later changes are verified against the running app, not re-checked against the prototype**. - -- **With a prototype — verify, don't assume.** After first building a screen that has a prototype, run the app and view the built screen at the project's declared primary form factor plus the responsive baseline's other end (e.g. mobile + desktop), compare against the prototype, and iterate until layout, spacing, visual hierarchy, and copy match. **Capture and actually look at the rendered output** (a screenshot or equivalent) — don't reason about the code and declare it done. This is the success marker for the screen's **initial build** (ties to root `CLAUDE.md` *Goal-driven execution*). The capture/visual-diff tool is a per-project choice; the view-and-compare-against-reference step is mandatory regardless of tool. -- **Without a prototype — don't invent silently.** For a non-trivial **new** screen with no prototype, sketch the screens/copy/flow in the feature's spec under `specs/` and get it approved there before building — reuse the existing spec gate, don't create a second approval process. For minor changes to an existing screen, build to the conventions in `apps/frontend/CLAUDE.md` and note in the PR that it was "built to convention, no prototype." Never improvise UI for a non-trivial new screen with no reference. +# design — the visual source for every page Visual Stack ships + +This folder decides what the product looks like. `tokens.css` holds the palette, +type, spacing, shape and elevation scales; `design-guide.html` shows them +rendered, and is the page to open when deciding whether a change reads as the +same product. + +Everything Visual Stack ships is a page: the review workspace, the story map, +the spec tree, the build board, the chooser. They are the screens this guide +governs. There is no separate application. + +## How the tokens reach the pages + +A page never links this folder. Every page has to work three ways — served over +http, opened off disk, and inlined into an Artifact under a CSP that blocks all +external requests — so nothing is fetched at runtime. + +1. `tokens.css` is the source: the primitive scales, and the role each one fills. +2. `plugins/vstack/lib/shell/tokens.css` carries those values as the roles pages + actually consume — `--surface`, `--ink`, `--brand`, `--line`. +3. `plugins/vstack/lib/build-shell.mjs stamp` copies the shell into every page + between its `vstack:shell` markers. + +So a colour changes here, and reaches the product on the next stamp. Run +`build-shell.mjs check` to find a page that has drifted. + +## Rules that come from the pages, not from the guide + +- **Roles, not colours.** A page asks for `--surface`, never for white. That is + what lets one stylesheet serve light and dark. +- **Both themes are first-class.** Every page supports the OS preference and an + explicit choice. A value added for light needs its dark counterpart in the + same change. +- **System fonts only.** The type scale is honoured; the families are not. A + webfont is an external request, which an Artifact's CSP blocks and a file on + disk cannot make, and embedding faces would land in every stamped page. +- **Page-specific hues stay in the page.** The story map's phase bands, the + board's new/have/touch, the spec's priorities mean something only there. This + folder holds what is shared. + +## Where the rest of the rules live + +- Working on the pages, the stamped shell and the build: the root + [`CLAUDE.md`](../CLAUDE.md) → *Self-contained pages and the stamped shell*. +- Changing an existing screen: root `CLAUDE.md` → *UI tweaks and composition + reuse*. +- Working in this folder: [`CLAUDE.md`](CLAUDE.md). diff --git a/design/design-guide.html b/design/design-guide.html index 95689b6..737164c 100644 --- a/design/design-guide.html +++ b/design/design-guide.html @@ -10,7 +10,7 @@

%5=p+#@F5h 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%0A%14GXM75sRvXYm2Nxqb|thQ-*@wKW= z98aAk*w|67=5+~Iaoa72N5$qJ2~5eBPYPsGcgL;R=RR`$V4v=0b+-x7z9-PRt{;hm zhA<-mC#J@*M7%Jh=+8VIwdav~vGNuG2bQEaV0QA1BS}p;Wil*%GK#WpOI9baUswiC1jL?M`ZwtKe+{rqsJ&rZ41m{NVg-NZFQoyu3Q3R%~w=cWMPoC_M zo!sKG_e`fDBK+)L?vz`#UhW;Mnz>C#nh*Q&?&xVISYtIjFeMIU-AuLO zk~pkn^omn1QuTL*45GW;A)W@*sAr#2+(lv7Mv@5TW~%MMXoT+?GR0UQjD%>9&jni1 z4)A6^Z|~Wkyq=ulVsD)!NKLj50($~*2Q-tDR7yJIN#YnP28j+?IPpT!!0Y!SJM~3GM-mWc_ zDh2&Cu#AJ7rmQp*Nq`udP?}`FbDENMdFlxE9xL_}mfjNYq)@SWmpr zTWqkaxS1tnB4K#~it|P@c;H04ju71Hyb3)jIS-bRF9y>TAu$&noi%qpt--R?RS&Sh z{eetjiQsN{Ht`6(7D0)h|uI z@6oP~0>Ec9Na!wKg4NE~U5_lks|~&gwGbM&Jz`$HC4~=j_;gNQ>Q7W10Oqtwx>uJ&0Veht-Dj*6XI#om?ZsD2lCI4 z>!Bz%%9}?8_4Q(I6wXPX4GG;zd)j~M_Y4%xfyn0(D8YF_;Gf}=SSu7=wsN-`mJD?e z0Wt64VDz`cOpnW>*s_fhEI{159Y(+$#DhHl5MJA=6c3ihlJ9uE{A3Mh=RYhozb`4( z7_n>&Zjxf3GPjl}E_B|dj?0CG)nly_!cizoM;Rl3j_|6iK)f3j3%NjSSM(-jCk>~n z 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�EZ|}l_HW+Zg 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