Repository navigation
Replies: 1 comment 1 reply
|
Thanks for writing this up with the phase split spelled out — the "silent at install, fatal at next start" shape is the part earlier reports kept losing, and it is what makes this diagnosable at all. Your reading of the mechanism holds. Below is what I can pin to source at 1. Why install warns nothing: the check exists, it asks a different questionThere already is an install-time preflight, and it reads exactly the manifest you found. The blindness is one field up, in the evaluator: That distinction is worth keeping: the compatibility channel is about ranges. This defect is about a dependency field, and it needs its own rule, not a wider range check. 2. The copy is not merely present — it wins resolutionThis is the half I would add to your analysis, because it explains why one stale directory breaks a whole process rather than one plugin. For an importer located inside the profile directory, And this precedence is deliberate, not an accident: Your two phases then follow mechanically: at install time the rows were already imported and cached, so nothing re-reads them (hence "keeps working"); at the next start the same import resolves through the profile layer and lands on the old directory (hence the crash). It also explains why 3. One thing worth measuring on your side
So: is the failing import in your boot stderr a bundle/plugin row, or the host's own module graph? If it is a row, then §2's preference is escaping a contract the bundle loader believes it enforces, and the upstream fix has a second, sharper edge than the install-time audit. I do not want to assert that from reading alone — your stderr decides it. 4. Where a fix can go, cheapest first(a) Install-time audit — the right place, and small. The manifest is already read at (b) Startup skew diagnostic — catches manifests installed by something other than (c) Docs — your third suggestion has no counterargument. The rule does exist as a gate for in-repo packages ( What I would not do is reserve 5. Existing plugin-side coverage, with its limit stated plainly
The limit, and it matters for your case: it is a plugin, so it can only report in a start that succeeds. Your fatal-skew variant fails precisely in that start, so this does not prevent it — it names the culprit on the restarts that do come up, and it cannot remove the copy. That is why §4(a) carries more weight than the plugin does: prevention has to happen before pnpm runs. 6. Two questions
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Hi all — I hit an issue on the desktop profile (nightly channel). After searching, I can confirm it belongs to the same family as #1486 / #1697 / #2731, but with a different presentation, so I'm sharing it here for reference. Please correct me if any part of my analysis is off.
What happened
After installing a third-party plugin from the registry (
dsh plugin add), three packages appeared at the top level of the profile'snode_modules/@deepseek-ai/:dsh-tools,dsh-brandanddsh-util-values, all at version0.1.2-rc.1, inconsistent with the host core (nightly, roughly the 0.2.0-rc.x line).The problem has two phases, which is exactly what made it so hard to trace:
I only located the cause by inspecting the profile directory, finding the three overwritten packages, and manually renaming them aside (isolation) to get the host booting again.
Trigger condition
The plugin declares the host core package as a direct dependency with an exact pin in its
package.json:A useful contrast: transitive deps of the same tree whose versions are compatible with the host (schemastery, cosmokit) were left untouched; exactly the set that is "really installed + conflicts with the host version" got replaced.
How this differs from the existing discussions
#1486/#1697/#2731 describe the same-version duplicate case: install succeeds, boot is fine, and the failure hits at runtime — every tool call throws
Cannot read properties of undefined (reading 'prepare'). This case is the version-skew variant: silent at install time (hot-reloaded host keeps running), failure deferred to the next startup, where the host fails to boot at all. The common gap is that both variants warn nothing at install time — the risk is injected the moment the install completes.Directions to consider (already raised in prior discussions; adding a fresh datapoint)
@deepseek-ai/*) as external / peer-only at the loader level, so a plugin misdeclaring them simply cannot be materialized into the profile;Current workaround
I've switched the plugin to a
link:install (pnpm doesn't resolve a link target's dependencies, so the pollution no longer happens) and manually quarantined the three overwritten packages.Thanks!
All reactions