chore(release): 6.3.0 — The executor is coupled to the review gate, three skills, and a drilled release runbook

Version 6.3.0 in plugin.json, package.json, package-lock.json and the
README badge; the 6.3.0 CHANGELOG section with its Doors list and the
Known issues for 6.3.1 (release review round 7: WARN, 0 BLOCKER, 12 MAJOR;
the operator chose to release with it on 2026-10-11).

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

View file

@ -1,7 +1,7 @@
{ {
"name": "voyage", "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, pencil-toggle annotation pattern): select text or click any element, pick intent (Fiks/Endre/Spørsmål), write comment, copy structured prompt, paste back, Claude revises the .md.", "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, pencil-toggle annotation pattern): 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": "6.2.0", "version": "6.3.0",
"author": { "author": {
"name": "Kjell Tore Guttormsen" "name": "Kjell Tore Guttormsen"
}, },

View file

@ -4,6 +4,157 @@ 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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## v6.3.0 — 2026-10-11 — The executor is coupled to the review gate, three skills, and a drilled release runbook
Wave 2 of the practice build (five orders, merged 2026-10-09) and the fix round
after it, which closes finding 1 of the test repo's third trial: a step of only
tests can never be proven red. Every fix began with a test that failed on the
old code. Suite 2194 (2192 pass, 0 fail, 2 skipped).
Two changes ask something of users (see Doors): `/trekexecute` now refuses a
plan that has no logged approval for its current content, and a check in a
brief or plan runs with no shell, as plain words with a runner's read-only
options. Plan 1.7/1.8, brief
2.0–2.2 and review 1.0/1.1 files still validate; the new step fields are
optional.
### Doors
- one-way: `/trekexecute` refuses a plan whose logged approval does not cover its current sha256 (K2) — a plan written before 6.2.0, written by hand, or edited after its approval stops at Phase 1; run `/trekplan --project <dir>` and answer "Approve" (from 6.3.0).
- two-way: `/trekexecute` reviews by itself in the closing run (`/simplify` → `/trekreview` → verdict gate, K7) and keeps the main merge closed on BLOCK or an undecided verdict; step check (K9), `Regression:` (K10), architecture rules (K5) and plan-file sweep (K6) run at step end and after the last step — a revert restores the old executor; nothing to do for users.
- two-way: the approval guard refuses a merge into main, a push, a tag or publish and destructive git in the permission mode that shows no prompts — a revert lets them through again; nothing to migrate.
- two-way: `progress-validator` rejects the runner's `exitCode` in `plan_verification.failed_criteria` (C15) — the executor's own prose always wrote `exit_code`.
- two-way: skills workshop — form check, model-free routing test, `test-first` and `debugging` preloaded into `step-implementer` — new files and one `skills:` line; a revert removes them.
- two-way: `researching-sources` skill, preloaded by the five web-search agents and named by `/trekresearch` — the agents' copied rule text moved into the skill; a revert puts it back.
- two-way: `Regression:` (K10) and `On failure:` action words (K11) — an optional field and a warning; plans without them validate as before.
- two-way: trial 2's minor fixes (B8, B11, B12, C13, C14, C16, C17) — checks, prose and agent text; a revert restores the old behaviour.
- two-way: release check and runbook — new files; a revert removes them, and nothing else reads them.
- two-way: tests-only steps (`PLAN_STEP_TESTS_ONLY`, red-proof `--plan/--step` → `tests_only`, which also reads the step's own diff, executor routes them to the plan) — a warning and an optional flag; a revert removes them, plans stay valid.
- two-way: timing tests under load (hook helper kill limit 30 s, SC #14 fastest of three against 800 ms) — test-only.
- two-way: example plan `On failure:` lines open with a K11 word, and its verbose-content test moves into the step that wires the output (6 steps, progress.json follows) — text in an example.
- two-way: `/trekreview` saves the reviewer's whole answer for the findings check and names `FINDING_PROSE_LINE_OUT_OF_RANGE` — command text.
- two-way: the criteria runner's commands run without `NODE_TEST_CONTEXT` — a false green under `node --test` is now red; nothing to do for users.
- two-way: the fixes from the release review of 6.3.0 (rounds 1-6) — checks and prose; `progress.json` may now say `simplify: "revert-refused"` (an optional value); a revert restores the old behaviour.
- one-way: a check in a brief or plan (criteria, `Regression:`, proof of red, the done line, the test lock) runs with no shell: its words reach the runner as written, so only plain words run (no quote, backslash, `$`, brace, or `~`/`@` at a word's start; a glob only for `node --test` on Node 21 and later; no path that climbs out with `..` or starts at `/`, git included; a trailing `# comment` in a shell fence is dropped) with a short list of read-only options per runner — git without `--output` or `--no-index`, `node --test` with a built-in `--test-reporter` only, nothing after `make test`, only paths after `npm test --`; an option that writes a file or loads code is refused — a criterion that used one (`git log --grep="x"`, `pytest -k foo`, `pytest tests/test_*.py`, `jest --coverage`, `go test -timeout 30s`) is now NOT RUN at review and not runnable on a 1.8 plan; wrap it in `bash tests/<script>.sh` (from 6.3.0).
- two-way: the phase-model resolver text says `effort` comes only from the brief's phase signal — prose only, no code change.
### Added
- **`/trekexecute` is coupled to the gates** (order 6).
- Plan approval (K2): `approval-log.mjs verify --kind plan` before step 1;
`not-logged`, `mismatch`, `expired`, `broken` and `diverged` halt with what
to do. Exit 2 is never a pass.
- Step end: the step check (K9; exit 2 is "not measured") and the step's
`Regression:` command (K10, new `lib/verification/regression-check.mjs`
through the criteria runner) run green before the checkpoint.
- After the last step: architecture rules (K5) and the plan-file sweep
(K6); a violation or a file no step names turns `completed` into
`partial`.
- The closing run reviews by itself (Phase 7.2): run the thing,
`/simplify`, `/trekreview`, verdict gate. A BLOCK adds the review's
remediation steps after the plan validator accepts them and the operator
re-approves the plan, at most `TREKEXECUTE_MAX_REVIEW_ROUNDS` (3) times.
- The main-merge gate is a lock on the verdict, and where the guard asks,
the executor does not ask again (one question per merge).
- `progress.json` gains optional coupling fields (Handover 5).
- **Skills** (orders 7a and 7b), the first three: `voyage:test-first` and
`voyage:debugging`, preloaded by `step-implementer`, and
`voyage:researching-sources`, preloaded by the five web-search agents and
named by `/trekresearch` at spawn. `lib/skills/skill-lint.mjs` checks the
form; `lib/skills/routing.mjs` is a model-free routing test over the
skills, the 7 commands and the 21 spawnable agents (collision at 0.75 fails;
thresholds pinned). Eval cases `evals/skill-*` are written, not run.
Authoring method: `docs/skills-authoring.md`.
- **Release and rollback** (order 8). `docs/release-runbook.md` (before, the
release, both rollback paths drilled in a sandbox) and
`scripts/release-check.mjs`: clean tree, `npm test` at HEAD, review verdict
not BLOCK and covering HEAD, a `### Doors` list. 0 ready, 1 not ready, 2
could not run.
- **Plan step rules** (order 9). `Regression:` — one allowlisted command,
unpiped (`PLAN_STEP_REGRESSION_NOT_RUNNABLE`); `On failure:` opens with
revert | retry | skip | escalate, or `PLAN_STEP_ON_FAILURE_UNKNOWN` warns.
Minors open after the last critic round are listed for the operator, and
`--extra-round` records the round they pick.
- **Tests-only steps** (order 10). `PLAN_STEP_TESTS_ONLY` warns on a step
whose files are all tests; `red-proof --plan/--step` reports `tests_only`,
and `/trekexecute` sends such a step to the plan instead of into fix rounds
that cannot succeed. `/trekplan`, the plan template and `plan-critic` say
the test belongs in the step that builds the behaviour.
### Fixed
- The approval guard refused only a merge into main and a push in the
permission mode that shows no prompts; a tag, a publish and destructive git
went through unattended. Now every call it would ask about is refused there.
- Plan-review dedup merges two findings on the same file:line with the same
content; the Jaccard threshold for every other pair is unchanged.
- `/trekbrief` Step 4c says the brief reviewer runs in the background and is
waited for.
- The Phase 4 size count includes `.mjs`, `.cjs`, `.mts`, `.cts`.
- `criteria-runner --evidence` shows the first output line on PASS rows.
- The findings schema checks `path:line` citations in finding prose against
the file; `/trekreview` checks the reviewer's whole answer and names
`FINDING_PROSE_LINE_OUT_OF_RANGE`.
- `git-historian` never proposes changing a file the brief froze, and names
the remote from `git remote -v`.
- The criteria runner's commands run without `NODE_TEST_CONTEXT`, so a test
run inside `node --test` can no longer pass falsely.
- Timing tests tolerate load (fastest of three; hook helper kill limit 30 s),
and the K2 hook tests use unique session ids per run.
- The example plan's `On failure:` lines use the K11 words, and its
verbose-content test moves into the step that wires the output. Steps 1-2
(golden capture, stability harness) keep their tests-only warning; a step
type for them is a later question, and step 2's heading no longer says it
must fail.
- The resolver text in four commands says `effort` comes only from the
brief's phase signal.
- Release review of 6.3.0 (seven rounds; rounds 1-3 BLOCK, rounds 4-7 WARN;
every finding of rounds 1-6 fixed with a test that failed first, round 7's
under Known issues): the guard refuses where
no one can be asked also when its rules will not load; review steps appended
by `/trekexecute` are held to the step rules on any plan version and need a
`Verify:` (`plan-validator --steps-from`); a restore the guard refuses is
recorded as `revert-refused` and stops the run before review, never as
reverted; every check Voyage runs runs with no shell (round 5, the
operator's structural fix after the patching of the shell screen did not
converge), as plain words and each runner's read-only options; the release
check compares version files without their version, lets the README change
only in the badge's version, reads `scope_sha_end` as a commit sha, sees a
file moved after the review, ignores Voyage's own artifacts committed after
the review, runs the cheap checks first, stops a suite that never ends,
works for a plugin in a subdirectory and never reports a crash as "not
ready"; the plan-file sweep reads `Files:` as v6.2.0 did, and the
tests-only check has its own reader, and red proof also reads the step's
diff (see Known issues); skill frontmatter and routing read YAML values, comments and tags
as YAML does; `regression-check` prints the progress.json status and runs
through the criteria runner itself. `/trekexecute` says plainly that review
steps in the template's own form stop with a re-plan.
### Known issues — for 6.3.1
The seventh round of the release review is WARN: 0 BLOCKER, 12 MAJOR, 0
MINOR. The operator chose to release 6.3.0 with it (2026-10-11); the findings
go into 6.3.1.
- Tests-only steps: when red proof decides, the step's diff in the documented
flow holds only the test, so it cannot overrule the plan's `Files:` reading;
a change already in the working tree when the step started counts against
tests-only; an unbackticked file next to a backticked path in `Files:` is
not read.
- Red proof reports a command killed by its timeout as "could not start". The
release check calls a suite killed for too much output a timeout, and reads
`--review` from the current directory instead of `--repo`.
- A trailing `# comment` is dropped in a fenced check but not in a backticked
one.
- The example plan's steps 1-2 keep their tests-only warning (operator
decision 2026-10-09; a step type for them is a later question).
- Four cleanups: the 15-minute timeout defined in three places, a line count
read once per citation, `isMain` copied into five more CLIs, and a
roundabout condition in the guard.
- Found while writing the review, and present in 6.2.0 too: the findings check
ends a reviewer's json block at the first triple backtick, even one inside a
JSON string.
## v6.2.0 — 2026-10-08 — Intent, plan gate, step helpers, guards and a review that is a gate ## v6.2.0 — 2026-10-08 — Intent, plan gate, step helpers, guards and a review that is a gate
Wave 1 of the practice build (five parallel orders, merged 2026-10-06), the Wave 1 of the practice build (five parallel orders, merged 2026-10-06), the

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. 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-6.2.0-blue) ![Version](https://img.shields.io/badge/version-6.3.0-blue)
![License](https://img.shields.io/badge/license-MIT-green) ![License](https://img.shields.io/badge/license-MIT-green)
![Platform](https://img.shields.io/badge/platform-Claude%20Code-purple) ![Platform](https://img.shields.io/badge/platform-Claude%20Code-purple)

4
package-lock.json generated
View file

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

View file

@ -1,6 +1,6 @@
{ {
"name": "voyage", "name": "voyage",
"version": "6.2.0", "version": "6.3.0",
"private": true, "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, pencil-toggle annotation pattern): 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.", "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, pencil-toggle annotation pattern): 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", "type": "module",