• v5.11.0 0be152ad29

    v5.11.0 Stable

    ktg released this 2026-09-23 10:33:44 +00:00 | 260 commits to main since this release

    Signed by ktg
    SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q

    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.
    Downloads