Skip to content

Product check compares supported extension ids, not the daemon's executable name #3689

Closed

Description

@malibio

Overview

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

  1. malibio commented on Oct 7, 2026

    @malibio
    CollaboratorAuthor

    Frontend: 5863 passed (323 files)

  2. self-assigned this
    on Oct 7, 2026
  3. added a commit that references this issue on Oct 7, 2026
    0a2793c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions