• v6.3.0 0f400d3461

    v6.3.0 Stable

    ktg released this 2026-10-11 06:33:07 +00:00 | 157 commits to main since this release

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

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