Skip to content
Merged

Test #277

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
245 commits
Select commit Hold shift + click to select a range
0ed8a89
fix(sessions): close crystallize review-gate bypass via summary page …
galuis116 May 25, 2026
901363d
Merge branch 'main' into fix/crystallize-summary-page-bypass
galuis116 May 25, 2026
e427404
Merge branch 'main' into fix/crystallize-summary-page-bypass
galuis116 May 25, 2026
b2e3db1
fix(tests): remove unused unittest.mock.patch import in test_sessions
galuis116 May 25, 2026
0708c74
fix(context,storage): exclude retracted claims from kb.context and re…
galuis116 May 25, 2026
23290a0
Merge branch 'main' into fix/context-filter-and-reindex-retracted-claims
galuis116 May 25, 2026
df6e9d3
Merge main into fix/crystallize-summary-page-bypass
galuis116 May 25, 2026
e142849
fix(models): require Claim.evidence to be non-empty at the model laye…
galuis116 May 25, 2026
f558fd0
fix(bundle): reject import of bundles whose manifest lists files miss…
alpurkan17 May 25, 2026
534cae6
docs: spec for vouch diff (claim/page revision diff)
plind-junior May 25, 2026
8c45a91
feat(diff): add vouch diff for claim/page revisions
plind-junior May 25, 2026
e773aba
fix(diff): annotate old/new as Claim | Page to satisfy mypy
plind-junior May 25, 2026
7d7a835
Merge pull request #86 from vouchdev/feat/diff-command
plind-junior May 25, 2026
555acfc
feat: add guided proposal review CLI
claytonlin1110 May 25, 2026
5c881de
health: lint surfaces legacy uncited claims instead of crashing (#82 …
galuis116 May 25, 2026
423c1dd
health: widen HealthReport.counts type to dict[str, Any] (CI mypy)
galuis116 May 25, 2026
b24dc3c
Merge pull request #84 from jsdevninja/feat/guided-review-queue
plind-junior May 26, 2026
079da73
feat(cli): add JSON output for pending proposals
jsdevninja May 26, 2026
c5eac6a
Merge pull request #89 from jsdevninja/feat/pending-json
plind-junior May 26, 2026
e3472e7
feat: add deterministic sync workflow for diverged KBs
jsdevninja May 26, 2026
a764129
fix: update
jsdevninja May 26, 2026
f2528a2
Merge pull request #91 from jsdevninja/feat/deterministic-vouch-sync
plind-junior May 26, 2026
eafeed6
fix(context): honor retrieval.backend config instead of hardcoding em…
dripsmvcp May 26, 2026
f57917c
feat(cli): vouch approve accepts multiple ids for scriptable bulk app…
dripsmvcp May 26, 2026
8d34310
docs(proposals): add VEP-0004 HTTP transport (draft) (#94)
dripsmvcp May 26, 2026
0dba232
docs(proposals): add VEP-0005 richer scopes on Claim/Source (draft) (…
dripsmvcp May 26, 2026
a5f074f
feat(cli): colourise output, add --json to lint/search, progress on l…
dripsmvcp May 26, 2026
623c2e2
LGTM! Merge pull request #77 from galuis116/fix/crystallize-summary-p…
plind-junior May 26, 2026
7843182
Merge branch 'test' into fix/claim-model-requires-citation
galuis116 May 26, 2026
cdd6fe6
Merge pull request #82 from galuis116/fix/claim-model-requires-citation
plind-junior May 27, 2026
e8dd575
Merge pull request #102 from dripsmvcp/fix/92-retrieval-backend-config
plind-junior May 27, 2026
6047ddc
Merge pull request #103 from dripsmvcp/fix/93-approve-batch
plind-junior May 27, 2026
bbeb8e5
Merge branch 'test' into fix/import-check-missing-manifest-files
alpurkan17 May 27, 2026
74f7a6a
fix: narrow evidence validation to ArtifactNotFoundError in propose_c…
Tet-9 May 21, 2026
5d87d9b
fix: use pytest.raises to prevent false positive in corrupt source test
Tet-9 May 22, 2026
a0ee15c
test: restore corrupt source regression test after rebase
Tet-9 May 27, 2026
6c98431
Merge pull request #50 from Tet-9/fix/48-evidence-validation-error-ma…
plind-junior May 28, 2026
16afe71
Merge pull request #79 from galuis116/fix/context-filter-and-reindex-…
plind-junior May 28, 2026
696f028
Merge pull request #85 from alpurkan17/fix/import-check-missing-manif…
plind-junior May 28, 2026
2827a74
feat(serve): add HTTP transport for vouch serve --transport http (#94)
dripsmvcp May 28, 2026
a0d05d0
fix: reject dangling Relation/Page references at every write path
galuis116 May 28, 2026
5081afc
Merge remote-tracking branch 'upstream/test' into fix/graph-integrity…
galuis116 May 28, 2026
d6964e8
fix: enforce Source content-addressing on bundle/sync import
galuis116 May 28, 2026
5485ff8
docs: add PROJECT-INDEX.md codebase briefing
plind-junior May 28, 2026
bbd59f9
feat(health): add vouch fsck for deep consistency checks
Johnb1109 May 26, 2026
503218b
fsck: surface object_ids inline, list fsck in 'What ships today'
Johnb1109 May 26, 2026
297cafc
fsck: add docstrings to private helpers and new tests
Johnb1109 May 26, 2026
d12e7dd
test(fsck): assert report.ok is False on dangling_{superseded_by,cont…
Johnb1109 May 26, 2026
1041045
Merge remote-tracking branch 'upstream/test' into fix/54-track2-cli-o…
dripsmvcp May 28, 2026
243bdb4
Merge pull request #106 from dripsmvcp/fix/54-track2-cli-output
plind-junior May 28, 2026
4666baa
Merge branch 'test' into fix/graph-integrity-dangling-refs
galuis116 May 28, 2026
c18edf4
Merge branch 'test' into fix/bundle-source-content-addressing
galuis116 May 28, 2026
ab54194
fix(models): require Claim.evidence to be non-empty at the model laye…
galuis116 May 25, 2026
cf648b0
health: lint surfaces legacy uncited claims instead of crashing (#82 …
galuis116 May 25, 2026
816d3d0
health: widen HealthReport.counts type to dict[str, Any] (CI mypy)
galuis116 May 25, 2026
cdf72ab
fix(sessions): close crystallize review-gate bypass via summary page …
galuis116 May 25, 2026
fb4b326
fix(context): honor retrieval.backend config instead of hardcoding em…
dripsmvcp May 26, 2026
e7df047
feat(cli): vouch approve accepts multiple ids for scriptable bulk app…
dripsmvcp May 26, 2026
7fd2fed
feat: add batch approval for reviewed proposals
jsdevninja May 26, 2026
972e2d7
fix: simplify doc
jsdevninja May 28, 2026
6412bac
Merge pull request #111 from jsdevninja/feat/batch-approve-proposals
plind-junior May 28, 2026
6e5b91e
Merge remote-tracking branch 'upstream/test' into fix/graph-integrity…
galuis116 May 28, 2026
d7a0efd
Merge remote-tracking branch 'upstream/test' into fix/bundle-source-c…
galuis116 May 28, 2026
4b5b325
docs: spec for vouch init --template domain starter packs
plind-junior May 28, 2026
aef6252
feat(init): add --template with a gittensor (SN74) starter pack
plind-junior May 28, 2026
c8f1613
Merge remote-tracking branch 'origin/test' into resolve/vouch-fsck-112
Khaostica May 28, 2026
119a787
Merge remote-tracking branch 'origin/test' into feat/init-templates
plind-junior May 28, 2026
731ca51
Merge pull request #131 from vouchdev/feat/init-templates
plind-junior May 28, 2026
03d176f
feat(templates): expand gittensor pack with policy and scoring claims
dripsmvcp May 29, 2026
05d9ee7
Merge pull request #133 from dripsmvcp/fix/132-gittensor-template
plind-junior May 29, 2026
f1dc9b3
docs(gittensor): adoption guide (init, MCP wiring, decision workflow)
dripsmvcp May 29, 2026
7c8bd79
feat(logging): structured JSON logging via VOUCH_LOG_FORMAT=json (#97)
Khaostica May 26, 2026
5122925
Merge remote-tracking branch 'origin/test' into resolve-112
Khaostica May 29, 2026
1af9521
fix: vouch serve fails fast with clear hint when no KB is present (#95)
Tet-9 May 29, 2026
53abfb8
Merge pull request #134 from dripsmvcp/fix/132-gittensor-adoption-docs
plind-junior Jun 1, 2026
bcff1d6
feat: add vouch expire for stale pending proposal GC
jsdevninja May 29, 2026
cff1265
Merge pull request #136 from jsdevninja/feat/vouch-expire-stale-propo…
plind-junior Jun 1, 2026
50ddf61
fix(storage): honour VOUCH_KB_PATH env var in discover_root
plind-junior Jun 1, 2026
713b777
Merge branch 'test' into fix/vouch-kb-path
plind-junior Jun 1, 2026
e6f6b54
Merge pull request #144 from vouchdev/fix/vouch-kb-path
plind-junior Jun 1, 2026
9a67aa6
fsck: tolerate invalid claim YAML + collapse index-drift blocks
Khaostica Jun 1, 2026
e5c7b8c
refactor(logging): mark managed handler by subclass, not attribute
Khaostica Jun 1, 2026
53f880b
Merge remote-tracking branch 'origin/test' into feat/vouch-fsck
Khaostica Jun 1, 2026
e31155e
Merge pull request #112 from Khaostica/feat/vouch-fsck
plind-junior Jun 2, 2026
7fa2104
Merge pull request #114 from Khaostica/fix/97-vouch-log-format-json
plind-junior Jun 2, 2026
9445e9a
Merge pull request #126 from galuis116/fix/bundle-source-content-addr…
plind-junior Jun 2, 2026
9a2bebf
fix(http): reject negative Content-Length, bound per-request read window
dripsmvcp Jun 2, 2026
8cffebe
feat: add performance benchmark suite for search, propose, bundle, an…
Tet-9 May 27, 2026
c90312c
feat: add vouch migrate for safe KB format upgrades
jsdevninja May 26, 2026
6ba8a7c
Merge remote-tracking branch 'upstream/test' into fix/graph-integrity…
galuis116 Jun 2, 2026
6de2ac5
Merge pull request #108 from jsdevninja/feat/vouch-migrate
plind-junior Jun 3, 2026
7b6ff5e
feat: warn on propose when claim text matches approved or pending kno…
jsdevninja Jun 1, 2026
e00ac22
fix: lint
jsdevninja Jun 1, 2026
3c4f5c1
fix: update
jsdevninja Jun 1, 2026
a4cbc76
fix: update
jsdevninja Jun 1, 2026
591f901
fix: update
jsdevninja Jun 1, 2026
e80350e
docs: plan for Claude Code adapter (4 tiers + install-mcp CLI)
plind-junior Jun 3, 2026
f69dbd8
Merge pull request #151 from vouchdev/feat/claude-code-adapter
plind-junior Jun 3, 2026
bbf29c8
Merge branch 'test' into fix/94-http-transport-vep
dripsmvcp Jun 4, 2026
7a1f81c
Merge pull request #104 from dripsmvcp/fix/94-http-transport-vep
plind-junior Jun 4, 2026
cff41e0
Merge branch 'test' into fix/100-richer-scopes-vep
dripsmvcp Jun 4, 2026
91c0314
Merge pull request #105 from dripsmvcp/fix/100-richer-scopes-vep
plind-junior Jun 4, 2026
eb8c24e
feat(cli): vouch pr-cache — dedup PR raises against merged/closed his…
dripsmvcp Jun 4, 2026
e7c4063
docs(skills): pr-precheck — Claude Code skill that drives vouch pr-cache
dripsmvcp Jun 4, 2026
741c1ff
Merge pull request #161 from dripsmvcp/feat/pr-cache-dedup
plind-junior Jun 4, 2026
2d4f491
feat(http): MCP-over-Streamable-HTTP + multi-token + adapters/http-tu…
dripsmvcp Jun 9, 2026
d1b1f84
feat(web): landing page about vouch as agent muscle memory
plind-junior Jun 9, 2026
b0d28e0
fix(http): address PR #177 review — blocking + non-blocking + questio…
dripsmvcp Jun 9, 2026
04c86af
Merge pull request #177 from dripsmvcp/fix/176-mcp-spec-http
plind-junior Jun 9, 2026
73ec7ce
Merge pull request #178 from vouchdev/feat/web-landing
plind-junior Jun 9, 2026
8337b89
Merge pull request #116 from Tet-9/feat/99-performance-benchmarks
plind-junior Jun 9, 2026
32b9019
Merge pull request #124 from galuis116/fix/graph-integrity-dangling-refs
plind-junior Jun 9, 2026
6be281c
Merge pull request #148 from jsdevninja/feat/propose-similarity-warnings
plind-junior Jun 9, 2026
228db16
feat(cli): vouch install-mcp <host> — one-command adapter writer (8 h…
dripsmvcp Jun 9, 2026
50cc8e9
Merge pull request #180 from dripsmvcp/fix/179-install-mcp
plind-junior Jun 9, 2026
5a9cb27
feat(cli): vouch sync --vault <dir> — bidirectional Obsidian vault sync
dripsmvcp Jun 9, 2026
f18bc4b
fix:bundle import can overwrite the audit log
jonathanchang31 Jun 5, 2026
6d53c99
Merge pull request #183 from jonathanchang31/fix/bundle-import-overwr…
plind-junior Jun 9, 2026
59d587b
Merge pull request #182 from dripsmvcp/fix/181-vault-sync
plind-junior Jun 9, 2026
096b778
feat(cli): add vouch stats and kb.stats for KB observability
jsdevninja Jun 4, 2026
9f057df
fix: update
jsdevninja Jun 4, 2026
751d451
Merge pull request #165 from jsdevninja/feat/vouch-stats-kb-stats
plind-junior Jun 9, 2026
a59d3f6
feat(logging): add VOUCH_LOG_FORMAT=json structured logging
Tet-9 Jun 9, 2026
f4c5c64
feat(web): vouch review-ui — browser-based review console (mvp slice)
plind-junior Jun 10, 2026
332416f
feat(cli): vouch metrics — first-class observability
dripsmvcp Jun 10, 2026
257bb7b
docs(metrics): tag Prometheus exposition block as text (#193 review)
dripsmvcp Jun 10, 2026
bcf4c98
refactor(metrics): apply CodeRabbit readability nits (#193 review)
dripsmvcp Jun 10, 2026
1c4ccea
Merge pull request #193 from dripsmvcp/feat/192-metrics
plind-junior Jun 10, 2026
4131530
feat(provenance): vouch why/trace/impact + kb.* provenance graph (#197)
dripsmvcp Jun 10, 2026
9788faa
Merge pull request #199 from dripsmvcp/feat/197-provenance-trace
plind-junior Jun 10, 2026
44c30e5
feat(web): vouch review-ui — full #194 spec (ws, sessions, sources, a…
dripsmvcp Jun 10, 2026
b81a6dd
Merge pull request #198 from dripsmvcp/feat/194-review-ui-full
plind-junior Jun 10, 2026
8c571b6
fix(storage): reject dangling Claim graph references on every write path
galuis116 Jun 10, 2026
a7626cb
feat(migrate): versioned semver schema migrations for the on-disk KB …
dripsmvcp Jun 10, 2026
c24c51c
Merge pull request #202 from dripsmvcp/feat/200-schema-migrations
plind-junior Jun 10, 2026
c138dd9
Merge remote-tracking branch 'upstream/test' into feat/95-serve-fail-…
Tet-9 Jun 12, 2026
b0dc9f8
Merge pull request #122 from Tet-9/feat/95-serve-fail-fast-no-kb
plind-junior Jun 12, 2026
5b17261
fix(jsonl): coerce context max_chars string values
Yaroslav98214 Jun 15, 2026
606a958
Merge pull request #215 from Yurii214/fix/145-context-max-chars-string
plind-junior Jun 15, 2026
a487fe5
Merge branch 'test' into fix/claim-dangling-graph-refs
plind-junior Jun 15, 2026
5ef7ab6
Merge pull request #113 from Tet-9/feat/97-vouch-log-format-json
plind-junior Jun 15, 2026
d3a134b
test(cli): write poisoned claim straight to disk in fsck dangling test
galuis116 Jun 15, 2026
876c9f7
feat(install): curl | sh one-liner installer for vouch-kb
plind-junior Jun 16, 2026
5f27a1b
Merge branch 'test' into feat/install-script
plind-junior Jun 16, 2026
949163c
docs: AGENTS.md + CLAUDE.md + llms.txt for the 0.1.0 release
plind-junior Jun 16, 2026
964e445
fix(install): address coderabbit review on PR #216
plind-junior Jun 16, 2026
5870f00
feat(scoping): add structured ArtifactScope and retrieval filtering (…
jsdevninja Jun 9, 2026
f3ab51c
fix: lint
jsdevninja Jun 9, 2026
0d90564
Merge pull request #190 from jsdevninja/feat/vep-0005-richer-scopes
plind-junior Jun 16, 2026
552eeec
feat(retrieval): add kb.neighbors and graph expansion for context packs
jsdevninja Jun 9, 2026
c2d4952
feat(openclaw): plugin manifest + doc updates for openclaw compat
plind-junior Jun 16, 2026
dffebd5
fix(sync): load source once in sync_apply, pass to sync_check to clos…
Tet-9 Jun 16, 2026
cdb0fab
Merge pull request #221 from vouchdev/feat/agent-entry-docs
plind-junior Jun 17, 2026
07d8376
feat(synthesize): kb.synthesize answer-mode retrieval (issue #222)
dripsmvcp Jun 17, 2026
fbe2ffd
feat(salience): per-session entity-salience reflex (issue #223)
dripsmvcp Jun 17, 2026
54e3b22
feat(eval): recall-quality eval harness with CI baseline gate (issue …
dripsmvcp Jun 17, 2026
489c6e2
feat(volunteer): add confidence-gated kb.volunteer_context push channel
claytonlin1110 Jun 17, 2026
0861f0e
feat(extractors): auto-extracted typed edges on approved pages
claytonlin1110 Jun 17, 2026
e97a6f0
Merge pull request #246 from claytonlin1110/feat/auto-extracted-edges
plind-junior Jun 17, 2026
383d0e5
Merge branch 'test' into feat/226-recall-eval
plind-junior Jun 17, 2026
0a083c6
Merge pull request #241 from dripsmvcp/feat/226-recall-eval
plind-junior Jun 17, 2026
6b7d5f9
Merge branch 'test' into feat/volunteer-context
plind-junior Jun 17, 2026
386033d
Merge branch 'test' into feat/223-salience-reflex
plind-junior Jun 17, 2026
230b380
Merge pull request #240 from claytonlin1110/feat/volunteer-context
plind-junior Jun 17, 2026
f607f31
Merge branch 'test' into feat/223-salience-reflex
plind-junior Jun 17, 2026
653ead9
Merge pull request #239 from dripsmvcp/feat/223-salience-reflex
plind-junior Jun 17, 2026
e14ee9b
Merge branch 'test' into feat/222-synthesize
plind-junior Jun 17, 2026
a11bbf5
fix(imports): restore yaml/salience imports dropped in merge
dripsmvcp Jun 17, 2026
a661bd2
Merge pull request #238 from dripsmvcp/feat/222-synthesize
plind-junior Jun 17, 2026
7c6536f
ci(install-sh): resolve pipx bin dir via pipx CLI, not python -m pipx
plind-junior Jun 17, 2026
9396e15
Merge pull request #216 from vouchdev/feat/install-script
plind-junior Jun 17, 2026
41c51f8
feat(audit): visibility-aware kb.audit queries
claytonlin1110 Jun 17, 2026
085f5f9
fix: update
claytonlin1110 Jun 17, 2026
30d694c
fix: update
claytonlin1110 Jun 17, 2026
37a349f
feat(server): _meta.vouch_trust block on kb.* responses
claytonlin1110 Jun 17, 2026
3569804
fix: update
claytonlin1110 Jun 17, 2026
b3f4d89
Merge pull request #185 from jsdevninja/feat/graph-neighbors-context-…
plind-junior Jun 18, 2026
c51c178
Merge pull request #218 from Tet-9/fix/context-explain-backend
plind-junior Jun 18, 2026
2c8f2a3
Merge pull request #247 from claytonlin1110/feat/visibility-aware-kb-…
plind-junior Jun 19, 2026
0bdaa93
Merge pull request #248 from claytonlin1110/feat/vouch-trust
plind-junior Jun 19, 2026
52a8fb3
feat(openclaw): declare vouch-context engine contract
claytonlin1110 Jun 17, 2026
79c1406
fix: update
claytonlin1110 Jun 17, 2026
b12292f
feat(install-mcp): add openclaw host adapter
jsdevninja Jun 17, 2026
4c99e99
fix: update
jsdevninja Jun 19, 2026
69c6475
fix(vault): slug_hint, ghost-page guard, dedup proposals, warn on cla…
Tet-9 Jun 16, 2026
4a4858e
fix(vault): slug_hint, ghost-page guard, dedup proposals, warn on cla…
Tet-9 Jun 17, 2026
778dc26
fix(#201): address Codex review — atomic lifecycle, batch precheck, f…
galuis116 Jun 19, 2026
6fcea9d
feat(audit): hash-chain audit events
dripsmvcp Jun 19, 2026
2c19355
fix(metrics): raise MetricsError on overflowing --since duration
jaso0n0818 Jun 20, 2026
0f14da3
Merge pull request #220 from Tet-9/fix/219-vault-to-kb-slug-and-guards
plind-junior Jun 21, 2026
35cf7a8
Merge pull request #242 from jsdevninja/feat/openclaw-install-adapter
plind-junior Jun 21, 2026
74c8843
Merge pull request #249 from claytonlin1110/feat/vouch-context-engine
plind-junior Jun 21, 2026
088cc72
Merge pull request #253 from dripsmvcp/codex/audit-hash-chain
plind-junior Jun 21, 2026
38d4023
docs(#201): tighten review-followup comments and CHANGELOG entries
galuis116 Jun 21, 2026
8d89b15
Merge pull request #254 from jaso0n0818/fix/metrics-since-overflow
plind-junior Jun 22, 2026
0c10b4b
Merge pull request #201 from galuis116/fix/claim-dangling-graph-refs
plind-junior Jun 22, 2026
68459c9
feat(pages): config-declared typed page kinds with schema validation
dripsmvcp Jun 22, 2026
68bff04
fix(schemas): regenerate page schema for open type + metadata
dripsmvcp Jun 22, 2026
2eec325
Merge pull request #259 from dripsmvcp/feat/234-typed-page-kinds
plind-junior Jun 22, 2026
9f6e55d
docs(auto-pr): add design spec for generalized auto-PR feature
plind-junior Jun 25, 2026
933ec29
docs(auto-pr): add implementation plan
plind-junior Jun 25, 2026
3ec96d7
feat(auto-pr): open N cross-verified mergeable PRs against any repo
plind-junior Jun 25, 2026
d77367b
fix(auto-pr): correct real claude/codex/gh invocation flags
plind-junior Jun 25, 2026
3f777e1
fix(auto-pr): constrain fixer permissions by default, opt-in to full
plind-junior Jun 25, 2026
a34da15
fix(auto-pr): harden state/return-code handling from codex review
plind-junior Jun 25, 2026
f08971c
fix(auto-pr): close gaps from claude adversarial review
plind-junior Jun 25, 2026
9c0ddf8
Merge remote-tracking branch 'origin/test' into feat/auto-pr
plind-junior Jun 25, 2026
cb8af26
test(crystallize): make partial-failures test username-independent
plind-junior Jun 25, 2026
4357456
Merge pull request #269 from vouchdev/feat/auto-pr
plind-junior Jun 25, 2026
5e43776
docs(readme): emphasise gittensor (sn74) template
plind-junior Jun 25, 2026
26630cd
Merge pull request #270 from vouchdev/docs/gittensor-readme
plind-junior Jun 25, 2026
f2754cd
docs(dual-solve): add design spec and implementation plan
plind-junior Jun 25, 2026
1a72550
feat(dual-solve): scaffold module, issue-ref parsing, engine check
plind-junior Jun 25, 2026
5811614
docs(dual-solve): switch plan to import-as-used to keep ruff green
plind-junior Jun 25, 2026
ca8f114
feat(dual-solve): fetch issue title/body via gh
plind-junior Jun 25, 2026
634d951
feat(dual-solve): repo-root, kb grounding, shared fix prompt
plind-junior Jun 25, 2026
d80b534
feat(dual-solve): run one engine in an isolated worktree
plind-junior Jun 25, 2026
d066257
fix(dual-solve): never let an engine crash escape run_candidate
plind-junior Jun 25, 2026
65dcc98
feat(dual-solve): record the winning solution as gated proposals
plind-junior Jun 25, 2026
23cff46
docs(dual-solve): sync task 5 plan to existing list_proposals api
plind-junior Jun 25, 2026
391346c
feat(dual-solve): orchestrate both engines, finalize the winner
plind-junior Jun 25, 2026
5a2c6cc
feat(dual-solve): add the dual-solve cli command
plind-junior Jun 25, 2026
b250786
docs(dual-solve): sync task 7 plan to committed cli reality
plind-junior Jun 25, 2026
96be643
docs(changelog): note vouch dual-solve
plind-junior Jun 25, 2026
988b2a4
fix(dual-solve): ascii-coerce claim text so non-ascii titles can't co…
plind-junior Jun 25, 2026
a79efd9
Merge pull request #271 from vouchdev/feat/dual-solve
plind-junior Jun 25, 2026
14a7315
feat(dual-solve): report phase progress while engines run
plind-junior Jun 26, 2026
997850e
docs(dual-solve-web): design spec for the web spa runner
plind-junior Jun 26, 2026
146262e
docs(dual-solve-web): implementation plan for the runner spa
plind-junior Jun 26, 2026
65911b8
docs(dual-solve-web): vep for the web runner surface
plind-junior Jun 26, 2026
9f3c33e
feat(dual-solve-web): gate + spa shell route behind --allow-dual-solve
plind-junior Jun 26, 2026
bd287dc
feat(dual-solve-web): run endpoint, job model, ws progress bridge
plind-junior Jun 26, 2026
7bac9fc
fix(dual-solve-web): single-flight blocks only in-flight jobs, not ready
plind-junior Jun 26, 2026
d9df086
feat(dual-solve-web): choose endpoint finalizes and proposes to kb
plind-junior Jun 26, 2026
a6de7f6
fix(dual-solve-web): test the not-ready guard, broadcast choose error…
plind-junior Jun 26, 2026
0aa6687
feat(dual-solve-web): the buildless vue spa (run, diff panes, choose)
plind-junior Jun 26, 2026
78065de
docs(dual-solve-web): changelog entry for the runner spa
plind-junior Jun 26, 2026
1c823db
test(dual-solve-web): pin the gate-off invariant; note prepare leak p…
plind-junior Jun 26, 2026
448fa5c
feat(dual-solve): run agents in docker sandbox
plind-junior Jun 26, 2026
cd0aae6
Merge pull request #272 from vouchdev/feat/dual-solve-web
plind-junior Jun 26, 2026
6d78464
fix(dual-solve): use vouch sandbox image name
plind-junior Jun 26, 2026
0938a18
feat(web): split the landing page into a shared-asset multi-page site
plind-junior Jun 26, 2026
f387ef7
Merge pull request #273 from vouchdev/feat/web-landing
plind-junior Jun 26, 2026
8cf8f55
fix(dual-solve): return changed file metadata
plind-junior Jun 26, 2026
79e1e76
Merge pull request #276 from vouchdev/fix/dual-solve-changed-files
plind-junior Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: install
run: |
python -m pip install --upgrade pip
pip install -e '.[dev]'
pip install -e '.[dev,web]'

- name: lint
run: python -m ruff check src tests
Expand Down
39 changes: 39 additions & 0 deletions .github/workflows/eval.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: eval

# Gate retrieval quality: score kb.context against the committed labeled set
# and fail on a P@5 regression beyond tolerance vs eval/baseline.json. Runs
# only when retrieval code changes.
on:
pull_request:
paths:
- "src/vouch/embeddings/**"
- "src/vouch/context.py"
- "src/vouch/eval/**"
- "eval/**"

jobs:
recall:
name: recall eval
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip

- name: install
run: |
python -m pip install --upgrade pip
pip install -e '.[dev]'

- name: build fixture index
working-directory: eval/fixture-kb
run: python -m vouch.cli reindex

- name: recall eval (fail on P@5 regression > 5%)
working-directory: eval/fixture-kb
run: >-
python -m vouch.cli eval recall ../queries.jsonl
--k 5 --baseline ../baseline.json --max-regression 0.05
86 changes: 86 additions & 0 deletions .github/workflows/install-sh.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: install-sh

# Validates install.sh on every push that touches it:
# * shellcheck (lint)
# * POSIX-syntax check via dash
# * end-to-end smoke run on a fresh ubuntu-latest — installs the published
# vouch-kb wheel via pipx and verifies `vouch --version`
#
# The smoke run intentionally exercises the published PyPI artifact, not the
# in-repo source, so we catch installation breakage that doesn't show up in
# the regular pytest suite (e.g. a stale [web] extra reference).
#
# Supply-chain notes: this workflow pins third-party actions to their full
# commit SHA (the comment marks the human-readable tag). The rest of the
# repo's workflows still use tag pins — a sweep of ci.yml / release.yml /
# schema-check.yml to match this pattern is a worthwhile follow-up but
# kept out of this PR to avoid churning unrelated CI.

on:
push:
branches: [main, release/*]
paths:
- "install.sh"
- ".github/workflows/install-sh.yml"
pull_request:
paths:
- "install.sh"
- ".github/workflows/install-sh.yml"
workflow_dispatch:

# Least-privilege at the workflow level; the smoke job needs nothing
# beyond reading the checked-out repo. Jobs that need more bump it up
# explicitly.
permissions:
contents: read

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
# Don't leave the token sitting in .git/config after checkout —
# a leaked credentials file would otherwise allow pushing back.
persist-credentials: false

- name: shellcheck
run: |
sudo apt-get update -qq
sudo apt-get install -y shellcheck dash
shellcheck --version
shellcheck install.sh

- name: posix syntax (dash -n)
run: dash -n install.sh

smoke:
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false

- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: "3.12"

- name: --help works
run: sh ./install.sh --help

- name: end-to-end install + smoke
run: |
set -e
sh ./install.sh --no-claude
# pipx's bin dir isn't necessarily on PATH for the verification
# step — re-export from pipx itself. Query via the pipx CLI: the
# runner ships pipx as a standalone binary that's on PATH but NOT
# importable as `python -m pipx`, so that form fails with
# "No module named pipx". Fall back to the conventional
# ~/.local/bin (pipx's default PIPX_BIN_DIR) if the query fails.
PIPX_BIN=$(pipx environment --value PIPX_BIN_DIR 2>/dev/null || true)
[ -n "$PIPX_BIN" ] || PIPX_BIN="$HOME/.local/bin"
export PATH="$PIPX_BIN:$PATH"
vouch --version
vouch capabilities | head -20
42 changes: 0 additions & 42 deletions .github/workflows/release.yml

This file was deleted.

181 changes: 181 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
# Agents working with vouch

Entry document for any AI coding agent reading this repository — Cursor, Codex,
OpenClaw, Aider, Continue, JetBrains AI, an LLM fetching the raw URL, anything
that isn't Claude Code. (Claude Code reads [`CLAUDE.md`](./CLAUDE.md) instead;
the two files complement each other.)

If your task is to **work on the vouch codebase itself**, read this file and
then `CLAUDE.md`. If your task is to **use vouch from inside another
project**, read [`README.md`](./README.md) for install + concepts and
[`docs/getting-started.md`](./docs/getting-started.md) for the agent-side
loop.

If you're an **OpenClaw** plugin loader, the plugin manifest is at the repo
root: [`openclaw.plugin.json`](./openclaw.plugin.json). It declares vouch's
MCP wiring, the four slash commands, the trust boundary (write tools
review-gated, lifecycle ops audit-logged, remote-caller filesystem
confined), and the config schema (`kb_path`, `agent`, `transport` — no
secrets). No additional wiring is required to surface vouch's `kb.*`
surface inside an OpenClaw deployment.

## What vouch is, in one paragraph

Vouch is a git-native, review-gated knowledge base for LLM agents. Agents
propose writes via an MCP server (or a JSONL pipe); a human approves each
proposal with `vouch approve`. Approved artifacts land as YAML claims and
markdown pages under `.vouch/` — plain files that diff cleanly in PRs and
travel as a tarball bundle. The CLI is `vouch`; the PyPI distribution is
`vouch-kb`; supported Python versions are 3.11, 3.12, 3.13.

## Install (1 minute)

```bash
curl -fsSL https://raw.githubusercontent.com/vouchdev/vouch/main/install.sh | sh
```

Or, deterministically from a clone (the path you want when contributing):

```bash
git clone https://github.com/vouchdev/vouch.git
cd vouch
python3 -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
```

## Read in this order

1. **This file** — entry, install, trust boundary, common tasks.
2. [`CLAUDE.md`](./CLAUDE.md) — orientation for working on the repo:
architecture, conventions, ship rules, voice. Read even if you aren't
Claude Code; the conventions are universal.
3. [`README.md`](./README.md) — the user-facing pitch, install, quick start,
full CLI surface, MCP / JSONL method list.
4. [`SPEC.md`](./SPEC.md) — the canonical protocol description: `.vouch/`
layout, object model, `kb.*` method shapes, review-gate state machine.
Authoritative when in doubt.
5. [`ROADMAP.md`](./ROADMAP.md) — what's planned for 0.2 and 0.3. Don't
propose features that are already scoped here.

For everything else, see [`llms.txt`](./llms.txt) — the LLM-readable map of
every document in the repo.

## Trust boundary

Every `kb.*` write tool goes through the review gate. There is no "trusted
agent shortcut" except an opt-in `review.approver_role: trusted-agent` in
the KB's `config.yaml` (off by default). Concretely:

* `kb.propose_*` writes a YAML file to `.vouch/proposed/` — never to
`.vouch/claims/` directly.
* `kb.approve` requires `approved_by != proposed_by` unless the trusted
shortcut is on.
* Lifecycle ops (`kb.supersede`, `kb.contradict`, `kb.archive`,
`kb.confirm`) mutate durable artifacts because they're metadata about
reviewed knowledge, not new assertions. They still land an audit event.
* The MCP server, the JSONL server, and the CLI all share the same
storage + proposals + audit code path. The web review-ui (PR #195,
pending) is a *viewport*, not a parallel data path.

If you're proposing a fix that bypasses the gate, you're proposing the
wrong fix.

## Common agent tasks

### Use vouch from another project (the normal case)

```bash
cd /path/to/your/project
vouch init # create .vouch/
vouch install-mcp claude-code # …or cursor, codex, continue, cline, windsurf, zed
# Restart the agent host. kb.* tools + slash commands now available.
```

`vouch install-mcp <host>` is manifest-driven: every supported host has a
single-file declaration under `adapters/<host>/install.yaml`. To add a
host, copy an existing manifest, point it at the host's config paths, and
open a PR.

### Contribute a bug fix or feature

```bash
git fetch origin main
git switch -c <type>/<topic> origin/main
# … edit …
.venv/bin/python -m pytest tests/ -q --ignore=tests/embeddings
.venv/bin/python -m mypy src
.venv/bin/python -m ruff check src tests
git add <specific files>
git commit -m "<type>(<scope>): <≤72-char summary>"
git push -u origin <branch>
```

Commit type vocabulary: `feat | fix | refactor | test | docs | chore |
perf | ci | style | build | revert`. Body in lowercase prose, multi-line
ok, **no `Co-Authored-By: Claude` trailer** — see
[`CONTRIBUTING.md`](./CONTRIBUTING.md). CI runs the same three commands.

### Add a new `kb.*` method

Every kb method must be registered in **four** places — the
`test_capabilities` test catches drift:

1. `src/vouch/server.py` — the MCP tool function
2. `src/vouch/jsonl_server.py` — the matching handler + `HANDLERS` map entry
3. `src/vouch/capabilities.py` — append to `METHODS`
4. `src/vouch/cli.py` — the human-facing CLI mirror

Add a test in `tests/test_<method>.py` that asserts the JSONL envelope
shape (`{id, ok, result}` for success, `{id, ok: false, error}` for
failure).

### Add a new install-mcp host

```
adapters/<host>/
install.yaml # tier T1..T4 declarations
.mcp.json # T1 — MCP wire (project-local)
CLAUDE.md.snippet # T2 — fenced append into the host's instruction file
.claude/commands/* # T3 — slash commands (when the host supports them)
.claude/settings.json # T4 — hooks + auto-allow lists
```

The writer is `src/vouch/install_adapter.py`. Strict YAML manifest
validation; semantic validation (does the `dst` path make sense for that
host?) is deliberately deferred.

## Before shipping

```bash
make check # the convenience wrapper
# expanded:
.venv/bin/python -m pytest tests/ -q --ignore=tests/embeddings
.venv/bin/python -m mypy src
.venv/bin/python -m ruff check src tests
```

`mypy src` is the gate that misses locally and fails CI; never push
without it.

## Privacy / disclosure

* Never paste a real Bearer token, GitHub PAT, or PyPI token into a
commit, an issue, or a PR body. Use environment variables or
`.env.local` (gitignored).
* Never propose claims with real customer names, internal URLs, or secret
identifiers in a public KB. Use generic placeholders.
* Security issues go to the contact listed in [`SECURITY.md`](./SECURITY.md);
do not file public issues for vulnerabilities.

## Hard rules

* **The review gate is non-negotiable.** Bypassing it is a rejected PR,
not a feature.
* **Tests must be added with the change**, not after. CI red on a PR is a
reviewer-blocking condition.
* **No `Co-Authored-By: <AI tool>` trailers** in commits — the user has
been explicit about this.
* **No silent CHANGELOG omissions** when you add a user-visible feature —
update `CHANGELOG.md` under `[Unreleased]` in the same PR.

If your task contradicts any rule above, stop and ask before continuing.
Loading
Loading