Releases: HaoZeke/vissue
Release list
0.9.3 - 2026-09-10
Release Notes
Added
- A satchel carries what the seat learned as well as the work and what the work
produced.packset export --into <dir>/data/atomswrites the atoms and names
the accessions they cite; sealing takes them into the manifest, and the check
reports how many arrived. - Every MCP tool now declares whether it reads or writes, whether a write is
destructive, and whether calling it twice changes anything more than calling it
once. A client can tellvissue_listfromvissue_normalizewithout calling
either, which it could not before: forty-six tools carried no hints at all. - The HUD command palette (
:) lists every catalog action with its chord. Help is generated from that same table, sod(cite a deed) is no longer missing. Enter runs the same handler as the chord; an empty query is recents. - The MCP surface completes the id a resource template asks for, matching on id
prefix then anywhere in the title. A caller working from any tool's answer
already has ids; the template is the one place they have to produce one from
nothing. vissue satchelpacks a slice of the tracker so somebody else can open it:
the issues named, everything they stand on, and the deed accessions their work
produced. The shape is BagIt, so a receiver checks a manifest before reading
anything, and the manifest has to account for the whole payload rather than
only for what it lists.--sealre-manifests after the deed store has filled
in the deeds;--verifyis the receiver's check.vissue_list,vissue_ready,vissue_showandvissue_digestreturn
structuredContentwith anoutputSchema, rather than a pretty-printed JSON
string inside a text block. The schema comes from the types themselves, so it
cannot drift from what is returned. The serialized text stays beside it, for a
client that reads only text.zhides the detail preview.JandKscroll it without moving the list cursor.
Changed
- Agenda is three Org classes: overdue deadlines first, then scheduled, then appointments (a plain active stamp in the title). Scheduled no longer looks like an appointment.
Fixed
- Checking a satchel says what it established and what it did not. Matching a
manifest proves the bag arrived as written and nothing about who wrote it, so
an unsigned satchel says so, and a signed one names the verb that answers the
other question rather than implying it answered it. - Hiding the HUD freezes the row order. Showing it again puts the same ticket in the same place; a poll while hidden does not reflow the board.
Developer
vissue-coregains an optionalschemafeature deriving JSON Schema on the
view types, andagentgains typed accessors beside the JSON ones so a caller
that wants the type does not go through aValueto get back to it.
vissue-hud 0.9.3
Install vissue-hud 0.9.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.3/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.3/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.9.3
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.9.3
Install vissue-cli 0.9.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.3/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.3/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.9.3
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.9.3
Install vissue-mcp 0.9.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.3/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.3/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.9.3
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ... |
0.9.2 - 2026-09-09
Release Notes
Added
- A seat file can name the tracker the bare command should use.
rootin
the configuration file is read after the environment and after the
working directory, so standing in a tracker still means that one.
A missing, empty, or unreadable seat file is ignored.
Changed
- The HUD board now builds against icedtea 0.17. Checkboxes use
CheckState, labels take a face, help markdown takes outline opts, status pages take A11y, and the oldinfo_baris abanner. iced stays 0.14; the TUI stays on ratatui 0.30.2.
Fixed
rootlives on the router's own configuration file. Writing it to
~/.config/vissue/config.tomlused to make the whole file unreadable,
because that file denied unknown keys. The router now acceptsroot,
and$VISSUE_CONFIGpoints at the same file.
Developer
- The version bump rewrites every workspace member in the lockfile,
includingxtask, and refuses to finish ifcargo metadata --locked
disagrees. 0.9.1 leftxtaskat 0.9.0 and CI failed--locked.
vissue-hud 0.9.2
Install vissue-hud 0.9.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.2/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.2/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.9.2
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.9.2
Install vissue-cli 0.9.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.2/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.2/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.9.2
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.9.2
Install vissue-mcp 0.9.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.2/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.2/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.9.2
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-mcp-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.9.1 - 2026-09-09
Release Notes
Fixed
- A directory that is not a tracker says so instead of answering "none". The root
falls back to the working directory, and a reading verb run from somewhere else
found no projects and printed0with a zero exit. A caller cannot tell that
from a tracker with nothing in it, and the two mean opposite things. A guessed
root now has to holdvissue.tomlor the prefix directory. A root named with
--rootorVISSUE_ROOTis trusted whether or not it holds anything, andman
andcompletionsstill work from anywhere because they describe the program
rather than a corpus. backlinksreports a duplicated id instead of scanning it as a deed. The
accession walk exists because an accession has no heading of its own. An id
with a heading in two routed trackers is a corpus fault. Answering it with an
empty citation list reported that fault as "nothing cites this". Only "no such
heading" falls through to the walk now, and an unreadable file stays an error.
Developer
- The schema comparison covers notes, and the committed constant was
regenerated. It compared surface names and a field count. A note-only edit to
vissue.capnptherefore left the constant carrying the previous prose, and
every check still passed. The reader now takes each operation's note and its
fields' notes. That is what makes the schema authoritative in fact rather than
in the documentation alone.
vissue-hud 0.9.1
Install vissue-hud 0.9.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.1/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.1/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.9.1
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.9.1
Install vissue-cli 0.9.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.1/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.1/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.9.1
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.9.1
Install vissue-mcp 0.9.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.9.1/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.9.1/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.9.1
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-mcp-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from [GitHub](...
0.8.0 - 2026-08-23
Release Notes
Added
-
Eighteen tests for findings
checkcould emit and nothing exercised: every preamble
keyword Org needs, the noexport warning that is about disclosure rather than
convenience, each way a blocker is spelled wrong, a type that is not on its heading,
two tags from one exclusive group, a priority outside the declared range, work started
out of order under an ORDERED parent, a DONE parent with an open child, a missing
creation date, a DONE body that reads as a reject, a sibling that already settled, a
discovery claim with no edge behind it, and a blocker ring every edge check passes. -
Every flag a verb takes has to appear in the schema, which closes the last
one-directional check.The flag checks ran schema to surface only: a flag the schema names must exist, and a
flag that exists and the schema omits went unseen. That is the same asymmetry as at the
verb level, one level down, and it stayed open after the verb level was closed.Global flags are declared once as
globalFlagsand subtracted, so a per-verb row stays
about what the verb actually takes rather than repeating--rootforty times. A
local-only verb is skipped: the HUD's nine flags are window management, and enumerating
them in a schema of operations would bury the flags that describe a surface.Forty-one flags had to be recorded, generated from the argument structs rather than
written out, and two checks had to stop guessing type names while that happened. The
tool check derived<Verb>Argsand the socket check<Verb>Params, which is wrong
wherever a struct is shared: ancestors and impact both takeDepthArgs, list and ready
both takeIssueListParams. Both now read the type from the code that declares it, the
tool's signature and the handler's own body. -
Every method has a typed request and response form. Nineteen did not.
Request::parseanddecode_responseanswered "no typed form; send it untyped" for
append,vote,fold,checkand the rest, so a client wanting typed access to
them could not have it. The two enums had also drifted from the method list by exactly
the amount nobody was checking.Four result types carry the replies:
ReportResultfor the reads that produce prose,
CheckResultwhere the error and warning counts travel beside the text,DigestResult
andWaitResultwhere there is structure worth having. Reports share one type on
purpose — a type per report would be a contract per report to keep in step with the
text, and the text is the part anyone reads.A test drives the round-trip from the capability list, so a method reaching the wire
without a typed form fails there rather than being discovered by whoever wanted it. -
Every mutating socket reply is asserted to have the same shape: a boolean
ok, a
reportstring, and the affected issue where one is named.mut_resultproduced that shape by convention rather than contract, so a method
returning a bare field, or omittingok, would have passed every other check. A
client switching onokand printingreportis the normal way to use this socket,
which makes the shape worth asserting once across all of them instead of trusting
eleven call sites to agree. -
Nine reads gained a
--jsonmode:search,children,ancestors,impact,
backlinks,agenda,tree,body-excerptandprojects.They answered in prose on the command line and in structure over the socket, so there
was nothing to compare between the two surfaces and they went unaudited while every
other read was checked.The modes go through the same
CatalogServicethe socket answers from, so the two
surfaces are one computation rather than two that have to be kept in agreement. A test
compares all nine, and they matched on the first run, which is what routing them this
way round was for. -
Seven relatedness evidence labels had no test:
blocked_by,parent,source_of,
pivoted_to,successor_of,shared_tagsandsame_project. Nor did the limit or the
tie-break that makes the ranking total. Two of the new tests assert a weight rather than
a label, because a scorer that records the reason and scores it zero passes any test that
only looks for the reason. -
The control socket now has a method for every verb that changes a file:
issue/append,issue/reject,issue/resolve,issue/foldand
issue/normalizejoin the six that were already there.It stays optional. The advisory lock serialises a direct write just as well, so
this is not a correctness fix and a client mixing the two paths corrupts nothing.
What it buys is a complete surface:appendused to exist only on the command
line, so a socket client had to shell out for it, those writes went behind the
server's back, and its change stream had a hole exactly where they were. -
The operation schema names each verb's command-line flags, and every subcommand's
help has to offer them.Naming a verb on each surface stops the verb going missing. It does nothing about
the surfaces disagreeing on what to call a field, which is the next way this drifts:
a socket method takingbodywhere the subcommand takes--textis two spellings of
one idea and no verb-level check sees it.Read out of each subcommand's own help, so the parser answers rather than a scan of
the source that declares it. Positional arguments are excluded, and the reason is on
the field: the first version of the list claimedcreateandrejecttook--title
when both take it positionally, and the check caught that plus a--blocked-bythat
is really--blockon its first run. -
The reference states what the change stream promises: unique sequences, and no
ordering.An event is emitted after the file lock is released, so two changes to different
project files can reach the log in the opposite order to the one they reached disk in.
A consumer treating a notification as "something moved, go and look" is correct; one
reconstructing history from the log's order is not, and nothing promised it could.Emitting inside the lock would order the log at the cost of holding a file lock across
another write for every state change. Declined, and the reasoning is written down: the
log exists to wake a poller, and a poller re-reads state.The cross-file cycle window is recorded the same way. Locking every file an acyclicity
check reads would prevent it and serialise every blocker edit in the corpus against
every other, because the check reads all of it. For blockers added by hand a few at a
time, the after-the-fact report is the better side of that trade. -
The schema covers every subcommand, not only the mutating ones, and a test refuses a
subcommand it does not mention.Until now the schema constrained the verbs it already listed. A brand-new subcommand
failed nothing, because nothing asked whether the schema knew about it, which is
exactly how the earlier gaps arrived:votewas added to the command line and no test
anywhere had an opinion.Read verbs are held to the surfaces they claim rather than to all of them, because
fourteen of them are genuinely absent from the socket today and the schema says so
instead of pretending otherwise.Three things had to be modelled that the mutating-only version never met. Aliases,
becausecreateanswers toqand the new check found it and could not tell it from
a verb. Local-only verbs, because the terminal UI and shell completions have no
remote surface and are not gaps. And a socket method answering for two subcommands,
whichidentity/getdoes foridentityandwhoami, allowed when the rows say so
and refused in silence.The committed generated file is now checked against the schema text as well. Editing
vissue.capnpand forgetting to regenerate left every check validating the previous
schema and passing, so the schema was authoritative in the documentation only. -
The schema names each method's socket parameters, and the param structs are checked
against it.The verb check says
issue/appendanswers. It does not say the method takestext
rather thanbody, and the third spelling of a field is where this drifts next. Read
off the param structs inrpc.rs, where serde decides the wire names, so what is
checked is what a client has to send.Two facts that had never been written down anywhere are now on the fields. The issue
being acted on is positional on the command line,idon the socket andissue_idas
a tool argument. Andagentexists only on the socket, because only there is there a
connection whose identity can be overridden; the other surfaces take it from the
environment. -
The schema records each field's Rust type per surface, and both checks verify it.
A name check cannot see a type change: a field going from a number to a string keeps
its name.update --if-genis au64on both remote surfaces and nothing said the
two agreed.Recorded per surface rather than once, because two of them genuinely differ and
forcing one type over both would be a lie.priorityisOption<String>as a tool
argument andOption<char>on the socket,forceisOption<bool>andbool. What
this catches is either side changing.Generated from the structs rather than written out, after two earlier rounds of
schema data written from memory turned out wrong. -
Thirteen read verbs gained control-socket methods:
issue/check,issue/count,
issue/cycles,issue/digest,issue/export,issue/graph,issue/roadmap,
issue/stale,issue/hygiene,issue/waiting_on,issue/mirror,events/ping
andevents/wait.A socket client used to shell out for all of them. That cost a subprocess rather
than correctness, which is why it outlived the write gap, butevents/waitis the
case that made it worth closing: a verb whose whole job ...
0.7.0 - 2026-08-18
Release Notes
Changed
- The HUD board opens on the project list. Inside a project the selected
issue stays on screen, with properties above a wrapping body and tree,
related, and notes as tabs. Search is a field. List titles wrap inside
the pane. The tree tab expands or collapses the outline. Related cards
and tree double-click open that issue. Escape on the project list
unmaps the overlay;vissue hud --toggleshows it again. Closing the
mapped window quits.
Fixed
- A HUD Tree pick is the issue keys act on. Confirm remembers that
issue through a reject on Ready. Hide then show remaps the overlay.
Add from home search writes into the selected hit's project. - The HUD list checkbox only flips TODO and DONE and selects that
issue. Cancelled and blocked stay as they are. The overlay no longer
stalls after a file write.
vissue-hud 0.7.0
Install vissue-hud 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.7.0/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.7.0/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.7.0
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.7.0
Install vissue-cli 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.7.0/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.7.0/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.7.0
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.7.0
Install vissue-mcp 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.7.0/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.7.0/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.7.0
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-mcp-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.6.0 - 2026-08-18
Release Notes
Added
- Every
issues.orgcarries#+VISSUE: 1, the on-disk protocol
number. It is independent of the crate version and of the
control-socketprotocolVersion.normalizewrites or upgrades it.
checknames a missing stamp and errors on a future number.
identityprintsprotocol: 1. - The Org ecosystem page lists GNU ELPA, org-contrib, and MELPA
names a rewrite must own, read, preserve, or ignore. Protocol 1
is the tracker contract, not parity with org-noter. Collisions
called out: org-gcalID, org-journalCREATED, org-gtd
TRIGGER/CATEGORY. - The Org syntax map states protocol 1 is the tracker contract, not
parity with every ELPA package. org-noter (NOTER_DOCUMENT,
NOTER_PAGE), Interleave's older names, and org-roam
(ROAM_REFS,ROAM_ALIASES) are preserved on rewrite. #+SETUPFILE:(local files only) merges TODO keywords, tags, and
#+PRIORITIES:into the file that names it. A URL is not fetched.
A missing or cyclic setup file is skipped so the tracker still
parses.vissue normalizerewrites a tracker onto the Org and ELPA
property names the other tools already read:#+CATEGORY:, type
as a heading tag, typos (BLOCKEDBY, drawerTAGS) folded, and
a bare:BLOCKER:id list moved to:BLOCKED_BY:.--dry-run
prints the files that would change. An org-edna condition stays.
vissue does not mint:BLOCKER: ids(...).
Changed
- A fresh tracker declares Org's tag and publish keywords:
#+FILETAGS:includesnoexport,#+TAGS:has the type group
plusdocs/perf/ignore/ARCHIVE, and
#+EXCLUDE_TAGS:/#+SELECT_TAGS:are written. A rewrite appends
noexportto an existing FILETAGS line that lacks it.search
matches inherited FILETAGS and a group tag. An Org-formatmirror
drops a heading taggednoexport.checknames a file that still
lacks those lines. - A parent with
:ORDERED:holds later children with the same
:PARENT:out ofreadyuntil every earlier sibling isDONEor
CANCELLED.:NOBLOCKING:on a child skips that wait.check
names a heading that started or closed early, and aDONEthat
still has open children. - Type is an Org heading tag when the character class allows it
(:bug:,:feature:,:task:). A write inserts a missing
#+CATEGORY:and#+FILETAGS:so the agenda does not label every
rowissues.vissue checknames a file still in the drawer-only
shape. #+PRIORITIES: highest lowest defaultsets the cookie range and the
value used when a heading has no[#X]. A fresh file writes
#+PRIORITIES: A C C.createwithout--priorityuses that
default; when the file has no such line it uses
issues.default_priority. A cookie outside the range is refused.:BLOCKER:is GNU ELPA org-edna (and org-depend), not a typo
for:BLOCKED_BY:. A bare id list still feedsreadyand is
rewritten to:BLOCKED_BY:; an edna condition stays.Effort
is recognised.checknames computed specials written in a
drawer,:BLOCKEDBY:, and an Effort value Org will not parse.
Fixed
- An org-gcal
:ID:of the form<event>/<calendar>is not an issue
id. The heading stays in the file around the real issues.
find_org_idsandcollect_org_idsskip slash ids.checkerrors
if a parsed issue still carries one. - Org Babel syntax is recognised without being evaluated. A
#+RESULTS:payload, a#+CALL:line, affiliated#+NAME:/
#+HEADER:keywords, inlinesrc_lang{}/call_name(), and
noweb<<name>>no longer split an issue or define a ghost id. - The
issues.orgparser now follows Org 9.8 on the constructs that
used to fail a file or split an issue: greater and dynamic blocks are
literal, a planning line accepts timestamp ranges and repeaters,
drawers may arrive in any order,COMMENTand notes headings stay
Org rather than becoming a missing:ID:, and file-local#+TODO:
keywords are recognised. Seedocs/orgmode/org-syntax.org.
vissue-hud 0.6.0
Install vissue-hud 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.6.0/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.6.0/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.6.0
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.6.0
Install vissue-cli 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.6.0/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.6.0/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.6.0
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.6.0
Install vissue-mcp 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.6.0/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass ...0.5.0 - 2026-08-18
Release Notes
Added
-
A user-level
~/.config/vissue/config.tomlcan send named projects to
another checkout. A route wins over--rootandVISSUE_ROOT, so a
process whose default root is one tracker can still create and show
issues that live on another.--no-routeandVISSUE_NO_ROUTE=1keep
every verb on the process default.projectsandidentitylist the
routed names;showandclaimfind an id on any configured layout.
vissue.elstill parses the originalidentityandprojectslines;
route lines are appended.refileandrejectroute their destination as well, so a bounce onto a
routed name lands on that name's tracker.serve, and the TUI and HUD
that talk to it, stay on the single layout the server was started with. -
vissue hudis an overlay. On Sway it floats and centers itself over
the compositor IPC socket. No Sway include orfor_windowrule. -
vissue rejectcloses a heading as CANCELLED and writes a successor
edge (PIVOTED_TO/DISCOVERED_FROM) in one edit, so a bounce is a
walkable wire rather than a body mention.vissue wait --id --until-terminal
blocks until that id is DONE or CANCELLED (exit 2 on timeout). State
changes emit astate_changeevent that names the id. -
vissue update --if-state/--if-genrefuse a write when the heading
or corpus moved since the caller last read it. Disagreeing terminals
keep the first close and record:SIBLING_TERMINAL:;vissue resolve
picks one.vissue checkwarns on a DONE that reads as a reject and on
a body[[id:]]with no successor edge.
Fixed
- A freshly started
serveowner is now waited on for 15 seconds rather than
5, andVISSUE_ACCEPT_TIMEOUT_MSoverrides that. A cold start binds its
socket only after building a runtime and loading the tracker, so a loaded
machine could reach the old deadline and be reported as a spawn failure.
The HUD's detach path reads the same deadline.
vissue-hud 0.5.0
Install vissue-hud 0.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.5.0
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.5.0
Install vissue-cli 0.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.5.0
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.5.0
Install vissue-mcp 0.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.5.0
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-mcp-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| [vissue-mcp-x86_64-unknown-linux-musl.tar.xz](https://github.com/HaoZeke/vissue/releases/download/v0.5.0/vissue-mcp-x86_64-unknown-linux-musl.tar.xz... |
0.4.1 - 2026-08-16
Release Notes
Fixed
vissue-servecompiles on Windows again. Thenotifycrate is a
Unix-only dependency; convertingnotify::Erroris now gated the
same way.
vissue-hud 0.4.1
Install vissue-hud 0.4.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.4.1/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.4.1/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.4.1
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-cli 0.4.1
Install vissue-cli 0.4.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.4.1/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.4.1/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.4.1
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>vissue-mcp 0.4.1
Install vissue-mcp 0.4.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.4.1/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.4.1/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.4.1
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| vissue-mcp-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo HaoZeke/vissueYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.3.0 - 2026-08-15
Release Notes
Added
-
vissue append <id>records a dated, attributed report under an issue's
heading, from--text, a--file, or stdin. A body could previously only be
set atcreate, andnotefolds its text to a single line by design, so
there was no way to write down the result of work. Markdown is safe. The MCP
tool isvissue_append. -
vissue hudis a summonable task board. It opens on the project list;
entering a project shows that project's ready forest, then List / Claims /
Agenda / Search within it, with show / excerpt / tree / related / notes on
the selected row. The window execs a separatevissue-hudbinary, so the
CLI does not carry the GUI dependencies.First paint reads the files. Unless
--offline, the board attaches to
vissue serve, starting it when the socket is free, and falls back to the
files when serve is down or bound to another root.--toggle,--show
and--hidetalk to a summon socket, so a keybinding can raise the board
that is already running rather than starting a second one.--rofigives the seat dmenu picker instead, over the set named by
--mode: Return opens the heading in$EDITOR, Alt+c claims, Alt+n
notes. Keys come from a catalog that~/.config/vissue/keys.tomlor
VISSUE_KEYSremaps;vissue keysprints it and--checkvalidates an
overlay. -
vissue servenow caches the issue catalog and answers the v1 control
methods (issue/list,issue/ready,issue/claim, and the rest).
Attached clients receivevault/changedafter a rebuild. The files stay
the store: stopping serve loses nothing. -
vissue showprints the body, andshow --orgwrites the heading out whole
(property drawer, logbook, and body) for handing an issue to someone as the
thing to work from.IssueDetailcarries the body, so--json, the MCP
tools, and the control protocol answer with what the issue asks for rather
than a file path and a line range. Prefershow --orgoverbody-excerpt
when the text is the specification: the excerpt is a preview and stops at 40
lines. The MCP tool isvissue_org. -
vissue tuiis an interactive board over ready, list, claims, agenda,
and search. First paint reads the files. Unless--offline, the board
attaches tovissue serve(starting it when the socket is free) and
falls back to the files when serve is down or bound to another root.
Changed
- Publication uses crates.io trusted publishing on a
v*tag, with no registry secret in the repository. - The minimum supported Rust version is 1.89, which is what the iced board's
dependencies require. checkonly searches the wider tree for:PARENT:ids that are not
issues. It validates parents against any Org id, which includes design
documents and notes, so on a tracker sharing a root with a notes vault it
read every.orgfile to answer a question the issues had usually
already answered. Where every parent is another issue the scan is now
skipped entirely: 58ms to 23ms on a 35MB corpus. A tracker that does
point at a design document still pays for the search, which now stops as
soon as the ids it wants have been found.
Fixed
- A body containing a line that starts with
*, which any markdown bullet
list does, no longer cuts the issue in two. The parser splits issues on that
line, so such a body used to leave a heading with no:ID:, stop the file
parsing, and drop every issue in that project out oflist. Those lines are
now indented by one on the way out;** Scopeand deeper are left alone,
being children of the issue rather than the end of it. - A client of
vissue servesees its own write. The catalog was rebuilt only
by the file watcher, so for up to about 450ms after a mutation the writer was
answered from the catalog as it stood before:issue/listcame back one
short, andissue/geton the idissue/createhad just returned reported
the issue as missing. The mutation path refreshes before it answers and
reports the resulting revision. - An idle tracker no longer rebuilds its catalog and broadcasts
vault/changed
several times a second. The generation poll opens the projects directory on
every tick, inotify reports that open against the watched tree, and a read
was counted as a change, so the rebuild's own reads raised the next event. checknow reads:ID:only from a property drawer under a heading, where
org defines one. A report appended to an issue body quotes the heading it
describes, and a quoted id used to count: a:PARENT:pointing at nothing
resolved against the mention, and the check that exists to catch broken links
went quiet.digestandmirror --checkread the corpus once rather than once per
project. Each project's digest came from a whole-corpus export filtered
down to that project, which is quadratic in the project count: on a
tracker with 115 projects and 4781 issues those commands took 6.2s, and
now take 0.16s. The digest values are unchanged, so mirrors stamped by an
earlier version still read as fresh.
Developer
-
The catalog query surface and the typed error enum are covered by tests.
-
The seams between the parts have tests of their own. The client and the
server now talk to each other over a real socket, which is where
a mutation the server accepted but did not make visible to the next read
used to hide; the Model Context Protocol (MCP) server is driven the way
an agent meets it, a process on the other end of a pipe;serve -druns
as a real daemon; and Org decides whether a markdown body stayed body,
rather than the parser deciding that about itself.Concurrent writers are covered: with the advisory lock removed, twelve
overlappingcreatecalls lose between two and six of themselves while
every writer reports success, and nothing in the suite noticed before.Three drift guards fail rather than rot: every command and MCP tool must
appear in the reference, every advertised control capability must be
routed, and the release must cover every publishable crate in an order
taken from the manifests.cargo testruns with--no-fail-fast, so a red run names every broken
target instead of stopping at the first.
vissue-hud 0.3.0
Install vissue-hud 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.3.0/vissue-hud-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.3.0/vissue-hud-installer.ps1 | iex"Download vissue-hud 0.3.0
| File | Platform | Checksum |
|---|---|---|
| vissue-hud-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-hud-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-hud-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-hud-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-hud-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
vissue-cli 0.3.0
Install vissue-cli 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.3.0/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.3.0/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.3.0
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| [vissue-cli-x86_64-unknown-linux-gnu.tar.xz](https://github.com/HaoZeke/vissue/releases/download/v0.3.0/vissue-cli... |
0.2.0 - 2026-08-14
Release Notes
Added
- A documentation site at vissue.rgoswami.me, written as Org under
docs/orgmode/and rendered with Sphinx. The pages keep to one Diataxis quadrant each, and the README is a front door rather than the whole manual. The site is a managed Cloudflare Pages target, deployed withttech-ops site deploy vissue. - Logo mark: a tessellated V of issue nodes with one ready cell, plus a circular crest and wordmark lockup under
assets/. - MCP tools for
ancestors,impact,cycles,refile,wait, andwhoami.identityalso emitsroot=/prefix=tokens. vissue completions <shell>andvissue man, generated from the CLI definition so they cannot drift, with copies committed undercompletions/andman/.
Changed
- Compatibility: a tracker written by this version is not readable by 0.1.0, which fails on the planning line with ":ID: property missing". Upgrade every reader of a tracker together. A second tool that writes an
issues.orgalso needs to place a:LOGBOOK:drawer below the planning line, or it breaks the file for every reader includingvissue. - A new project file carries
#+CATEGORY: <project>. Org otherwise takes the agenda category from the file name, and every project's file isissues.org, so a multi-project agenda labelled every rowissues. - Dates and tags move to where Org keeps them.
DEADLINE,SCHEDULED, andCLOSEDrender on the planning line under a heading, and a tag Org can hold renders in the heading's own tag run, soorg-agenda, Org tag search, andorg-lintall work against a tracker. Both shapes parse, so existing files read the same and settle on the Org shape when next rewritten. - JSONL export and
show --jsoncarryorg_tagsand atagsunion. - The README is a front door rather than the manual: what vissue is, how to install it, a minute of it working, and links into the documentation site. The tutorial, how-to, reference, and explanation move to their own pages.
- The tag property is
:VISSUE_TAGS:.TAGSis a name Org reserves andorg-lintreports; a drawer written under the old name is migrated on parse. tests/org_interop.shdrives Emacs over a tracker in CI: org-lint, org-agenda, tag search, and org-id all have to agree, and Org's own edits have to survive a vissue rewrite.
Fixed
- A
foldthat fails partway stamps the issues it did create, so rerunning does not create them twice. - A heading whose priority cookie holds a multi-byte character no longer panics the parser.
- A prefix-scoped
issues.config.tomloverridesvissue.tomlkey by key instead of resetting the keys it does not name. - A reader that closes the pipe, as
vissue export | headdoes, exits 0 instead of panicking with status 101. - An Org planning line no longer hides the property drawer below it. Writing a deadline, a scheduled date, or a
CLOSEDstamp from Emacs used to make every verb fail with ":ID: property missing" for the whole project file. - An
issues.orgis flushed to the device before the rename publishes it. - Auto-unblock to TODO releases the claim.
- Event generation and log append take a file lock.
- JSONL export and digest include CLOCK
rawlogbook lines. - Text
readynow uses the corpus-wide open-blocker set, matchingcount --readyand JSON ready. - The
body-excerptsecret screen reads credential shapes rather than three substrings, and matches vendor token prefixes on a whole word: the old form would have flagged "making" as an AWS key had that prefix been listed. - The acyclicity check for
--blockreads the corpus inside the lock, so a peer write that landed first is part of the answer. --projectfolds case inlist,count,ready,export,graph,roadmap, and the JSON rows, matchingclaims,agenda, and every verb that writes.checkcounts a duplicate id as an error, and reports a:PARENT:cycle. Every id in a parent loop resolves, so the edge checks passed it while the hierarchy stayed unwalkable andtreeprinted "(cycle, stopping)".createreports a full id space instead of panicking inside the write.id_length = 2is 1296 suffixes, which a project can outgrow.events::tail_reportcounts log lines rather than sequence numbers, so a debounced burst no longer shortens the tail.graphandtree --format dotescape backslashes and newlines in titles and ids, so issue text cannot become DOT syntax.hygienematches issues by id rather than by row prefix.mirror --outwrites through a flushed temporary and a rename, so a reader mid-pull cannot see a half-written projection.noteadds its entry at the top of the logbook, where state transitions and claim releases already go.org-set-tagsin Emacs no longer folds the tag run into the issue title.refilewrites the target file before removing the heading from the source, so a failed write cannot lose the issue.searchandrelatedread tags from the heading as well as the drawer.
Developer
- The Emacs interop check reports the error when Emacs itself fails, instead of exiting with a bare status and no message.
vissue-mcp 0.2.0
Install vissue-mcp 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.2.0/vissue-mcp-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.2.0/vissue-mcp-installer.ps1 | iex"Download vissue-mcp 0.2.0
| File | Platform | Checksum |
|---|---|---|
| vissue-mcp-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-mcp-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-mcp-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-mcp-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-mcp-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
vissue-cli 0.2.0
Install vissue-cli 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaoZeke/vissue/releases/download/v0.2.0/vissue-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/HaoZeke/vissue/releases/download/v0.2.0/vissue-cli-installer.ps1 | iex"Download vissue-cli 0.2.0
| File | Platform | Checksum |
|---|---|---|
| vissue-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| vissue-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| vissue-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| vissue-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| vissue-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |