Repository navigation
The DSH half works on a v4 harness again. Session format v4 made a message's source.kind producer-owned: admission rejects an empty kind and rejects the literal plugin. volens was still emitting the v3 wrapper { kind: 'plugin', plugin: 'volens' }, so on a v4 host the injected documentation message failed admission and took the whole turn with it:
format v4 message requires a producer-owned source kind
This was not a label problem. A failed admission ends the turn, so a project's sync stopped running instead of merely rendering an anonymous row.
One field changed. Both injected messages now carry { kind: 'volens' }; the notice keeps form: 'notice' and its summary, so the row still renders as the notice it was.
Why the bare name and not plugin:volens. Both are admitted by v4 — the historical V3-to-V4 migration writes the prefixed spelling for third-party producers — but the two generations render the row differently. v4 uses the kind itself as the context-row label, while v3 falls back to a bare kind for a producer it does not know, having used the plugin id before. The bare name therefore reads volens on both, and one artifact serves 0.1.5/0.1.6 and 0.1.7+ without branching. That is why this is a patch release.
What did not change. The three sync branches, the cursor, the notice and context wording, the language selection, the skill provider, and every file under hooks/ are untouched. Claude Code and Codex keep the same hook commands and the same behavior; the version bump is the only thing they see, and no hook re-trust follows because the registered command strings are unchanged.
Verified. The suite passes 28 cases, including a new one that pins the emitted source (kind is the plugin name, no plugin property, notice summary preserved) so the wrapper cannot return unnoticed. Against the published @deepseek-ai/dsh-session-format-v3-to-v4@0.1.7-rc.2 row admission, the old wrapper is rejected with the message above while { kind: 'volens' } is admitted. The remaining check is end to end on a real v4 runtime: install this release and trigger one injection.
Install. Claude Code: /plugin marketplace add https://github.com/funcpn/volens.git, then /plugin install volens@volens. Codex: codex plugin marketplace add https://github.com/funcpn/volens, then codex plugin add volens@volens — the first session asks once to trust the hook; choose Trust all and continue. In the ChatGPT desktop app, installing does not authorize the hook: open the plugin's manage page and choose Trust all. DSH: dsh plugin --profile web add volens-dsh@0.4.2, then restart DSH.
Upgrading. Claude Code and Codex update the marketplace as usual; no hook re-trust is expected. DSH users can install this exact release with volens-dsh@0.4.2, or update without knowing the next version number using volens-dsh@latest. If the harness core is still on 0.1.5/0.1.6, this release works there too — there is no reason to wait for a core upgrade, and no reason to skip one.
Package. volens-dsh@0.4.2 contains the expected eight runtime and skill files. The reproducible tarball SHA-1 is 91b6fdf613df9c08db23fdd779806841a57f9a77.
Requirements. git on your PATH, git able to reach GitHub, and a bash to run the hook with (macOS and Linux ship one; on Windows it comes from Git for Windows — the bash.exe under System32 is WSL's launcher and does not count). DSH needs neither: its half runs in-process and its skill arrives with the package.