Skip to content

Releases: tc3oliver/version-aware-code-mcp

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 09:11

Additive. Nothing breaks.

Every default is unchanged, every existing call site compiles untouched, and a
deployment that changes nothing behaves exactly as v0.7.0 did. Upgrading is safe
without reading further.

The six operation budgets are now adjustable by a Go embedder

v0.7.0 gave every query-plane operation a budget reported as OPERATION_TIMEOUT.
Those budgets were package-private variables that only in-package tests could
reach, and a caller's own context deadline can only ever shorten an operation —
so an embedder whose repository was bigger than the defaults assume had no
workaround at all, only the option of waiting for a new release.

src   := git.New(cfg, git.WithHistoryBudget(10*time.Minute))
graph := cbm.New(cfg, cbm.WithTraceBudget(5*time.Minute))
search := zoekt.New(cfg, zoekt.WithRequestBudget(time.Minute))
res   := resolver.New(cfg, resolver.WithResolveBudget(time.Minute))
Option Default (unchanged)
git.WithReadBudget 30s
git.WithDiffBudget 30s
git.WithHistoryBudget 2m
zoekt.WithRequestBudget 30s
cbm.WithTraceBudget 2m
cbm.WithConnectTimeout 2m
resolver.WithResolveBudget 30s

git.WithHistoryBudget is the one most likely to need raising: git log -S is a
pickaxe over every commit in range, and a history large enough to outrun two
minutes is a real repository asking a real question, not a wedged git.

cbm.WithConnectTimeout bounds a session start rather than a query, but it is
spent in full before the first trace can begin, so an embedder whose
codebase-memory-mcp indexes on startup has the same reason to raise it.

These options are not an entry point to unlimited

A duration of zero is rejected, and so is a negative one. Only a positive
duration is accepted, and the rejection is a panic from the constructor, at the
moment the bad value is passed rather than at the first call that would have used
it — the argument comes from an embedder's own source, very nearly always a
literal, so a non-positive one is a bug in that source and not a state the
running server can be in.

Zero is called out because it is the most common misreading of an API shaped like
this, and because internally it very nearly works: the budget machinery treats a
duration of zero or less as no budget at all, so a silently accepted
WithHistoryBudget(0) would be the documented way to run an unbounded
git log -S. An unbounded query is precisely what the v0.7.0 budgets exist to
prevent. If a budget is too small, raise it to a number; there is deliberately no
way to remove it.

No configuration surface

This is the Go API only. No environment variable, no YAML key, no timeouts:
block — how a downstream exposes these to its operators is the downstream's
decision, and baking a config shape into this module would prejudge it.

Tests take the same path

Nothing assigns to a package-level budget any more; the old variables are
unexported constants and the test helpers that used to mutate them are gone.
Every test that needs a short budget constructs its provider with the same option
an embedder would, so the path an embedder takes is the one CI exercises on every
run, rather than a test-only path beside it that could drift.


Full entry in
CHANGELOG.md.

Full changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 08:13

Read this before upgrading: an error code changed meaning

A Zoekt request that runs out of time now reports OPERATION_TIMEOUT. It
reported SEARCH_PROVIDER_UNAVAILABLE, and had since v0.1.0, because the budget
was an http.Client timeout — an error indistinguishable from a connection
failure. A Zoekt that accepted the request and went quiet was therefore reported
as a Zoekt that could not be reached.

connection refused, bad response, HTTP failure  → SEARCH_PROVIDER_UNAVAILABLE
vacmcp's own request budget expired             → OPERATION_TIMEOUT   (was SEARCH_PROVIDER_UNAVAILABLE)
the caller cancelled or its deadline expired    → the raw context error

The duration is unchanged at 30 seconds; what changed is who owns it. A client
that branches on SEARCH_PROVIDER_UNAVAILABLE to mean "slow or absent" has to be
updated.
This is made now, before v1.0.0, rather than leaving Zoekt permanently
inconsistent with git and codebase-memory-mcp.

OPERATION_TIMEOUT is also a failure mode every query-plane operation can now
produce where none of them could before. Handle it wherever you handle errors.

Operation Tools Budget
Context resolution every tool call 30s
Source read get_code 30s
Diff compare_code 30s
History walk search_history 2m
Graph traversal trace_calls, compare_calls 2m
Search request search_code 30s

Budgets compose: a search_history call spends the resolve budget and then the
walk budget, on separate clocks. They are compile-time constants with no
configuration surface in this release. Management-plane operations — repo add,
repo sync, context create — get no budget at all and still run as long as
they need.

Also required: codebase-memory-mcp 0.11.0

The oldest supported codebase-memory-mcp is now 0.11.0; vacmcp doctor
reports anything older as a version mismatch. The rule from here is that the
supported floor equals the real-engine baseline CI pins. Upgrade the engine
together with vacmcp, not after.

A wrong answer this release fixes

A graph past the fiftieth project was reported as missing. The management plane
confirmed a codebase-memory-mcp graph by listing projects and looking for the one
it had just built, but read only the first page of that answer. 0.11.0 paginates
list_projects at 50, so on an installation holding more than fifty projects the
verification of a graph that existed and was queryable returned "not found" — a
wrong answer, not a slow one. The call now walks every page. 0.10.1 did not
paginate, so the defect was unreachable before the engine upgrade and is fixed in
the same release that could first expose it.


The full entry, including the shutdown and cancellation fixes, the new
search_history MCP tool and the test and documentation work, is in
CHANGELOG.md.

Full changelog: v0.6.0...v0.7.0

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 06:22

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 14:01

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 03:30

What's Changed

  • v0.4.0: Version Intelligence (compare_code, compare_calls) by @tc3oliver in #15

Full Changelog: v0.3.1...v0.4.0

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 14 Aug 17:38

What's Changed

  • fix: pin Go 1.26.6 for 5 reachable stdlib CVEs by @tc3oliver in #14

Full Changelog: v0.3.0...v0.3.1

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 18:19
1fe9245

What's Changed

  • v0.2.0 pre-release hardening: context remove crash safety, Windows Managed Mode limits by @tc3oliver in #3
  • CI: cancel-in-progress for superseded PR runs by @tc3oliver in #4
  • v0.2.0 release blocker: managed server lifecycle consistency (snapshot-at-start) by @tc3oliver in #5
  • test(ci): split real-engine tests behind //go:build integration by @tc3oliver in #6
  • ci: split the chain into fast, engine and full gates by @tc3oliver in #7
  • test(cbm/zoekt): share one immutable installation across query-only tests by @tc3oliver in #9
  • ci: run the full gate nightly, and have it report what it cost by @tc3oliver in #10
  • perf(ci): cache the pinned tool installs, keyed on the pins themselves by @tc3oliver in #11
  • docs(changelog): cut v0.2.0 from Unreleased by @tc3oliver in #12

Full Changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 05:20

What's Changed

  • docs: note that the YAML dependency is a release candidate by @tc3oliver in #1
  • Release pipeline, build-time version, and a persistent CBM session by @tc3oliver in #2

New Contributors

Full Changelog: https://github.com/tc3oliver/version-aware-code-mcp/commits/v0.1.0