chore(release): 5.11.0 — the intent approval gate is a new capability

Version 5.11.0 in every file that carries it: .claude-plugin/plugin.json,
package.json, package-lock.json (both entries; they said 5.10.0, drift
from before 5.10.1), the README badge, and a CHANGELOG entry for
everything since v5.10.1. Chose a minor bump because /trekplan gains a
halt (a new capability, additive schema). Handover 1 changes for
downstream producers: their briefs stop at /trekplan until approved.

No tag and no catalog bump here: release-plugin.mjs runs in the operator's
push round.

Suite after git add: 1234 tests, 1232 pass / 0 fail / 2 skip in 2 of 3
runs. The third failed only the known timing test otel SC #14 tail-latency
(877 ms against an 800 ms ceiling), which this order leaves alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-23 11:05:16 +02:00
commit ea66a98c60
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
5 changed files with 68 additions and 5 deletions

View file

@ -1,7 +1,7 @@
{
"name": "voyage",
"description": "Voyage — brief, research, plan, execute, review, continue. Contract-driven Claude Code pipeline. /trekbrief, /trekplan, and /trekreview each end by building a self-contained operator-annotation HTML (scripts/annotate.mjs, modelled on claude-code-100x): select text or click any element, pick intent (Fiks/Endre/Spørsmål), write comment, copy structured prompt, paste back, Claude revises the .md.",
"version": "5.10.1",
"version": "5.11.0",
"author": {
"name": "Kjell Tore Guttormsen"
},

View file

@ -4,6 +4,69 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## v5.11.0 — 2026-09-23 — /trekplan plans only against an approved intent
### Added
- **Intent approval gate.** `/trekplan` (both `--brief` and `--project`, also
`--quick`, no override flag) runs `lib/validators/intent-approval.mjs --check`
before it reads the brief. It **halts** on `BRIEF_INTENT_NOT_APPROVED`,
`BRIEF_INTENT_APPROVAL_STALE` or `BRIEF_INTENT_APPROVAL_INVALID`, and an
approval check that cannot run halts too. The marker is `intent_approved_hash`
(sha256 over the normalized `## Intent` + `## Goal`) plus `intent_approved_at`.
Editing either section after approval makes it stale. `/trekbrief` Phase 4h
shows Intent and Goal verbatim and stamps only on "Approve".
`/trekbrief --approve <project-dir | brief-file>` does that step alone for a brief
from any producer. A `## ` line inside a code block or HTML comment is not a
heading, and each section must appear exactly once. The marker is a trace that the
step ran against this text, not a signature: any session on the same machine can
stamp.
- **`scripts/yardstick.mjs`** prints Voyage's three numbers (use, trust,
interrupts) with the denominator and the source each one was read from. It
exits non-zero while any number cannot be counted, and today it is RED.
- **`scripts/end-state-gate.mjs`** counts the distance to "Voyage is finished"
(defects, experiments, dormant agents, open decisions). It is fail-closed: an
entry whose check cannot run counts as open.
- **Plugin eval suite (`evals/`, `docs/proevesett.md`)**: eight cases run as
real `claude -p` children with only Voyage loaded, deterministic graders,
and each expectation committed before its first run. Measured stability: every
case 5 of 5 over three full runs, and the sequencing-gate case 15 of 15.
- `lib/stats/stats-append.mjs`: `/trekbrief` and `/trekplan` stats records
land in the data dir the yardstick reads when `CLAUDE_PLUGIN_DATA` is empty,
and a failed write is reported, not skipped silently. `intent_approved`
reaches the OTel field allowlist.
### Changed
- **Handover 1 (PUBLIC CONTRACT): a brief from any producer now stops at
`/trekplan` until its intent is approved.** The schema change is additive (two
optional fields, no `brief_version` bump). The requirement sits in the
consumer. See `docs/HANDOVER-CONTRACTS.md` §Handover 1.
- The arg parser has a CLI. `/trekreview` runs it with `$ARGUMENTS` and relays
`Error: --project <dir> is required.` from code (it passed `"$@"`, which the
Bash tool never has, so the parser never ran).
### Fixed
- `/trekexecute` runs the plan's `## Verification` on the single-session path
too (D-03), and `/trekreview` runs the brief's success-criteria commands and
gives the reviewer the result (D-04), through `lib/verification/criteria-runner.mjs`.
- The criteria runner screens with an **allowlist** of test runners, not a
denylist, and refuses writes a brief may not perform. A backticked span runs only
when it is a command, and the runner reads the repo's own plan format.
- The end-state gate can no longer be turned green by editing its own ledger,
and a behaviour probe must fell a stub, not just name a test.
- The review gold-scorer key separator is written as an escape, not a raw
NUL byte. The `/trekresearch` swarm engine points only at the External agents block.
- Docs no longer claim an opus orchestrator: the commands follow the session model.
### Removed
- `/trekplan`'s "execute with team" path: Claude Code 2.1.178 removed
TeamCreate/TeamDelete, so it always fell back to sequential execution.
- `TaskCreate`/`TaskUpdate` from `/trekplan`'s tool lists. Claude Code 2.1.233
stopped offering them on current models, and no prose called them.
## v5.10.1 — 2026-09-03 — gemini-bridge dropped; fail-closed review verdicts
### Removed

View file

@ -2,7 +2,7 @@
Contract-driven Claude Code pipeline: brief, research, plan, execute, review. Agent swarms, research triangulation, adversarial review, multi-session resumption.
![Version](https://img.shields.io/badge/version-5.10.1-blue)
![Version](https://img.shields.io/badge/version-5.11.0-blue)
![License](https://img.shields.io/badge/license-MIT-green)
![Platform](https://img.shields.io/badge/platform-Claude%20Code-purple)

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "voyage",
"version": "5.10.0",
"version": "5.11.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "voyage",
"version": "5.10.0",
"version": "5.11.0",
"license": "MIT",
"engines": {
"node": ">=18"

View file

@ -1,6 +1,6 @@
{
"name": "voyage",
"version": "5.10.1",
"version": "5.11.0",
"private": true,
"description": "Voyage — brief, research, plan, execute, review, continue. Contract-driven Claude Code pipeline. /trekbrief, /trekplan, and /trekreview each end by building a self-contained operator-annotation HTML (scripts/annotate.mjs, modelled on claude-code-100x): select text or click any heading/paragraph/list-item, pick intent (Fiks/Endre/Spørsmål), write comment, copy structured prompt, paste back, Claude revises the .md.",
"type": "module",