Repository navigation
sessionFlow v1.3.0 — Release Notes
Released 2026-10-20. Install:
pipx install "voyager[all] @ git+https://github.com/HarryHeYu/sessionFlow.git@v1.3.0"Verify with voyager --version — it must print 1.3.0.
Voyager is not on PyPI. The voyager name there belongs to an unrelated
nearest-neighbour search library; a bare pip install voyager installs the wrong
project. Always use the @ git+… form.
The headline
A continuation reference you can actually check.
Until now a bundle told you which session a claim came from, and stopped there.
Re-checking it meant opening the transcript and squinting. v1.3.0 names the event,
and answers the question programmatically:
$ voyager evidence verify codex:01ab… 3 c71c180a
MATCH the event at seq 3 is the one the reference named
session : codex:01ab…
found : seq 3 #c71c180a
cited : seq 3 #c71c180a
file : same size and mtime as when it was indexed (not proof of identical
bytes; see `voyager evidence` limits in docs)
MATCH means the indexed event is the one the reference was made from.
It does not mean the claim it carries is true.Five outcomes, one per exit code, so a shell or CI can branch on them:
| Status | Exit | Meaning |
|---|---|---|
MATCH |
0 | the event at that position is the one the reference cited |
MISMATCH |
1 | the position holds different content — the transcript was rewritten under the reference |
NOT_FOUND |
2 | the session or that event no longer exists |
UNVERIFIABLE |
3 | the reference names no digest, so only the position was checked — and a position is exactly what a mid-transcript edit renumbers |
INVALID_REFERENCE |
4 | the reference is malformed |
--json emits a stable object with the same fields plus source_available, so a
consumer can require both a content match and a live source.
voyager show now prints #seq/digest on every event line, so a reference cited
by a bundle resolves through the CLI without comparing two windows by eye.
What MATCH does not mean
MATCH says the indexed event is the one the reference was recorded from. It
does not say:
- that the claim is true — no mechanism here decides that;
- that the transcript was not tampered with — the fingerprint is 8 hex characters
of SHA-256 over the event's identifying fields, compared pairwise. It detects
accidental drift, and anyone who rewrites a transcript can recompute it; - that the original file is byte-identical —
mtime/sizeare compared, and a
touchshows as changed while an edit that preserves the size shows as
unchanged.
v1.3.0 core improvements
- Verifiable Evidence References —
· seq N · #digeston every tool
observation and every assistant claim in a bundle, plusvoyager evidence verifyto check one. - Claim-level event attribution — a claim names the message that made it, and
the contradicting tool result keeps its own reference, so the two can be read
against each other instead of being merged by recency. - Fingerprint-based consistency checks — a canonical JSON fingerprint
(sha256-8hex-json-v1) overkind,content,command,tool_output,
tool_call_idandexit_code. An exit code that flips1→0with the
output text unchanged is caught; before this release it was not part of the
fingerprint at all. - Source metadata status — the scanner has recorded
mtimeandsizeper
source since forever and nothing read them back. They are now compared and
reported, with their limits stated on every path. - Handoff evidence preservation — the context package written by
voyager continue --outcarries the reference on the claim it hands over. It
was being dropped at the last step, which would have made the whole chain
decorative on the path users actually take. - Test isolation hardening — the suite now refuses to run when discovery
would reach real agent data, instead of relying on every test remembering to
redirect. Import-time path capture is proven safe by a subprocess test that
controls import order.
Everything else since v1.2.0
- Reading a missing index no longer fabricates an empty database and answers
"0 results" — which read as "you have no data" when the truth was "there is
no index here". A typo'd--dbnow fails honestly. voyager_continuegainedthread_id, so a caller told "pick one" can actually
pick one; and with no WorkThread at all it now agrees with the CLI instead of
answering "nothing to continue" where the CLI compiled a bundle.- The dashboard shows a continuation preview per WorkThread, the sessions with
their tool calls and exit codes, and the exactvoyager continue --thread <id>
to run — all read-only, with the ambiguity named rather than resolved. voyager_switchno longer says "no active WorkThread" for a repo that has two.
Compatibility
| Bridge schema | 1, unchanged |
| Plugin v1.1.0 | compatible as-is — 54 tests pass, and the plugin does not parse bundle text |
| v1.2.0 index | opens with no migration; reads change no row and no schema object |
| v1.2.0 bundles | readable. They carry no fingerprint, so evidence verify answers UNVERIFIABLE and offers the digest to adopt rather than inventing one |
| Downgrade | safe for this release: v1.2.0 ignores the one index v1.3.0 adds |
Breaking changes: none. All additions are additive — a new subcommand, new
optional JSON fields, and extra tokens appended inside existing bundle lines.
No schema change, no table added, no second event store.
Known limitations
- No automatic fact-checking. Nothing decides whether a historical claim is
correct. The bundle hedges ("read as what it said rather than as verified
fact") and every verify path states MATCH is not truth. - The fingerprint is not a signature — see above.
- No source content hashing.
mtime/sizeonly. (session, seq)survives a re-scan and an append, not an edit in the middle
of a transcript. The fingerprint is what catches the latter, by reporting
MISMATCH rather than silently re-pointing.- Provenance is event-level, not claim-level. A reference says which
message said it; it does not extract the proposition and cite it separately. - Unicode is not normalised in the fingerprint, so NFC and NFD spellings of
the same text hash differently. A false MISMATCH is the safe direction. evidence verifyis CLI-only. The JSON output is the intended machine
surface; no API/MCP wrapper was added because nothing consumes it yet.- The dashboard filter is snapshot-scoped by design; whole-index search is
voyager search. - Native resume and model-driven tool selection are not verified end to end.
Both need paid providers. - The SQLite concurrent-index flake remains unproven — not reproduced in
bounded re-runs, and deliberately not papered over with sleeps or retries.
Upgrading
pipx install --force "voyager[all] @ git+https://github.com/HarryHeYu/sessionFlow.git@v1.3.0"No migration runs. Your index is read as-is: no rows change, and the only
difference is one index the new version adds for its own speed. Rolling back is
safe because nothing was migrated.
Backup before upgrading (good practice, not required):
python -c "import sqlite3; \
s=sqlite3.connect('$HOME/.voyager/index.db'); \
d=sqlite3.connect('index-backup.db'); \
s.backup(d); d.close(); s.close()"Community
Listed in
awesome-dsh-plugin
(PR #7226, merged 2026-10-18).
That is a third-party directory listing — not a DeepSeek endorsement,
certification or partnership.
A note on the install command in this tag
The README.md inside this tag still shows @v1.2.0 in its install
commands. That is not a different release: the pin was repointed to @v1.3.0
in a follow-up commit on main (57aebef), after this tag was cut — the
release had to exist before the docs could point at it. The tag is immutable, so
the correction lives on main rather than inside it.
Use the current instructions:
pipx install "voyager[all] @ git+https://github.com/HarryHeYu/sessionFlow.git@v1.3.0"
voyager --version # must print 1.3.0- Current install guide: https://github.com/HarryHeYu/sessionFlow#install
- Five-minute walkthrough: https://github.com/HarryHeYu/sessionFlow/blob/main/docs/QUICKSTART.md
- Known issues and compatibility matrix: https://github.com/HarryHeYu/sessionFlow/blob/main/docs/MAINTENANCE.md
Nothing about the code changed between the tag and main; only documentation.