Skip to content

v5.12.0

Choose a tag to compare

@Kanevry Kanevry released this 11 Oct 21:04
· 20 commits to main since this release

Added

  • so-hud, a native Claude Code status mod (#1508): mods/so-hud (version 0.1.0) shows the session state (lock, registry, wave scope, agent status, STATE.md, gate and vault events) as a status line and, when something needs attention, a warning band, and writes one beacon per session that other sessions can read through $.so.beacons(); the status line shows how many peer sessions are running. It reads everything through scripts/so-hud.mjs (JSON v1 with provenance and degraded), keeps no second copy of the state and never changes a tool decision. It is listed in this repo's marketplace: /plugin install so-hud@kanevry (Claude Code only, tested with 2.1.296, Node.js 24+, Session Orchestrator 5.12.0 or later as the plugin or as a checkout set through soRoot). Status texts are German for now; an English table is prepared but not yet selectable.
  • Mod CI gate (#1508): the mods:plugin job runs claude plugin validate --strict --json and claude plugin test for every mod under mods/ with Claude Code pinned once in CLAUDE_CODE_VERSION (2.1.296). It verifies the registry signatures of both downloaded packages, calls the platform binary directly so ignore-scripts stays on, runs without credentials or nonessential traffic, and is a hard dependency of pipeline-gate.
  • Session-end names untracked vault files modified during the session (#1563): new Phase 3.7e runs scripts/vault-orphans.mjs, which lists untracked files under vault-dir modified since the session started (git ls-files --others --exclude-standard -z, read-only) and leaves out files carrying a _generator: session-orchestrator- marker. The close names them in the final report and records one Open Question with the path list; it never commits, moves or deletes anything in the vault, because a modification time does not prove which session wrote a file. A vault that cannot be read is reported as "could not measure", never as "none". There is no blanket exclusion of 40-learnings/ and 50-sessions/: an unmarked file there blocks every later mirror auto-commit and is exactly the case to surface.

Fixed

  • The Mode-Selector sees the previous session's recommendation again (#1560): the session-start Idle Reset was prose only, and its rule 6 deleted the five recommendation keys from the STATE.md frontmatter that Phase 7.5 reads through buildLiveSignals(), so after every clean /close the selector answered with confidence 0. The reset is now code (scripts/lib/state-md/idle-reset.mjs, CLI scripts/state-md-idle-reset.mjs, written under the STATE.md lock) and keeps those keys; session-end Phase 3.7a overwrites them at the next close. Without a new Wave History the earlier ## Previous Session archive stays below the new recommendations copy. parseRecommendations() accepts "#42" and "42" in top-priorities and drops free-text entries instead of discarding the whole list.
  • A first /session no longer starts deep silently (#1561): a bare /session in a repo whose .orchestrator/metrics/sessions.jsonl holds no real session resolves with defaultReason: "no-session-history", and commands/session.md then asks for task and mode first (recommending feature). A linked worktree reads its main checkout's ledger, and an unreadable ledger counts as not measured, so neither triggers the question.
  • Solo users see no fleet machinery (#1559): without fleet integration (NAVIGATOR_CONFIG_DIR unset and no ~/.config/navigator/ directory), scripts/fleet-checkin.mjs still validates its input, then writes nothing, creates no directory, emits no event and prints skipped: "no-fleet"; a headless (plattform: kopflos) run without fleet integration applies the Standard-Auflagen instead of writing. The SessionStart banner drops the navigator line. In a git repository without .orchestrator/bootstrap.lock (neither at the toplevel nor in the session directory) the first banner action is /bootstrap, in place of the decision nudge whose /go and /close do not work before setup; once bootstrapped, the nudge returns and now reads in plain words instead of naming an internal rule file. The hint no longer follows cold-start.enabled, which governs only the post-bootstrap first-session nudge.
  • The npm package no longer ships this repo's own AGENTS.md (#1559): it carried the maintainer's Session Config (vault path, remote host aliases), and no consumer reads an instruction file from the installed package. tests/scripts/pack-policy-floor.test.mjs keeps root AGENTS.md and CLAUDE.md out of the tarball. Config examples use the neutral alias build-host.
  • Install docs match current Claude Code (#1369, #1559): docs/install.md runs npm install in the plugin cache only when node_modules/js-yaml is missing, since /plugin install already provisions the dependencies. The README quickstart says that /bootstrap writes the Session Config and names /bootstrap --fast --no-interview as the shortest path. The website install step (EN and DE) and the guide use the same conditional command (#1564).
  • One identity for a repo reached through a symlink (#1557): repoPathHash() and the registry's repo_name resolve the real path (realpathSync.native, falling back to path.resolve when the path is unavailable), so a session in a symlink and one in its target count as the same repo for peer discovery, session transition and the live-status board. Board keys of canonical paths are unchanged. A board row stored under a pre-#1557 alias key is adopted on its first fresh write when it names the same repo; a row of another repo that merely shares the 8-character key stays. Registry entries written before the update keep their old hash until the session registers again.
  • Umlauts survive in new learning-note slugs (#1548): vault-mirror transliterates the slugs of new learning notes with a traceable origin (ä to ae, ö to oe, ü to ue, ß to ss, accents after NFC) instead of deleting the characters ("grnes" for "grünes"). Existing notes with a traceable origin keep their path, file name and id, and namespace and tags stay as they were, so auto-commit, relocation and backfill see the same folder. Session notes, tags and records without a traceable origin keep the historical slug, which drops umlauts; the backfill reverse lookup does not find older notes with umlauts; æ, ø, ł and œ are still dropped.
  • No overwriting another repo's fleet check-in (#1556): scripts/fleet-checkin.mjs exits 2 and writes nothing when the check-in file for the same semantic session id already belongs to another repo; the same repo still updates its own check-in. The existing file is opened without following symlinks and without blocking, read only as a regular file of at most 64 KiB, and the foreign repo name is printed as a JSON string on one stderr line.