Repository navigation
Replies: 3 comments
|
Second live instance of the silent-skip class (2026-10-17): shipping a plugin as a bundles-list entry whose package lacks a A one-line warning at bundle resolution ("bundle X has no dsh.bundle.patch; skipping") would have saved a full restart cycle. Both instances now have local workarounds (exit-marker plugin + explicit patch manifest), but the class is: any bundle-wiring mistake is invisible by design. |
|
The installable form of your workaround, plus the one half a signal listener cannot reach. You are right that from outside there is no way to tell a crash, a quit and a https://github.com/argszero/dsh-host-exit-marker — It appends one line per event to Three things it does that a plain 1. It restores the default action it displaced. This is the failure mode worth knowing before anyone ships a bare listener. Node stops applying a signal's default behaviour as soon as that signal has a listener, so 2. It writes before anything else reacts ( 3. The case no handler can reach. Each running instance keeps a record under What it deliberately does not do: change the exit status, the shutdown path, the fatal policy or any other listener — the vendor handlers still run, in the same order. It cannot make the exit loud on stderr, because that is the host deciding something about itself, and it does not touch your second defect (warning-class plugin errors held only in a 64 KB in-memory ring), which is a host-logging surface a plugin cannot read. On the exit status you saw: Status: the source is public and the 41-test suite is green, including a witness spec that drives real child processes and confirms they die of |
|
Publication status: Verified through the registry's version endpoint: The two facts from building it that stand on their own, independent of the plugin: Node drops a signal's default action as soon as it has a listener, so a bare Limit, stated the same way as before: it cannot make a silent exit loud on stderr — that sink belongs to the host. |
Uh oh!
There was an error while loading. Please reload this page.
Host-process observability: silent SIGTERM/SIGHUP exit with no persistent marker, and warning-class plugin errors held only in a 64 KB in-memory ring
Environment: DSH Desktop 0.2.1-rc.2 (
@deepseek-ai/dsh-desktop-runtime0.2.1-rc.2), macOS 15 (Apple Silicon), Electron app installed at/Applications/DeepSeek Harness.app.Defect 1 — the host exits silently on SIGTERM (and dies silently on SIGHUP)
profile-bootinstalls a handler that makes any SIGTERM indistinguishable from a crash-free clean exit — and there is no persistent record of either:main.js≈ lines 3821/3920 in the same build), so this path is exercised on every app quit.Observed today (2026-10-17): two app quit/relaunch cycles (06:22:40 and 06:24:36 local).
launchdloggedservice inactive: application.com.deepseek.dshthenSuccessfully spawned DeepSeek Harness[19527] because launch job demand4 s later. There were zero crash logs (~/Library/Logs/DeepSeek Harness/newest entry 2026-10-13), zero entries in macOS DiagnosticReports, and no persistent stderr anywhere — from the outside, a user cannot tell a crash from a quit from a silent SIGTERM death.Repro:
kill -TERM <host-pid>while a session is running → app/process dies, exit code 0, nothing logged anywhere.Impact: silent deaths make host-death debugging guesswork. In our case an automated watcher (
dsh-host-death-watch) was armed on Oct 8 and silently killed by a reboot on Oct 14 — nothing recorded either event.Suggested fixes (any one would have caught today):
host exiting: SIGTERM (uptime …s).~/.dsh/logs/(survives ring rotation, distinguishes quit vs signal vs crash).Defect 2 — warning-class plugin errors have no persistent surface
Boot/plugin-error handling in the same build:
~/.dsh/logs/startup-*.log(persistent),The ring dies with the process, so any plugin warning emitted before a crash/quit/restart is unrecoverable — exactly when it matters. Today's boots were clean, so we cannot show a lost warning, only the mechanism; but the design guarantees loss precisely on the cycles described in Defect 1.
Suggested fix: mirror host stderr / warning-class events to a rotating file under
~/.dsh/logs/(the ring can stay for fast access).Notes
SIGTERM/SIGHUPlistener appending a timestamped line to~/.dsh/logs/host-exit.logbefore the vendor handler exits — happy to share it if useful.All reactions