Changelog - 2026-10-18
VULCAN 0.2.0-8: atlas.packages removed, a concept lock that sees members, a self-explaining fresh clone
Type: Breaking Change, Enhancement, Bug Fix
In one line. The root fixes before the stable 0.2.0: the one breaking removal, a stronger concept lock, and a fresh clone that says what to do.
Breaking
atlas.packagesis removed. The alias lived for one release. A config that still sets it fails withatlas.packages was removed - move the list to the top-level packages: [{ dir, name }]. Move eachdir: namepair of the old map to apackagesentry, in the same order:ts// before atlas: { packages: { okf: '@venizia/vulcan-okf', cli: '@venizia/vulcan' } }, // after packages: [ { dir: 'okf', name: '@venizia/vulcan-okf' }, { dir: 'cli', name: '@venizia/vulcan' }, ],.symbols.lock.jsonneeds a new stamp. The lock now hashes the whole declaration (see below), so a lock from 0.2.0-7 or earlier is schemaVersion 1 andconcepts checkstops withrun vulcan x atlas concepts stamp. Run it once, review the diff, commit it.
What changed
concepts checklocks the whole declaration. A member added to an interface or class, or a parameter changed past the old 300-character signature cap, now fails the check. Comments and layout do not move the lock.doctorsays once that a clean checkout is not synced. When the gitignored adapters have never been written it prints one line,not synced yet - run 'bun x --no-install vulcan sync' (make agent-setup) first, instead of onestale (created)line per file. An adapter that exists and differs is still reported by name.- The Makefile
initwrites explains a missingvulcan.mk. With nonode_modules, a shipped target such asokf-check-strictstops withrun 'make install' (bun install) firstinstead ofNo rule to make target. Targets the project defines (install) are untouched. initwrites.mcp.json(the atlas server with--root .) when it is absent. An existing file is never overwritten; one without anatlasentry gets the entry printed.changesoffers declared packages. Itsunknown packagemessage lists every declared package, released or not.- A bare
vulcan x atlasat a terminal prints the usage. A client still gets the MCP server, since its stdin is a pipe. - A remote-host guard. Set
remoteHosts: { trusted, readOnly }andsyncregisters a hook that asks before a Bash command reaches a host not listed (ssh, scp, rsync, kubectl, nc and the rest, also behindsudo,bash -corxargs). Hosts match by whole name or a*pattern, never by substring; a command whose target cannot be read asks. See the adopting guide. - The
read-onlygit slot covers the whole write surface.V-W-01: read-onlynow denies 30 git verbs, each with and without arguments (add,rm,mv,restore,commit,push,pull,merge,rebase,reset,revert,cherry-pick,checkout,switch,branch,tag,stash,clean,apply,am,worktree,remote,config,submodule,update-ref,filter-branch,gc,init,clone,notes), up from 17. A project that added the rest by hand can delete its list.git remoteandgit configare denied whole, so their read forms are too. okf.contents.filestakes globs, such as.agents/skills/*/SKILL.md.okf.coverageaxes takeexcludeanddenylist.excludeis a list of globs from the root anddenylista list of directory names, both for that axis only; the top-levelokf.denyliststill applies to every axis. An axis left with no directory fails.- The guide no longer lists fixed gaps. The TypeScript auto-install note (fixed in 0.2.0-6) and the one-line concept lock are gone from Known gaps; the shipped skills are marked as not evaluated against a model.
Who is affected
- A project whose config sets
atlas.packages. Move the list topackages(above). - A project whose concepts declare
symbols:. Runvulcan x atlas concepts stamponce. - A project with git read-only for agents. The slot's deny list grew; nothing to change unless it needs
git remoteorgit configreads, which it must now allow in its own settings. - A project that carries
overridesfor@venizia/vulcan-okfor@venizia/vulcan-atlas. Drop them.@venizia/vulcannames both siblings asworkspace:*in the repository, andbun publishwrites the exact version into the tarball (0.2.0-7 depends on@venizia/vulcan-okf0.2.0-7 and@venizia/vulcan-atlas0.2.0-7, not a caret range). This has held since 0.2.0-0, and every release run fails if a packed manifest names a sibling at any other version. - Everyone else. No action needed: upgrade, then
vulcan sync.