Releases: vouchdev/vouch
Releases · vouchdev/vouch
Release list
vouch 1.2.1
Fixed
vouch --version(and__version__) reported 1.1.0 from the released
1.2.0 wheel —src/vouch/__init__.pywas a fourth version site nothing
kept in step. the manifest lockstep test now ties it to pyproject.toml,
openclaw.plugin.json and package.json. (pypi's 1.2.0 dists are immutable,
hence this patch release.)
Packaging
- container image: the docker build context now carries
adapters/
(dockerfile copy + dockerignore), which the wheel force-include requires
— without itpip installfailed the 1.2.0 image build with "Forced
include not found", so no 1.2.0 images were published.
vouch 1.2.0
Added
vouch compile— the llm-wiki ingest pass: a deployment-configured LLM
(compile.llm_cmdin.vouch/config.yaml) drafts topic pages from live
approved claims; every inline[claim: …]marker and[[wikilink]]is
verified mechanically against the store, and surviving drafts are filed as
PENDING page proposals by thewiki-compileractor. never approves — the
review gate is the ingest review.--dry-run,--max-pages,--llm-cmd,
--json. seedocs/compile.md.- review-ui: a compile wiki button on the queue (shown once
compile.llm_cmdis configured) runs the same ingest pass and lands the
drafts in the queue; success and per-draft drop counts surface as a notice. - company-brain template:
vouch init --template company-braindeclares
typed record kinds (contact, org, project-record, meeting-notes, followup,
decision-record, voice) aspage_kindsconfig and seeds a cited guide
page. operator-declared kinds always win; the merge is additive and
idempotent. seedocs/company-brain.md. vouch init --template <name>dispatches the onboarding template registry
(starter stays the default; templates layer on top of it).- frontmatter filters on
kb.list_pagesacross mcp/jsonl/cli: kind equality,
field equality, and inclusive ordered bounds (numbers, iso dates), plus the
vouch pageshuman mirror. a viewport overstore.list_pages(), not a
query language. kb.digest/vouch digest: read-only reviewer briefing — pending
proposals oldest-first, recent decisions, stale claims, followups due, and
citation coverage.--format text|json|markdown; writes nothing, so it is
safe to run from cron.- five company-brain slash commands in the claude-code adapter (mirrored to
the plugin skills list):/vouch-ask,/vouch-remember,/vouch-record,
/vouch-followup,/vouch-standup. every flow terminates at
kb_propose_*— none may callkb_approve. vouch source fetch <url>: snapshot a url's exact bytes as a
content-addressed source so claims cite immutable evidence. conservative
intake: http/https only, redirects re-validated, private-network hosts
refused, 2 mib cap,fetched_atrecorded in source metadata.vouch inbox --dir <path> [--watch]: dropped.md/.txtfiles become a
registered source plus one pending page proposal each — mechanical, no
model in the loop, never approves. content-hash seen-state makes re-runs
idempotent; bounded stdlib poll, no daemon.vouch notify sweep|test: config-declared reviewer webhooks
(proposal.created,queue.backlogged,proposal.aged) with optional
hmac-signed envelopes andenv:secret refs. read-and-notify only;
best-effort delivery; idempotent per (event, proposal).- protected page kinds:
page_kinds.<kind>.protected: trueexempts a kind
from thetrusted-agentself-approval opt-out — its pages always need a
reviewer other than the proposer. the template marksvoiceand
decision-recordprotected. - string-typed frontmatter schema fields now accept yaml's native
date/datetime scalars, fixing approve-time re-validation of pages whose
frontmatter round-tripped through disk (e.g.due_at: 2026-07-01).
Fixed
- installer: the curl one-liner no longer dead-ends on pep 668 hosts
(debian 12+, ubuntu 23.04+, homebrew python). whenpip install --user pipxis refused, pipx is hosted in a private venv under
~/.local/share/vouch/pipx-venv— still no sudo. re-runs recreate that
venv (brew pythons ship read-only activate scripts), an existing
~/.local/bin/pipxis preferred and never overwritten, and installer
failures now print the actual pip/venv errors instead of a guess. - cli: non-utf-8 locales (e.g.
LANG=en_US.ISO-8859-1) crashed
vouch status/vouch search/vouch --helpwith UnicodeEncodeError
on the•/…/—output glyphs. stdio is reconfigured to utf-8
(errors="replace") at module import — before click renders eager help —
covering the mcp/jsonl servers too; the last locale-dependent file i/o
sites (capture/themes config reads, the migration rewriter) pin
encoding="utf-8". vouch install-mcp <host>: works from pip/pipx installs. adapter
templates now ship inside the wheel (vouch/adapters/) and the resolver
falls back to that packaged copy when no repo checkout is present.
previously every installed copy failed with "unknown adapter …
(available: (none))"; source checkouts keep resolving the repo's
adapters/directory.
Claude Code session auto-capture
Added
- auto-capture: claude code sessions are harvested via hooks and filed as a
single pending session-summary proposal for human approval. aPostToolUse
hook (vouch capture observe) appends compact tool-use observations to an
ephemeral, gitignored.vouch/captures/<session>.jsonlbuffer; a
SessionEndhook (vouch capture finalize) rolls the buffer plus a git-diff
backstop into onesessionpage proposal — mechanical, no llm, and never
auto-approved. aSessionStartbanner (vouch capture banner) nudges the
next session when captured summaries await review. opt out with
capture.enabled: falsein.vouch/config.yaml. - session-start recall: a
SessionStarthook (vouch recall) injects a digest
of every live approved claim ([id] text) plus approved page titles into a
new claude session's context, so it starts aware of the reviewed KB. only
approved knowledge is emitted; archived / superseded / redacted claims are
excluded; size-guarded byrecall.max_charswith an explicit truncation
notice. opt out withrecall.enabled: false. vouch install-mcp claude-codenow merges its hooks and read-only permission
allowlist into an existing.claude/settings.json(ajson_mergeinstall
strategy) instead of skipping it, so the capture / recall hooks land on
projects that already have a settings file. idempotent; user entries are
preserved.- GitHub PR auto-labeling: a pull-request metadata-only labeler workflow now
applies vouch surface labels from.github/labeler.yml, keeps those labels
in sync as files change, and adds OpenClaw-stylesize: XSthrough
size: XLlabels based on non-doc changed lines. Maintainers can also run
it manually to backfill labels on already-open PRs. vouch detect-themes— cross-session pattern detection via deterministic
entity co-occurrence scoring.kb.detect_themesis read-only (returns
ranked clusters);kb.propose_themeroutes synthesis pages through the
review gate so they appear inkb.list_pending. Supports--proposefor
one-shot propose-all and--jsonfor machine-readable output. Configurable
viathemes.min_sessions,themes.min_claims,themes.top_k, and
themes.enabledinconfig.yaml(#311).- dual-solve JSON, review-ui job, and choose responses now include
changed_filesfor each candidate and the kept branch, so desktop and browser
clients can show the resulting files without parsing unified diffs.
Changed
vouch dual-solve --sandboxdefault docker image is now
vouch/coder:latest(wasamika/coder:latest).
Fixed
vouch pending(and every bulklist_*path) no longer crashes when a
single artifact file is unreadable — a corrupt or mojibake yaml is skipped
with a warning instead of aborting the whole listing.- all text-mode file i/o under
src/vouch/now pinsencoding="utf-8", so a
non-utf-8 locale (e.g. latin-1) can no longer mangle non-ascii claim text
into raw control bytes that the yaml loader rejects, nor crash on write.
Packaging
- restored the tag-triggered
release.ymlworkflow that was accidentally
deleted alongside unrelated files in the #95 squash. It publishes to PyPI
via Trusted Publishing (OIDC) exactly as before, and now also creates the
GitHub release for the tag with the built sdist and wheel attached and the
matching CHANGELOG section as the release body. - restored the
vouch-kbdistribution name inpyproject.toml— the same
#95 squash had reverted it tovouch, which PyPI rejects (the name belongs
to an unrelated project, and the trusted publisher is registered for
vouch-kb). The installed command is stillvouch. - container image: every release now also pushes
ghcr.io/vouchdev/vouch
(linux/amd64 + linux/arm64, taggedX.Y.Z,X.Y, andlatest). The
entrypoint is thevouchCLI with the stdio MCP server as the default
command; bind-mount the project root at/data. Built from the new
repo-rootDockerfile; installs thewebextra, leaves embeddings out. - the
[1.0.0]section below was restored: a merge after the release folded
its entries back under[Unreleased], dropping the version header.
Docs
- example KBs now carry their own screenshots:
examples/README.mdand the
tiny/+decision-log/READMEs embed terminal renders ofvouch status,
search,show,audit, and a supersessiondiffagainst the shipped
fixtures, so a reader can see what vouch looks like before installing it.
Images live underdocs/img/examples/and are generated deterministically
from the fixtures bydocs/img/examples/render.py(make examples-screenshots);tests/test_example_screenshots.pyasserts the
committed SVGs stay reproducible (#286).
v0.1.0
[0.1.0] — 2026-05-26
Packaging
- Published to PyPI as
vouch-kb(thevouchname was already taken by an
unrelated project); the installed command is stillvouch. Install with
pipx install vouch-kb. A tag-triggered release workflow publishes via PyPI
Trusted Publishing (OIDC).
Added
- Seed a cited starter source and claim during
vouch init, print first-run
next steps, and document a 30-second onboarding tour (#54).
Fixed
- Add
put_relation_idempotent()toKBStoreand use it insupersede()andcontradict()so retrying after a partial failure converges to a consistent state instead of raisingValueError. - Raise
ProposalError("forbidden_self_approval")inproposals.approve()whenapproved_by == proposal.proposed_by, enforcing the review-gate guarantee documented in the README and CONTRIBUTING. crystallize()now setsreview.approver_role: trusted-agentcontext so single-agent sessions can be crystallized without hitting theforbidden_self_approvalguard (#47).- Bundle import rejects tar members whose path escapes
kb_dir(CVE-2007-4559, #9). Previously a crafted.tar.gzwith a member named../../evil.txtcould write outside.vouch/; the manifest allow-list did not prevent this because the manifest lives inside the same tarball.import_apply,import_check, andexport_checknow validate every member path and raise on unsafe names. - Fix
vouch searchCLI: assign backend label per code path so substring fallback results are no longer mislabelled asfts5; update stale docstring to reflect multi-backend search surface (#52). vouch crystallizenow indexes its session-summary page into FTS5 so it surfaces fromvouch search/kb.search/kb.contextwithout avouch indexrebuild (#60).- Bundle export uses POSIX
/separators inmanifest.jsonand tar member names on every platform (Windows previously produced self-invalid bundles). Windows bundles produced before this fix should be re-exported. bundle.import_checkandbundle.import_applynow verify each tar member'ssha256againstmanifest.json(#74), so a tampered tarball with an unchanged manifest can no longer land attacker-controlled content;import_applyre-verifies at write time and refuses to record abundle.importaudit event on mismatch.