• v3.2.1 5334097c84

    v3.2.1 Stable

    ktg released this 2026-08-09 19:49:19 +00:00 | 2 commits to main since this release

    The first time the pipeline was ever run against real repositories. It found two defects sitting under a 42/42-green suite — which is the point the repo's own docs had been making about what prose-grep tests can and cannot prove.

    Fixed

    • dirty_files truncated the first path. gitOk() called .trim() on every command's output, but git status --porcelain encodes the worktree status in column 2 — a modified-but-unstaged file is " M path". The trim ate that leading space, and the fixed slice(3) then ate the first character of the first path: app.js was reported as pp.js. Only the first line was affected, which is exactly why it survived: no existing test asserted dirty_files values, only that the key existed. Porcelain output is now read through a non-trimming gitOkRaw().
    • The commit message claimed a STATE.md update it did not contain. generateCommitMessage() always produced docs(<repo>): oppdater STATE.md (session handoff). On every open/ repo — including this one — STATE.md is gitignored, so the handoff commit carries only the explicit --also paths. Git history is the regime's long-term log; it was systematically wrong about its own contents. The message now branches on what was actually staged.

    Changed

    • The leak condition is a hard gate, not an advisory. A public remote whose STATE.md is not yet gitignored is the state a fresh open/ repo starts in, and should_commit_state was true there — the ritual merely mentioned leak_warning and committed anyway. The warning now also lands in errors[] (step 2 stops on a non-empty errors[]), should_commit_state is false, and --commit refuses to stage STATE.md (state-leak-blocked). Explicit --also paths are still honoured: the gate protects STATE.md, not the commit as a whole. Both --plan and --commit now consult one exported leakBlock() so they cannot disagree.
    • SKILL.md's justification for the single-line rule was outdated. It claimed a wrapped rationale= replaces the repo's next step on the board with garbage. board.sh in repo-mailbox 0.20.3 tracks an HTML comment to its closer, so that no longer follows. The rule stands, now stated with the risk that is still real: a rationale= containing --> ends its own comment early.

    Tests

    • 42 → 48. Four pipeline tests (first-character preservation in dirty_files, the --plan and --commit halves of the leak gate, commit-message honesty) and two SKILL.md drift guards (the corrected single-line rationale, and step 2 stopping rather than reporting). All six were written failing first.

    Not verified

    • That /graceful-handoff loads as a user command (issue #26251), and that a cross-plugin Skill invocation of repo-mailbox:route passes from a sub-scoped skill. Both need the catalog ref bumped so the version is actually installed; the smoke test could exercise the pipeline but not the slash command.
    Downloads