Skip to content

Document DSH compatibility gate and version exemptions - #1

Merged
caelaxie merged 1 commit into
mainfrom
docs/dsh-compatibility
Oct 27, 2026
Merged

caelaxie merged 1 commit into
mainfrom
docs/dsh-compatibility

Conversation

@caelaxie

Copy link
Copy Markdown
Contributor

Docs-only. No behavior change.

Why

DSH gates a bundle before mounting it: it reads the plugin's @deepseek-ai/dsh* peer requirements (or engines.dsh when present) against the running runtime and, on a mismatch, skips the whole layer and prints dsh: skipping profile bundle "dsh-pstack": .... To a user that reads as a broken install. This package peers on @deepseek-ai/dsh-skill@^0.2.1-rc.2, so any DSH 0.3.x will hit the gate and pstack will silently vanish from the / menu until the peer range moves.

What

  • ## compatibility section. The gate, the exact skip message, and the two remedies: upgrade pstack, or dsh plugin allow-version <pkg@ver> --dsh-version <exact> --accept-risk (stored per pair in $DSH_HOME/profiles/<profile>/compatibility.json, inspectable with version-exemptions, also offered in the plugin manager UI).
  • Two non-bugs. DSH reads package.json (dsh.bundle.patch, icon, optional engines.dsh) and never reads plugin.json; the @deepseek-ai/* peers are supplied by the installation, so a standalone npm install cannot resolve them.
  • Install sentence. dsh plugin add also appends the bundle row: the plugin manager's reconcile() adds any new dependency that declares dsh.bundle. The old wording ("edits the profile and installs the package") was right in effect but did not say which half does what.

Verified against

Packaged DSH 0.2.1-rc.3 (macOS desktop app), dsh-pstack 0.15.33 @ fbc1aae:

  • unmetRequirements() / evaluatePluginCompatibility() in @deepseek-ai/dsh-app-boot — peer-name prefix rule, includePrerelease semantics.
  • reportSkippedBundles() — the stderr line quoted above.
  • pluginCompatibilityWarning() and runPlugin in @deepseek-ai/dsh — allow-version / revoke-version / version-exemptions interception, compatibility.json storage.
  • No plugin.json reference anywhere in the shipped @deepseek-ai/* packages.
  • reconcile() in @deepseek-ai/dsh-plugin-manager/lib/types/operations.js — bundle auto-registration.
  • node scripts/validate.mjs → Validated 58 skills, 23 playbooks, 24 principles, and the DSH bundle manifest.

DSH refuses to mount a bundle whose @deepseek-ai/dsh* peers do not match
the running runtime, and prints the skip on stderr. That failure looks
like a broken install, so state the gate, the exact message, and the
`dsh plugin allow-version` escape hatch, plus the two other things that
read as install bugs but are not: DSH never reads plugin.json, and the
@deepseek-ai/* peers come from the installation rather than the profile.

Also say what `dsh plugin add` actually does: the plugin manager's
reconcile step appends a dependency that declares dsh.bundle to the
profile's bundle list, so the install does register the layer.
@caelaxie
caelaxie merged commit cb8a130 into main Oct 27, 2026
2 checks passed
@caelaxie
caelaxie deleted the docs/dsh-compatibility branch October 27, 2026 00:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant