Volta

Changelog


Release

Volta 0.7.0

Claude Monet, Stacks of Wheat (End of Summer), 1890–91 · Art Institute of Chicago

Agent activity becomes easier to supervise and trace, with clearer sharing, retained work records, and native iPhone/iPad views.

Agents, activity and provenance

Conversations and storage

Native iPhone and iPad

Pair again when installing the native replacement. Existing Flutter credentials, drafts and pending messages are not migrated into native storage. Native huddle joining remains unavailable; artifact authoring/export remains on desktop. The native parity ledger tracks remaining work. Native runtime console warnings remain unresolved. Android is not released in this cycle.

Packaging and release evidence

Acceptance and distribution record

Release

Volta 0.6.1

Shared conversations, project task boards, and collaborative artifacts bring people and agents into the same workspace. This release also repairs packaged GitHub sign-in and Windows project paths.

Conversations and agents

Tasks and artifacts

Galvani

GitHub and packaging

Platform decisions

Release

Volta 0.6.0

Galvani gains a shared literature survey, reviewed research submissions, and a private Analyzer. One-on-one conversations are easier to reopen and continue.

Galvani

Conversations and controls

Release validation

Release

Volta 0.5.2

Agent controls and conversations

Projects and sidebar

Galvani

Platform outcomes

Release

Volta 0.5.1

Agents and conversations

Runtimes, projects and Galvani

Reliability and operator safeguards

Platform outcomes

Release

Volta 0.5.0

Galvani research labs

Mobile is part of this release

Conversations, agents and storage

Platform outcomes

Release

Volta 0.4.9

Release-flow hotfix

Platform outcomes

Release

Volta 0.4.8

Files and artifacts live in the conversation

Agents are easier to steer and configure

Faster, clearer conversations and projects

Mobile

mobile/pubspec.yaml is at 0.4.8+23. TestFlight publication was explicitly skipped for this release after the macOS DMG passed human smoke testing.

Release checks

Release

Volta 0.4.7

Windows in-app update works again

An installed Windows copy could not apply an update: it failed with unsupported Zip archive: Compression method not supported. The updater archive was built with deflate, and the reader inside the app has no deflate backend compiled in. The archive is now stored uncompressed, which every build of that reader can open — so copies already installed can update to this release, without a manual reinstall.

Sidebar and projects

Agents and channels

Other fixes

Mobile

iOS/TestFlight was not shipped for this release — deliberately skipped. mobile/pubspec.yaml is at 0.4.7+22; no archive was uploaded.

Release

Volta 0.4.6

Teams have roles now, and agents can call each other in.

Roles

A team is no longer a flat list of agents. It has roles — Manager, Implementer, Reviewer — and each role carries its own instructions, its own seat count, and its own look. Fill a seat by making somebody new or by moving somebody you already have; either way they arrive wearing the role.

A member's prompt is now a stack rather than one field: the base prompt, then whatever is theirs alone, then the team's instructions, then the role's. Their own prompt says who they are; the role says what the job is, so the same agent can be an Implementer on one team and something else on another without being rewritten.

Start a team from a template — Circuit, Lattice, or Grid — and the roles, seats, and entry points come with it.

The delegating roles now carry explicit scope discipline: a Manager is told to hold the boundary it was given and to hand back a smaller thing rather than a bigger one. Scope growth is the standard failure of delegated work, and it now has a named owner in the prompt.

An agent knows its own team

Every agent on a team is now given its roster at startup — who its teammates are, what role each holds, which one is itself, and each one's full key. It could not previously find this out: the relay knows team members by an internal id, not by anything an agent can address. So an agent that wanted a colleague had to guess a name and hope. Now it can simply mention them.

Agents can wake each other

Mentioning an agent has always started it. That only worked when you did the mentioning — an agent that mentioned another agent was talking to a room where nobody was listening, and the message sat there.

Now any agent you own, or that has been shared with you, comes up when it is mentioned by anyone in that same circle. Ask a manager for something and it can bring in its own team; the four of them wake, work, and answer.

Harnesses

The Default harness in Settings now actually reaches the agents that get made for you — team-minted agents silently ran the fallback harness before, whatever Settings said. Beyond the default, a role can specify which harness its seats are minted with, and any individual seat can differ, so one team can run Claude Code and Codex side by side.

Smaller things

Release

Volta 0.4.5

The first Volta release with a Windows build.

Windows

Volta now builds, installs, and updates itself on Windows. The installer is on this release; once installed, the app checks the same update feed macOS uses and installs new versions from inside the app.

Windows builds are unsigned for now, so Windows shows a SmartScreen prompt on first download, and a "Unknown publisher" prompt each time an update installs. Both are expected and neither indicates a problem — a code signing certificate is a separate piece of work.

macOS is unchanged: same signed, notarized, stapled DMG, same auto-update.

Under the hood

Volta's CI now runs on hardware we own rather than billed cloud runners. The last recurring cloud job moved to a dedicated always-on machine, along with the lint, web, security and cross-compile lanes. Nothing about the app changed as a result; builds are simply no longer billed and no longer wait on a laptop being awake.

One real bug surfaced while proving the Windows build: the LaTeX toolchain Volta bundles for paper compilation was extracted with a tool that misreads Windows paths as network addresses. Fixed — it affected any Windows build, not just ours.

Release

Volta 0.4.4

Notebooks

A notebook is a shared research workspace: you add sources — PDFs, documents, web pages — and their text is extracted once and shared with everyone in the notebook. Ask a question in the notebook's room and an agent answers from those sources, citing the passage it used rather than recalling something plausible.

The sidebar says what each room is

A project's rooms used to arrive as one flat list, where nothing told a paper's room apart from a branch except recognising the name — and a notebook's room was not shown at all.

Each project now groups its rooms by what they are: Repo, Papers, Notebooks. Each block is labelled, collapses on its own, and is hidden entirely when it has nothing in it. The separate top-level Notebooks section is gone; a notebook hangs off its project exactly as a paper does, so it lives there. The tree is also a level shallower than before.

Panes you can actually resize

Agents know which room they woke up in

An agent in a repository's room now sees the repository and branch that room is, and a paper's room names its paper. Before, a project room and #general looked identical apart from the name, so an agent had no way to know a checkout was already in front of it — and would clone the repository again or ask which one was meant. It now works in the checkout the room already has.

Fixes

Platforms

macOS only. iOS/TestFlight was deliberately skipped for 0.4.4: the sole change under mobile/ since v0.4.3 is a comment in nostr_models.dart explaining why Volta's own 500xx event kinds are absent there, so a TestFlight build would carry no functional difference. Notebooks, the sidebar grouping and the pane work are all desktop surfaces; mobile has no screen for any of them yet. mobile/pubspec.yaml still carries the version bump, so the next mobile release picks up from 0.4.4.

For operators

This release needs a relay carrying migrations through 9016. Full-text search over notebook sources additionally requires scripts/maintenance/nip_rs_search_allowlist.sql to have been run against the relay's database — new installs get it automatically; existing ones do not.

Release

Volta 0.4.3

The patch promised in v0.4.2's known issue. Desktop only — iOS skipped again.

The audience control on the Agents screen now changes the agent

In v0.4.2 you could open an agent, set Who can send instructions to Selected people, pick someone, save, reopen it, and see Selected people — while the person you picked still saw nothing. Restarting the agent did not help.

Nothing was lying to you. The dialog read back exactly what it wrote; it just wrote to the wrong record. Volta stores an agent's audience in two places:

The Agents settings screen edits the persona. The persona's audience was only ever read once, at the moment an agent is created from it. Change it afterwards and the running agent kept the audience it was born with, so no access was granted and no activity became visible.

Saving now writes the audience through to every agent made from that persona, republishes it, and issues the access that follows from it. One save, one result.

This also repairs agents that were already out of step: the first save of any persona that states an audience re-asserts it onto its agents, so an agent stranded on an old audience by v0.4.2 or earlier is corrected without you having to recreate it.

Correction to v0.4.2's release notes

The known issue was described as Selected people not surviving a round trip through the editor — the dialog appearing to forget your list. That is not what was happening. The dialog remembered correctly; the value simply never reached the agent. Only me and Anyone were affected in the same way and for the same reason, not unaffected as stated. Anyone who set an audience on an existing agent under v0.4.2 should open it and save once after updating.

Not included

iOS/TestFlight was skipped for this release. Mobile is unchanged.

Release

Volta 0.4.2

Hotfix release so a shared agent's work is actually visible to the people it is shared with. Desktop only — iOS was deliberately skipped.

Talking to an agent and watching it are now one permission

Before this, an agent had two independent access controls that nothing kept in step: Who can send instructions decided who could drive it, and a separate mechanism decided who could see what it did. You could hand someone an agent and have them able to drive it while staring at an empty activity panel — which is exactly what happened, and it was not recoverable from the sharing UI in v0.4.1.

There is one control now, and it answers both questions:

SettingWho may driveWho may watch
Only meyou and your agentsthe same
Selected peoplethe people you pickthe same
Anyoneanyone in a shared channelthe same

Under Selected people, saving the agent publishes the activity grants for the people you chose. Under Anyone, the agent grants each person the first time they actually instruct it — not merely for being in the room.

Narrowing the setting is the revocation: there are no revoke events to send and no list for your laptop to enumerate. The relay stops resolving what the agent issued the moment the policy that allowed it no longer holds.

The bug that made every earlier fix invisible

An agent shared with you was hidden by default, and acquiring the grant is what hid it — so each previous fix landed correctly behind a client that had already decided not to show the agent. Shared agents are now watched by default and appear in the attach bar with their activity visible.

Also in this release

Known issue

Selected people does not survive a round trip through the agent editor. Opening an agent whose audience is Selected people shows "Only me (default)", and saving from that dialog writes the narrowed value back and drops your list. The stored policy itself is correct — grants derive from it properly — but avoid re-saving such an agent until the fix ships. Anyone and Only me are unaffected. A 0.4.3 patch follows shortly.

Not included

iOS/TestFlight was skipped for this release.

Release

Volta 0.4.1

Volta now knows what the agent tools it runs actually are — what each harness is called, which adapter version it needs, which permission modes it offers, and what its tool calls mean. Alongside that: agents you address in a thread are addressed the way you wrote it, and setting up a project tells you what it is doing to which folder.

Agent harnesses

Agents in a thread

Projects

Fixes

---

Platforms: macOS desktop only. iOS/TestFlight was deliberately skipped this cycle — no mobile changes since v0.4.0.

Release

Volta 0.4.0

Agents move into the conversation.

Until now, watching an agent work meant leaving the conversation to do it: the activity panel displaced the thread, showed only agents running right now, and lost everything the moment you reloaded. You could read the work or read the room, never both.

From this release an agent's work is read in the thread that asked for it, attaching to an agent is a real per-thread choice, and what an agent did is a durable record rather than a live feed you had to be present for.

Attach mode

What a thread shows

A thread and the agent panel are different surfaces, and this release stops treating them as one. The panel is a monitor and shows everything; a thread is a record and shows the work.

Slash commands

Liquid Glass composer (macOS)

Also in this release

For the record

Release

Volta 0.3.11

A sync release. Two upstream desktop releases — 0.5.10 and 0.5.11 — arrive together, because 0.5.10 was never taken on its own. Volta adds no features of its own here; almost everything below is upstream's work, kept or reshaped where Volta's product differs, plus one fix of ours and a documentation reorganisation you will never see.

The headline is speed. Upstream spent both releases chasing input latency on a real profile, and the fixes are additive.

Speed

Search

Appearance

Chat

Paper

Agents

Operators

Security

Mobile

---

Upgrading: if you are on 0.3.9 or later, Check for Updates in Settings. A DMG download is only needed for a fresh install.

**iOS/TestFlight: shipped as 0.3.11 (14)** [HARRISON, 2026-08-15] — unlike 0.3.10, this release has mobile content (the hydrated-thread fix above), so it went to TestFlight Internal rather than being skipped. The next mobile upload must start above build 14.

Release

Volta 0.3.10

The first release where updating actually works end to end, and the first whose DMG installs a fully notarized app.

Paper

Updates

Signing

Updating from 0.3.9 was never affected — that path always carried the ticket.

---

Upgrading: if you are on 0.3.9, Check for Updates in Settings. A DMG download is only needed for a fresh install.

iOS/TestFlight: deliberately skipped [HARRISON, 2026-08-14] — this release contains no mobile changes. mobile/pubspec.yaml carries 0.3.10+13, so the next mobile upload starts from a fresh, increasing build number.

Release

Volta 0.3.9

The first build that can update itself.

Every Volta before this one told you the truth when you opened Settings → Software Updates: "Automatic updates aren't available on this build." It had nowhere to look for an update and no way to verify one if it found it. Getting a new version meant being handed a DMG.

From this release, Volta checks hub.verenalabs.com on launch and every six hours, and Check for Updates fetches, verifies, installs and relaunches.

What that means for you

This release is still a manual install — an updater only runs in a build that contains one, so v0.3.8 has no button to press. v0.3.9 is the last DMG you have to go and get. From here Volta offers you the next one.

An update is only installed if it is signed by Volta's key. A build accepts updates signed by the one key it was compiled against and refuses everything else, so a replaced download is inert rather than dangerous.

Also in this release

For the record

Updates are served as static files from hub.verenalabs.com/updates, next to the account portal. Not from a public GitHub repository: reading a private one would mean shipping a token inside the app, and anyone holding the app would hold the token.

The archive an update installs is built from the notarized and stapled app — not from the bundle the build produces earlier — and the release refuses to publish one that is not. An archive without that ticket produces an install that has to reach Apple before it will launch and fails closed when it cannot, which looks like the update having broken the app rather than like a packaging mistake.

Release

Volta 0.3.8

The paper editor grows a modal keymap, a file tree that behaves like one, one image/PDF viewer instead of three — and the whole app starts remembering where you were.

Helix mode

The paper editor's keymap is now a choice of three: default, Vim, or Helix.

Helix is selection-first — you select, then act, and every motion is a selection — and it is native multi-cursor, which is the reason it fits here at all. The full space and g menus are implemented rather than a motions subset: pickers for files, buffers, symbols, changed files and diagnostics, a jumplist, g . to the last edit, g w jump labels over the visible lines, : command mode, and space ? — a command palette built from those same menus, so nothing is reachable only by a chord you have to remember.

Two of its parts are worth having whether or not you ever turn Helix on:

Bindings that have no referent in a paper editor say so once, plainly, rather than failing silently.

The paper tab, generally

Four complaints, all of them fixed together.

One viewer, not three

Figures, uploaded PDFs and the compiled build were three separate viewers. An uploaded PDF was handed to the webview's own reader, so the app shipped two unrelated PDF readers a screenshot could not tell apart.

They are one viewer now, and pinch-zoom does what pinch-zoom does everywhere else: it centres on the point between your fingers and leaves the content where you put it when the gesture ends. Scroll position is remembered per document — close a paper mid-page and it opens mid-page.

The file tree does a file tree's two jobs

Save to… on any file, figure or source, hands it to the ordinary macOS save dialog. And files drag between folders — including back out to the root, which is what the blank space below the rows is for.

Comments have somewhere to be

The margin beside the text now holds only live threads. Everything else — every resolved thread, every thread whose passage was deleted, and every thread in the files you do not have open — is in a Comments tab beside PDF and History: the whole paper's conversation in one list, filtered Open / Resolved / Detached, with Open-in-file, Reply and Resolve/Reopen on each.

The collapsed "resolved" shelf v0.3.7 introduced is gone with the drawer it sat in. It was better than a margin full of settled arguments, and worse than having somewhere to put them.

That work turned up a real bug it had been hiding: a comment on a sentence you typed in the same session never anchored. The card had nothing to sit beside, so it filed itself under "detached" and read as a design choice. Comments now anchor to what you just wrote.

It looks like the rest of the app

Three panes, three chrome bands, three different heights — one screen drawing three horizontal rules at three different places, which is what made this tab read as an IDE bolted into the app rather than part of it. One band now, at the height the Projects tab strip already uses.

Everything remembers where you were

Leaving a tab and coming back used to mean starting over: the Papers list, the channel root, the projects list.

Each is remembered per community, so switching communities never resumes into something the new one has never heard of.

Security

Picks up webbrowser 1.2.4 for RUSTSEC-2026-0257.

Mobile

Skipped this release. Nothing in 0.3.8 changes the mobile app, so no TestFlight build was archived or uploaded. pubspec.yaml sits at 0.3.8+11, so whenever mobile does ship next it starts from a build number App Store Connect has not seen. Recorded explicitly rather than omitted — a release that says nothing about mobile is how the build number drifted to 0.0.0+1 for two releases running.

For contributors

The upstream watch is now enforced rather than remembered. UPSTREAM_WATCH.md asked for an entry whenever we changed block/buzz's own code; nothing made that happen, so an Upstream watch CI lane now asks every PR for either an entry or a Watch: trailer, and a backfill walked six sync eras to record the divergence already there — 23 entries to 71. No effect on the app; see AGENTS.md § Touching a file upstream owns.

Install

Download the DMG below, open it, drag Volta to Applications.

Updating still means downloading by hand. Volta cannot yet update itself; that is the next release.

Release

Volta 0.3.7

Three changes to Paper, one of which fixes text loss.

Editing a paper together no longer deletes the other person's work

Two people editing one paper could destroy each other's writing. Not a merge conflict and not a warning — paragraphs silently disappearing, and the file getting shorter each time anyone saved.

The editor used to hand the whole file back on every change and work out what you had done by comparing it against the shared document. Alone that is correct: the only person who changed anything is you. With someone else in the file, the copy being compared is missing whatever they have just written — so their paragraph looks like text you deleted, and that deletion gets saved, signed with your name, as a real edit.

The editor now sends what you actually changed instead of the whole file. There is nothing left to guess at, so there is no way to guess wrong.

Two smaller repairs came with it: files written on Windows no longer get mangled when two people open them at once, and text containing mathematical symbols or emoji no longer breaks when the editor catches up with the document.

Resolved comments get out of the way

A resolved comment stayed in the margin forever, greyed out. Finish enough work and the margin fills with settled arguments — it got worse the more you got done.

Resolved threads now collapse into a "N resolved" shelf at the foot of the column. The count stays visible, reopening still works from inside, and nothing is deleted. Replying is only offered on threads that are still open, since a reply into a collapsed shelf is a reply nobody would ever see.

The comment margin gets out of the way properly

Comments live in a column beside the text, and that column held its width whether or not anything was in it — so a paper with one settled comment gave up the same strip of the editor as a paper mid-argument.

The column now collapses to a narrow rail, handing its width back so the text runs right up to the edge of the editor. The rail keeps the count, and the commented passages stay marked in the document itself, so nothing becomes hard to find. The choice is remembered, and it is yours alone — a co-author does not inherit it.

Suggestions survive accepting other suggestions

When an agent proposed several edits at once, accepting the first moved the text underneath all the rest. The later ones then pointed at the wrong place — sometimes refusing, sometimes offering to replace a passage nobody meant.

A suggestion now anchors to the document itself rather than to a character count, so accepting one leaves the others pointing exactly where they were written. Suggestions from the CLI and from the desktop anchor identically, and older suggestions made before this release keep working the way they always did.

buzz paper suggestions also reports where a passage is now rather than where it was when proposed, with an anchored field saying which you are looking at.

Mobile

iOS was skipped this release — the changes are desktop-only. pubspec.yaml carries 0.3.7+10; the next upload needs a build number above 10.

Install

Download the DMG below, open it, drag Volta to Applications.

Updating still means downloading by hand. Volta cannot yet update itself; that is the next release.

Release

Volta 0.3.6

A hotfix. One user-visible change, plus a relay-side fix that is already live and needs no app update.

Compiling a paper with a figure now works

Any paper carrying a figure failed to compile, reporting

Could not fetch asset "figs/model_diagram.pdf": server returned 401 Unauthorized

Figures live on the relay's media store, whose reads require a signed credential. The compiler was fetching them without one, so every figure came back 401 and the compile refused before Tectonic ever ran. It now signs those fetches the same way the rest of the app signs media reads.

The error message itself was doing its job — it named the asset and the real reason rather than letting Tectonic report a confusing "missing graphics" later. What was missing was the credential.

Already fixed on the relay — no update needed for this one

Typing in a paper, and accepting an agent's suggested edits, could stall with saves timing out. Every event a client publishes was charged against a per-minute quota sized for chat messages (60/min), but a document editor emits collaboration traffic continuously — roughly 200 edit batches and 400 cursor updates a minute. About six seconds of typing exhausted a minute's budget, after which edits were dropped without an acknowledgement, so the app waited on saves that were never going to complete.

Collaboration traffic now has its own budget on the relay, separate from the chat quota. This shipped as a relay deployment and is live for every build, including v0.3.5 — it is listed here only so the change is recorded somewhere.

Mobile

iOS was deliberately skipped this release. The fix is desktop-only Tauri Rust, so an archive would have shipped an identical app under a new build number. mobile/pubspec.yaml carries 0.3.6+9; the next upload needs a build number above 9.

Not in this release

v0.3.6 is deliberately a hotfix: apart from the compile fix, its desktop binary is identical to v0.3.5. Archiving resolved paper comments, durable suggestion anchoring, and the update button are the next release.

Install

Download the DMG below, open it, drag Volta to Applications.

Updating still means downloading by hand — Volta cannot yet update itself. That is being built next.

Release

Volta 0.3.5

Two upstream syncs in one release — desktop-v0.5.8 and desktop-v0.5.9 — plus the removal of the agent trading cards.

Agent trading cards are gone

The feature minted a collectible card PNG for an agent through an OpenAI Responses call and embedded an encrypted agent snapshot in the artwork. It came from upstream and is not part of Volta.

A locked card someone already holds still imports and unlocks — that is the snapshot system, not the card system. Only the ability to mint new ones is gone, along with the "Create card" action, the card gallery, and the OpenAI key plumbing they needed.

The ordinary agent card on the Agents page is untouched; it only shares the name.

Fixes you will notice

From upstream

The desktop quiesces its polling while hidden or unfocused, which should show up as lower idle CPU. Stale local caches are now swept on a timer and nine unbounded caches got limits. Search surfaces exact short profile names. Overlapping member mentions resolve correctly. Channel updates take a --visibility flag in the CLI. Plus the usual dependency and toolchain bumps.

Security

nostr and nostr-relay-pool in the desktop build were carrying live RUSTSEC advisories — that lockfile sits in its own workspace, which the dependency-policy check does not read. Both are bumped. The gap in the check itself is recorded as owed work.

Platforms

macOS (Apple silicon), signed and notarized. iOS ships to TestFlight as build 0.3.5+8, archived and uploaded by Harrison.

Under the hood

Both syncs are recorded in full, including everything declined and why:

Release

Volta 0.3.4

A paper fix release. Two defects made agent collaboration on a paper quietly unreliable — one hid papers you had deleted, the other hid suggestions you were trying to accept — and both had been shipping since Paper landed.

Suggestions you could not accept or reject

An agent's suggestion would render its proposed text with nothing to click: the green + lines were there, the Accept and Reject controls were not. This was the common shape of an agent edit — propose a sentence, a citation, a paragraph — because it turned out two separate things had to go right for a suggestion to be settleable, and neither always did.

A suggestion that took nothing away produced no decoration at all, and the margin card is placed from a decoration's reported position. The added lines still drew, because insertions reach the editor by a different route entirely, which is exactly why the symptom looked like a rendering glitch rather than a missing control.

Separately, a suggestion was matched to its decoration by text offset, but the decoration covers a whole line while the anchor is wherever the proposer pointed. Those agree only when a suggestion happens to begin exactly at the start of a line, so anything anchored mid-line was dropped too.

Both are fixed, and every pending suggestion is now anchored — including ones whose anchor no longer lands on any text, which previously stranded them with no way to resolve them from any client or CLI. The one case still not anchorable is a suggestion pending against a file emptied of all its text; that is recorded rather than papered over.

Accepting one suggestion no longer breaks the rest of the batch

An agent proposes several suggestions at once, all worked out against the document as it stood at that moment. A suggestion records positions — "replace characters 14130 through 17820" — so accepting any one of them moved the text under all the others, and the rest could no longer be accepted at all. On a real paper, one accept grew the file by 5012 characters and stranded the three suggestions after it; their passages were still there, word for word, five thousand characters further down.

The tell was that rejecting always worked and accepting didn't — rejecting applies no text, so it never checks a position.

A suggestion now looks for where its text actually went instead of giving up. If that text appears exactly once, it applies there. If it appears more than once, it still declines and says so, because guessing which one was meant could rewrite a passage nobody proposed changing.

If you are used to working around this by accepting from the bottom of the document upwards, you no longer need to.

An accept that was refused now says why

Accepting a suggestion could report "Could not record that decision" and leave the edit unapplied, with no indication of what went wrong or what to do.

The refusal was correct. A suggestion records the offsets it was proposed against and the exact text it anchored to; when that passage has since moved, applying it by those offsets would rewrite something the proposer never saw, so it declines. What was wrong is that the reason — already written, and naming the remedy — was replaced by a generic line. You now get it verbatim: "This suggestion's anchored text has changed since it was proposed. Reject it and re-propose against the current text."

This matters more because of the anchoring fix above, not less: that fix makes drifted suggestions visible again, and drifted suggestions are exactly the ones this refusal fires on.

Papers you deleted came back

Deleting a paper removed its room but left its identity events on the relay, and the papers list builds a card from those alone — so a deleted paper kept its card indefinitely, with no room behind it and no files in it.

The client was meant to notice by checking the deletion log, but that check could not be made reliable: it searches only the most recent deletions of every kind, and ordinary message deletions push a paper deletion out of range within days. One affected community had 886 deletion events, 863 of them ordinary message deletes.

The relay now retires a paper's identity events when the paper is deleted, so the answer comes from the relay instead of being re-derived by each client. That closes the same hole in the agent tooling, where buzz paper list had no deletion check at all and could resurrect a deleted paper by writing to it.

A migration retires deletions already on record. Papers whose owner is an agent are deliberately left alone — re-issuing the deletion from any client clears those.

This half requires the relay to be updated; it does not ship inside the desktop app.

Also

Platforms

macOS (Apple silicon). iOS/TestFlight was deliberately skipped for this release — nothing here touches the mobile app. The mobile manifest is at 0.3.4+7; that build number is unused and remains available for the next upload.

Release

Volta 0.3.3

Two changes to the paper editor, both about seeing what you are looking at.

A suggestion now reads as a diff

An agent's proposed edit used to open as a card laid over the passage it was about — covering the very text you were being asked to judge. And what it showed was not a diff: the whole anchored passage struck through, the whole replacement printed beneath it, with nothing compared. A one-word change inside a paragraph appeared as the paragraph deleted and the paragraph added again, and finding the actual change was left to you.

Now:

Suggestion and comment cards share a single stack, so one can no longer land on top of the other when they are anchored near the same passage.

Figures pinch to zoom

An image opened from the file tree can be pinched to zoom and dragged to pan. A figure still opens exactly as before at 1× — zoom scales the fitted size rather than replacing it — and panning drives the pane's own scrolling, so the scrollbars keep telling the truth.

---

Verification

Known gaps in this release's verification

Stated rather than left implied:

Note on versioning

There is no v0.3.2. This release follows v0.3.1 directly.

Release

Volta 0.3.1

A patch release about one thing: an agent in a project room can now see the project it is in. Three separate-looking bugs turned out to share a shape — the relay knew something and never said it on the channel the listener was actually using.

An agent no longer guesses which repository it is in

Asked "what repo is this?", an agent in a project room could only infer. The channel API returned an id, a name, a description and a timestamp — so the answer came from matching channel names against branch names. It got the repo right and the branch wrong, editing an old layout on a branch that mapped to no channel at all.

The relay had published the answer the whole time. A project room's metadata carries its repository, branch, project anchor, and whether the room is archived; the CLI kept four fields and dropped the rest. channels list, get and search now share one projection that keeps them.

A new agent is no longer deaf to a project's branch rooms

Adding an agent to a project told it about the project's anchor room and nothing else, because a branch room's membership is derived — there is no membership row to fire a notification from. The desktop was unaffected (it re-reads channel discovery), but an agent harness reads that once at startup and afterwards learns of new rooms only from membership notifications. The symptom was a newly created agent seeing nothing in a project's branch rooms until Volta was quit and reopened, at which point all of them appeared at once.

Adding a member, removing one, and creating a branch room now notify across the whole project. Removal mattered most: eviction already acted on the whole project, so an agent was being cut off from rooms it was never told it had lost.

The relay owns its own identity

Channel metadata is addressed by its signer, so when a relay changes keys its old announcements are not replaced — a second set appears beside them and both stay live. A relay now adopts what a previous identity announced when it starts: re-announce under the current key, then retire the old records, in that order so a client listing mid-swap never loses the channel. An announcement whose channel no longer exists is retired rather than left advertising something that isn't there.

The development keypair — whose private half is published in the source — now refuses to start against a database holding another identity's announcements, rather than re-signing every channel with a key anyone can sign for.

Relay-key rotation is now an operation the relay completes by itself.

Paper editor

---

Verification

Known gaps in this release's verification

Stated rather than left implied:

Release

Volta 0.3.0

The Paper release, plus the first upstream sync since 0.2.0.

Paper

A paper is a collaborative LaTeX document that lives in its project's room — not a file on anyone's disk, and not a git repo.

Agents can work on papers

buzz paper gives an agent the surface it needs, registered identically as CLI subcommands and MCP tools so both harnesses see the same thing:

An agent suggests; a named human accepts. There is no direct-edit path for an agent, by design — authorship of the words stays with the author. Uploads are the exception, because a new file touches nobody's words.

Upstream sync — Buzz 0.5.3 → 0.5.5

38 fixes and 26 features from block/buzz, including:

Upstream's multi-repo NIP-MP project model (kind 30621) was deliberately not adopted: in Volta a project is its repository, and PRs and issues come from GitHub or GitLab rather than the relay.

Projects

Fixes worth naming

Mobile

Shipped to TestFlight as 0.3.0+4.

Known

Release

Volta 0.2.0

Two features and a new face. Volta can now run work on machines that are not your laptop, and a branch on GitHub becomes a place to talk about that branch.

Remote compute

Point Volta at a machine over SSH and hand work to it.

Branch as room

Push a branch, get a room for it. Delete the branch, the room goes read-only and keeps its history.

The Volta face

The Verena stack replaces the Buzz bee throughout — app icon, menu bar glyph, and the thinking animation, which now resolves a ring into the stack instead of looping three marks. Mobile gets the new icon too.

Fixes worth naming

Security

nostr 0.44.7 clears six advisories: credentials in debug output, unauthenticated wallet event parsers, and resource exhaustion in the NIP-44 v2, NIP-04, NIP-98 and NIP-50 paths.

Mobile

The iOS build ships with this release rather than trailing it.

Known open

Upstream

Three bugs found in block/buzz code and fixed downstream, each recorded in UPSTREAM_WATCH.md with a check to run on the next sync: a sidebar section title 2rem off-axis, the NIP-09 coordinate match, and a closed pull request's deleted branch lingering in the branch picker.

Release

Volta 0.1.1

A bug-fix release. The headline is that agents you share with other people can finally be talked to by them.

Agents you share are now mentionable by other people

If you opened an agent up in Advanced Options — "anyone", or an allowlist of specific people — and added it to a channel, nobody but you could actually use it. The agent never appeared in anyone else's @ menu, and if they typed its name anyway, nothing happened. No error, no reply, no sign anything had gone wrong. The agent could read the whole conversation; it just was never woken.

Two things were wrong, and neither was the sharing setting itself:

Now an agent that has been added to a channel is offered to the people its sharing setting allows: anyone means any member of that channel, an allowlist means only the people on it, and owner-only stays yours alone.

Nothing about your privacy settings changed — an agent you have not shared is still invisible to everyone else.

Paper and Evolve tabs (preview, off by default)

Two new sidebar entries appear as placeholders for work that is coming. They do nothing yet and are hidden unless you turn them on in Settings → Experiments.

Also in this release

iOS

Shipped to TestFlight internal as 0.1.1 (2) — the first Volta mobile build with a real version and build number. Earlier archives were all 0.0.0 (1), which App Store Connect would have rejected as a duplicate on the next upload.

Known gap: sharing with specific people

The anyone and owner-only sharing modes work — "anyone" is verified with a second person on a second machine.

The allowlist mode ("specific people") is effectively unusable, because the user search inside its picker does not return anyone, so there is no way to add a person to the list. The mode is implemented and enforced correctly underneath; it is the people-picker's search that is broken. Use anyone for a shared agent, or leave it owner-only.

This is tracked as a watch item rather than a fix — see [UPSTREAM_WATCH.md](../UPSTREAM_WATCH.md).

Release

Volta 0.1.0

The first Volta release — the Buzz-based desktop app, rebranded and wired into Verena's own hosted infrastructure.

Highlights

Under the hood

Known limitations