Releases: vouchdev/vouch
Releases · vouchdev/vouch
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.