v4.4.0 — one .vstack directory
The tools stop scattering dot-directories. Everything they write for one machine now lives under .vstack/, one subdirectory per tool.
| Was | Is |
|---|---|
.ui-review/<name>/ |
.vstack/wireframe/<name>/ |
.vstack-bridge/ |
.vstack/bridge/ |
How the path resolves
State still sits beside the artifact it belongs to, so a review of design/login.html lands in design/.vstack/wireframe/login/ and moving the page moves its review with it. lib/workdir.mjs is the one place that decides: the enclosing .vstack when the artifact already lives in one — the spec tree writes .vstack/specs/<feature>.json, and nesting .vstack/specs/.vstack/bridge/ under it would repeat the name — otherwise the .vstack directly beside it.
.gitignore ignores the two tool directories at any depth rather than .vstack/ as a whole, because pipeline.json, specs/ and build/ are the pipeline and belong in the repo:
**/.vstack/wireframe/
**/.vstack/bridge/Breaking
Reviews in flight under .ui-review/, and comment drafts under the ui-review:* localStorage keys, are orphaned. There is no migration. The files stay on disk; the tools no longer look there. Finish or discard any open review before updating.
The old paths deliberately kept their names for two releases to avoid exactly this. That stopped paying once one product meant three dot-directories in a project.
Update
Claude Code:
/plugin marketplace update cavalry-collective
/plugin update vstack@cavalry-collective
/reload-plugins
Codex:
codex plugin marketplace upgrade cavalry-collective
codex plugin add vstack@cavalry-collective