-
v5.10.1 Stable
released this
2026-09-03 18:29:53 +00:00 | 311 commits to main since this releaseRemoved
gemini-bridgeis dropped from the pipeline (operator directive). The
agent file is deleted and every live surface that could still steer a run
toward it is cleared:commands/trekresearch.md(the Bridge-agent launch
block, the--localhelp text, the high-effort always-on pair, the stats
record, the graceful-degradation list),commands/trekplan.md,
commands/trekbrief.md,agents/research-orchestrator.md(mode table,
agent table, prompting block, summary line),README.md(feature prose, mode
table, agent prose, the mermaid EXTERNAL node, the* = conditionallegend,
the optional-MCP requirement, the--localsection),CLAUDE.md,
settings.json(the wholetrekresearch.geminiBridgeblock),
templates/research-brief-template.md(the Gemini Second Opinion section
and the sources-tablegeminitype),templates/trekbrief-template.md,
docs/architecture.md,docs/command-modes.md./trekplanhigh-effort Adversarial Pass 2 degrades explicitly. It now
emits a## Adversarial Pass 2 (v5.1.1 high-effort)section whose status
reads "unavailable, skipped", rather than failing or vanishing: a
high-effort plan carrying no Pass 2 marker is indistinguishable from one whose
Pass 2 crashed./trekresearchhigh effort forces onlycontrarian-researcher
always-on, which remains the complete adversarial coverage.- Not removed:
gemini_usedsurvives as a vestigial/trekresearchstats
field pinned tofalse. Dropping it would break the observability export
schema for existing consumers, and no consumer asked for that. - Agent inventory: 24 → 23 files (20 spawnable + 3 orchestrator reference
docs;synthesis-agentstill dormant). Counts reconciled inREADME.mdand
CLAUDE.md; the<example>-block floor in
tests/lib/agent-frontmatter.test.mjsmoves 34 → 32 because an agent
legitimately left the inventory — not because examples went missing from a
surviving one. - Pinned by 5 new tests in
tests/lib/doc-consistency.test.mjs, including a
known-positive control asserting the historical records still do carry
gemini references — so the empty result on live surfaces is a measurement and
not a broken query. CHANGELOG entries and measurement/decision docs keep their
references deliberately: they record what a past version did.
Fixed
/trekreviewverdicts are fail-closed. A finding removed by Pass 2 or
Pass 3, and a reviewer whose payload was thrown away or never arrived, were
arithmetically identical to a finding that never existed — all three pushed
the verdict towardALLOW. Measured before the fix: a BLOCKER with a
101-character title →ALLOW; a payload carrying one ad-hocrule_keywas
skipped whole at ingest, taking a valid BLOCKER sibling with it →ALLOW.
lib/review/coordinator-contract.mjsnow splits every removal two ways —
dropped when the test refuted the finding as a claim about this codebase,
unverified otherwise — and a non-emptyunverifiedbucket, or a reviewer
inexpectedReviewersthat did not report, forbidsALLOW(verdictWARN,
withallow_blocked_bynaming why). The rule never raises a verdict: the
severity catalogue and the BLOCKER/MAJOR thresholds are untouched. New
exports:classifySuppression,REFUTING_REASONS,UNVERIFIED_REASONS;
runContractgainsunverified,missing_reviewers,
unattributable_payloadsandallow_blocked_by(suppressedstays the
union, so existing consumers keep their meaning). A payload that fails schema
without carrying areviewername is counted as unattributable rather than
reported as a reviewer called "unnamed reviewer" — naming one would invent an
agent nobody launched and double-count withexpectedReviewers.
Mirrored inagents/review-coordinator.md(Pass 2/3 fate columns, the new
§Suppression is two-valued, Pass 4 threshold table) and
commands/trekreview.md(Phase 5 reviewer accounting → STOP; Phase 6).
Driven test-first: 11 new tests intests/lib/coordinator-contract.test.mjs,
incl. a known-positive control provingALLOWis still reachable.
Docs
-
T1 §6 PoC status corrected — it was already run and declined.
docs/T1-cc26-delegated-orchestration.md§8 item 3 still claimed both the §6
synthesis-agent PoC and the §5 full bake-off were "designed but unbuilt". That
was written in S7 and falsified the same afternoon by S12, which ran the §6
PoC and recorded Δ main-context (faithful flow) = 0.0%, NEGATIVE
(docs/T1-synthesis-poc-results.md; reproduce with
node scripts/synthesis-measure.mjs). The stale wording caused the settled
PoC to be re-ordered as new work on 2026-09-02, so it is struck rather than
deleted and §6 gained an explicit RUN AND DECLINED status block. The
finding is structural, not stochastic:/trekplanPhase 5 spawns the
exploration swarm foreground (commands/trekplan.md:158,338-341), so the
6–10 outputs are already resident in main before Phase 7 begins — delegating
only the Phase-7 digest returns on top of them and evicts nothing. A saving
needs the Phase-5 delivery moved off-main, which is §5. -
§5's environment premise updated (measured 2026-09-03, CC 2.1.259). S12
recorded the live bake-off as blocked for want of anANTHROPIC_API_KEY;
claude -p --output-format stream-jsonin fact runs on subscription auth with
no API key and now emits asubagent_statsblock (spawned / max_depth /
refused) that did not exist in June — a ready-made classifier-interference
counter for §5's feasibility guard. S12's other blocker (the installed plugin
is the cache copy, so a repo-local agent is invisible toclaude -p) stands
unmeasured. This changes nothing about the §6 verdict; it lowers the cost of §5. -
/trekresearch --engine deep-research: document the real version window.
Claude Code 2.1.218 changed/deep-researchto start only when the operator
invokes it; from there the Skill tool refuses a model invocation outright with
disable-model-invocation(measured in a real--engine deep-researchrun on
2026-09-01 — the SC3 fallback toswarmheld). The engine was built against
2.1.196 and the prose still promised a path Claude Code has removed
("requires Claude Code 2.1.154+").commands/trekresearch.md(flag bullet +
pre-gate + fallback reason tokens),docs/command-modes.mdandREADME.mdnow
state the closed window2.1.154 <= CC < 2.1.218and name
disable-model-invocationas the expected fallback reason on any current CC.
The pre-gate gained an upper ceiling (still a numeric comparison, not a string
one). The flag is kept as an additive opt-in that never hard-fails; no
lib/change, no adapter-contract change, no default change, no version bump.
Pinned bytests/lib/doc-consistency.test.mjs.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
v5.10.0 Stable
released this
2026-08-18 14:49:21 +00:00 | 322 commits to main since this releasev5.10.0 — 2026-08-18 — STORM bounded research loop (default-off) + the Agent-tool
namespawn defectAdditive. Every new research mechanism ships inert:
VOYAGE_STORM_ENABLEDis
unset by default, and with it unset both new/trekresearchphases are no-ops.
The one change that affects consumers regardless of flags is the spawn rule under
Fixed — it changes how any repo should call the Agent tool.STORM bounded loop — shipped, default-off, behind a pre-registered adoption gate
/trekresearchPhase 4.5 (dimension discovery, under the existing
maxDimensions: 8ceiling) and Phase 5 (bounded multi-turn follow-up,
replacing the single follow-up pass) run only ateffort: highand only
whenVOYAGE_STORM_ENABLED=1. Unset, Phase 5 is inert because
lib/util/research-loop-cap.mjsgrants a budget of 0, and Phase 4.5 is inert
because its skip-guard reads the flag directly (it never calls the cap) — two
independent off-switches, so a bug in one does not silently activate the other.TREKRESEARCH_MAX_CONV_TURNS(default3; invalid values fall back to3)
sets turns per dimension. The total budget is that value ×maxDimensions.- New
lib/util/research-loop-cap.mjs: an append-only ledger the cap counts its
own turns from. Each turn slot is claimed withO_EXCL, so the bound survives
concurrent turns; an unreadable ledger fails closed in both modules; and
the enforcement boundary is a denial tombstone rather than the turn count, so
a crash mid-turn cannot hand back a free turn. - New
hooks/scripts/pre-agent-cap.mjs, registered as aPreToolUsehook on
WebSearch|WebFetch|Task: the budget is enforced by the harness, not by prose
in a command file.VOYAGE_DISABLE_CAP_HOOK=1switches it off.
docs/spike-pretooluse-subagent-reach.mdrecords the measured reach of
PreToolUseinto sub-agent tool calls — including where the gap is. - Five measurement fields (
unique_sources,dimensions_baseline,conv_turns,
empty_turns,dimensions_baseline_preserved) are emitted to
trekresearch-stats.jsonland allowlisted inlib/exporters/field-allowlist.mjs.
All five are counters or booleans — none carry prose or paths. scripts/storm-measure.mjs+docs/storm-measurement.md: the adoption gate,
with thresholds registered before the first measurement by design.
≥ 30 % improvement on either metric → adopt; < 15 % → decline; an empty arm is
insufficient-data, not a decline. Decline is a no-op — the mechanism simply
stays default-off; adopt is one constant. No measurement has been run yet.
Added — outbound query privacy gate
lib/validators/query-privacy-gate.mjsinspects a research query before it
leaves the machine, in the same two-tier shape as the existing SSRF gate: a
WARN tier (absolute filesystem paths, repo-internal identifiers) that
--soft/VOYAGE_QUERY_PRIVACY_ALLOW=1can override, and a HARD-BLOCK tier
(secret-shaped tokens) that nothing overrides. Called only from the two new
high-effort steps; the existing single-pass path is unchanged.
Fixed — the Agent tool's
nameparameter silently breaks a subagent's return channel- Consumers of this pipeline should read
docs/agent-return-channel-defect.md.
Passingnameto the Agent tool does not label a subagent — it changes what is
spawned:taskKind: "in_process_teammate"/spawnDepth: 0instead of a real
subagent (spawnDepth: 1). A teammate's final text is not a return value; it
reaches the parent only if the teammate itself callsSendMessage(to: "main").
Voyage's reviewer agents carrytools: [Read, Glob, Grep]— noSendMessage—
so when named they are structurally unable to answer. No error, no warning.
Measured numerators (66-line target): named without explicitSendMessage
0/5 returned · named + explicitSendMessage1/1 · unnamed 3/3 ·
work actually performed while named 5/5 — only delivery fails, and the
output is recoverable from
~/.claude/projects/<project>/<session>/subagents/agent-*.jsonl.
Independently confirmed at 3730 lines / 277 KB byakashic-intelligence
(4/4 correct final text on disk); the returning arm above 66 lines remains
inferred rather than observed, and the doc says so. - The four spawning commands (
trekbrief,trekplan,trekresearch,
trekreview) now state the rule at their spawn sites and name the mechanism.
trekexecutespawns nothing and is excluded. Thedoc-consistencytest
derives the spawning set from the command files, so the pin cannot go
vacuous when a command starts or stops spawning.
Fixed — hook and validator hardening
- The destructive-command rule anchored on command position rather than any
substring (a path containing a blocked word no longer trips it), and the
bypasses that anchoring itself opened are closed. - The secret-detection validator hard-blocks token formats the run-length
patterns missed. - The exporter allowlist covers
/trekresearch'senginefield, with the JSONL
schema fixture pinned to agree — a new stats field is otherwise dropped
silently at export.
Docs
- README: first screen aligned with the org repo standard, complete AI
disclosure, and the Gemini MCP tool contract described inline instead of via a
dead cookbook link. Governance keeps one canonical file, not a local copy. /trekresearch: STORM mechanisms documented across four surfaces; the
Independence crossing's two risks split, each naming its own control.docs/*.pdfis gitignored —originis a public mirror and must never carry
operator PDFs.
Tests
- Suite baseline 832 (830 pass / 0 fail / 2 skip) → 1013 (1011 / 0 / 2).
New coverage: research-loop-cap (including the concurrency and fail-closed
paths), the cap hook's crash-time marker branches, the query privacy gate, the
measurement harness's decision rule, and the spawn-rule doc pin.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
9 downloads
-
v5.9.1 Stable
released this
2026-07-02 23:11:25 +00:00 | 361 commits to main since this releasePatch, no functional additions.
Fixed
/trekendsessionwas unusable in every invocation: two of its three!`...`eager-exec blocks (Phase 3 atomic-write, Phase 4 validator call) contained unresolved runtime placeholders (<project-dir>etc.). The harness executes eager-exec blocks at command LOAD time, so zsh parsed<project-dir>as input redirection and the command aborted before the model saw a single instruction. Both blocks are now plain runtime Bash fences with the{curly}placeholder convention (shell-inert), matchingtrekplan.md/trekresearch.md. The Phase 1 discovery block (self-contained) keeps its legitimate eager-exec prefix;trekcontinue.md's discovery block was runtime-verified unaffected.- Latent secondary bug in the same blocks: cwd-relative plugin paths (
lib/validators/...,./lib/util/atomic-write.mjs) would have failed withERR_MODULE_NOT_FOUNDeven after substitution, since the Bash cwd is the user's repo. Both now use absolute${CLAUDE_PLUGIN_ROOT}paths per the existing command convention (Node ESM accepts absolute-path import specifiers — verified on Node 18+).
Added
- Regression guard
tests/commands/trekendsession.test.mjs: scans every!`-block incommands/*.mdfor unresolved<angle>/{curly}placeholders (this bug class is silent until first invocation), plus structure tests pinning Phase 3/4 as runtime Bash with${CLAUDE_PLUGIN_ROOT}paths and exactly one surviving eager block. Suite baseline 828 → 832 (830 pass / 0 fail / 2 skip).
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
4 downloads