Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,33 @@ 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).

## 4.9.0 — 2026-08-05

- **Two new ways to mark up a page: Move and Delete.** A toolbar beside the page
holds Comment, Move and Delete — what Annotate draws with, on keys `c`, `m`
and `d`. Neither new tool needs a note: the mark is the instruction, and
anything you type adds to it. Both outline whatever the pointer is over, so
the element the gesture will take is settled before you press.
- **Move** draws an arrow from a thing to where it should go. It records the
element you dropped it on and which side of it — inside, before, or after —
so your agent is told "after the Cancel button" rather than "180px right",
which stops meaning anything the moment the page reflows.
- **Delete** strikes out what should go. Drag across text and exactly those
words are marked for removal; the strike finds them again by their text when
the page is rebuilt, so it stays on them. Click an element instead and the
whole thing is marked.
- **A watcher finds a review whose page lives outside the directory it was
started from.** A review's files sit beside the page under review, and
`watch --all` found them by walking the directory it ran in. A page written to
a temp directory took its files with it, so the watcher walked straight past a
running review and the workspace said Unlinked while a session was in fact
listening. Serving now leaves a pointer where it was run from, and the watcher
follows it.
- **A watcher that covers no review says so.** It reports `UNLINKED` instead of
`LINKED`, because nothing is listening to any workspace at that point whatever
the handshake proved. A handshake also carries the token it printed, so one
watcher's answer no longer brings a different watcher live.

## 4.8.1 — 2026-08-05

- **The comment composer's send button is readable in dark mode.** Its label was
Expand Down
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ The layering rule that everything else follows (`plugins/vstack/contracts/README
- **Adapters speak hosts.** Only `skills/review/hosts/*.md` may mention
host-specific tools (Monitor, Artifact, etc.). A SKILL.md references Host ops
(`background`, `watch_stream`, `share`, …); the adapter maps them to tools.
- **Profiles are data.** `hosts/<id>.json` carries UI labels, install steps, and
- **Profiles are data.** `host-profiles/<id>.json` carries UI labels, install steps, and
capability flags; servers inject it as `window.__VSTACK_HOST__`, selected by
`--host` / `VSTACK_HOST` (default `claude`). Loaded via `lib/host.mjs`.
- **On-disk roles are stable:** review threads use `by: "agent" | "reviewer"`.
Expand All @@ -95,7 +95,7 @@ The layering rule that everything else follows (`plugins/vstack/contracts/README
a self-contained HTML page inside the workspace, or reverse-proxies a running
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 (`publish`, `claim`, `reply`, `cancelled`, `share`, `status`,
subcommands (`publish`, `claim`, `reply`, `ack`, `share`, `status`,
`check`, `watch`) 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
Expand Down
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ $vstack:review Wireframe a desktop personal task manager with minimal aesthetics

- Work in a familiar, Figma-like interface.
- Click any element and leave feedback exactly where the problem is hiding.
- Drag a thing to where it belongs, or strike out what should go — no note required.
- Stay in the workspace as your agent publishes each update.
- Preview desktop, tablet, and mobile layouts before production does it for you.
- Compare revisions and identify the exact moment things went wrong.
Expand All @@ -80,6 +81,18 @@ No archaeology through 200 messages. No screenshot named `final-final-v2-actuall
- A local web browser
- At least one strong opinion about border radius

## Technical Details

### Live Link

Each workspace is linked to one agent session. The link holds while that session is active, its heartbeat is less than 15 seconds old, and every submitted review round has been claimed.

![The workspace page in a browser tab talks over http and SSE to the review server on 127.0.0.1. The server reads and writes a store on disk holding the state, the versions, the comments, the rounds, and the files that carry the link. The agent session watches and writes the same store.](docs/assets/live-link.svg)

### Review Lifecycle

![Your comments are submitted as one review round. The agent claims the round and reads its brief, asking for clarification when a comment is unclear. Comments sent while the round is in progress join it. Publishing is blocked until every comment has been applied, answered, or dismissed, and the published version appears in the same workspace.](docs/assets/review-lifecycle.svg)

## Contribute

Visual Stack is open source and under active development. Expect rough edges, breaking changes, and occasional moments of character development.
Expand Down
65 changes: 65 additions & 0 deletions docs/assets/live-link.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading