You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Product check compares supported extension ids, not the daemon's executable name #3689
An app built on core replaces core's daemon in place and uses the same daemon name, nodespaced (ADR-084 §4.3, ADR-082 §4.5, amended 2026-10-08). The app's product check can therefore no longer tell the products apart by the daemon's executable name. It compares the extension ids the daemon supports instead.
Problem Statement
Today the product check reads the daemon's executable file name from GetDaemonVersion and compares it with the daemon profile's binary_name. With one daemon name this accepts the wrong daemon in two cases: a core daemon left running after another build is installed, and an extension-carrying daemon left running after core's app is put back. In the second case core's app could talk to a daemon that opens databases core refuses (ADR-083 §2).
Proposed Solution
GetDaemonVersion reports the extension ids the daemon supports (the set declared through DaemonExtensions::supported_extension), in a generic field. Core's daemon reports an empty set. Remove the executable-name field.
DaemonProfile gains extensions: Vec<String>, the ids the running daemon must report. Core's default is empty.
The product check compares the reported set with the profile's, and re-registers on a mismatch, as it does today on a name mismatch. The hold on calls until the check passes is unchanged.
binary_name stays on the profile as the sidecar to install; core and any app built on it use nodespaced.
Core names no other product: it compares sets, never an id.
No carry-over: the executable-name field and comparison are deleted.
Documentation
ADR-084 §4.3 and ADR-082 §4.5 are already amended. Update architecture/extension-points.md and architecture/daemon-cli-lifecycle.md (product check) in the same change if they describe the old field.
Acceptance Criteria
GetDaemonVersion carries the supported extension ids; the executable-name field is gone from the proto and the daemon.
DaemonProfile has extensions; core's default is empty; the product check compares sets.
A test: a daemon reporting a different set than the profile expects is booted out and re-registered; an equal set is kept.
A test with the extension-carrying daemon on the socket and a core profile (empty set): the app does not use it.
bun run types:check, bun run gen:types if the wire type is promoted, and bun run test:changed pass.
Related
nodespace-sync#525 (the rename sweep) and nodespace-sync#518 (the rebuild) depend on this.
Activity
malibio commentedon Oct 7, 2026
Frontend: 5863 passed (323 files)
Product check compares supported extension ids, not the daemon's exec…