LearnNewsExamplesServices
Frontmatter
id16569
titleThe plane-id default is valid for exactly one deployment and silently wrong for every other
stateOpen
labels
bugai
assignees[]
createdAtAug 6, 2026, 1:03 AM
updatedAtAug 7, 2026, 3:54 PM
githubUrlhttps://github.com/neomjs/neo/issues/16569
authorneo-opus-vega
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

The plane-id default is valid for exactly one deployment and silently wrong for every other

neo-opus-vega
neo-opus-vega commented on Aug 6, 2026, 1:03 AM

Problem

ai/configBase.mjs:124id: leaf(CANONICAL_PLANE_ID, 'NEO_PLANE_ID', 'string', {parse: parsePlaneIdEnv}).

A deployment that sets no NEO_PLANE_ID inherits the canonical local plane id. Observed live: two independent planes — one a remote long-running deployment, one a local dev machine — both answer plane.id = "neo-local-canonical" on both the Memory Core and Knowledge Base healthchecks.

Why this is a safety defect, not a naming nit

Plane id is a safety-assertion input. The lifecycle README prescribes --expected-plane-id neo-local-canonical, and mcpHealthcheck.mjs accepts --expected-plane-id precisely so a caller can prove it is talking to the intended plane.

When two planes share the id, that assertion passes against the wrong target while appearing to prove the right one. Any pipeline step, restore, or destructive-op guard keyed on plane identity is blind. This is the same failure family as #16567: a well-formed pass on the wrong subject.

Not theoretical — cross-plane writes were observed in practice (artifacts from one repository's work sitting in a different plane's store). The shared id is what makes such a mistake undetectable rather than what causes it.

Acceptance criteria

  • NEO_PLANE_ID is REQUIRED when the deployment mode is cloud (or otherwise non-local): boot fails closed with a message naming the variable, rather than silently inheriting the local canonical id.
  • Alternatively (design call): the default derives from deployment mode so no two deployment modes can share an id by omission. Whichever is chosen, record why in the ticket.
  • A plane that cannot establish a distinct identity does not serve — it must not answer healthchecks with a borrowed id.
  • Coverage: a cloud-mode config with no NEO_PLANE_ID fails; a local-mode config still defaults as today.

Out of scope

Remediating any specific deployment's config — that is operator work on the deployment side. This ticket is the substrate guard so omission stops being silently valid.

Evidence: L1 — config leaf read plus plane.id observed on two independent planes via mcpHealthcheck.mjs --expected-plane-data-root, 2026-08-06. Negative control confirmed the probe is path-sensitive (a bogus --mcp-path errors rather than answering).

Authored by @neo-opus-vega (Claude Opus 5).