LearnNewsExamplesServices
Frontmatter
id12418
titleTicket B — Boot bootstrap-envelope → wake overrideMetadata
stateClosed
labels
aiarchitecture
assigneesneo-opus-ada
createdAtJun 3, 2026, 5:49 AM
updatedAtJun 3, 2026, 3:29 PM
githubUrlhttps://github.com/neomjs/neo/issues/12418
authorneo-opus-ada
commentsCount0
parentIssue12416
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[ ] 12422 Ticket B2 — volatile HarnessPresence registry (state∪address) + addressType dispatch + staleness
closedAtJun 3, 2026, 3:29 PM

Ticket B — Boot bootstrap-envelope → wake overrideMetadata

neo-opus-ada
neo-opus-ada commented on Jun 3, 2026, 5:49 AM

Part of Epic #12416 (graduated from Discussion #12412). The runtime self-registration core's boot-envelope mechanism.

Scope note (re-scoped during implementation): Originally bundled the boot envelope and the volatile HarnessPresence registry. The registry half (HarnessPresence record, addressType dispatch, staleness/TTL) was carved into #12422 because it gates on PR #12411 (state vocab) and is a separable concern. This ticket now covers the boot-envelope → overrideMetadata mechanism only — delivered by PR #12421. The graduated design (#12412) is unchanged; only the implementation tracking was split for clean PR↔ticket mapping.

Scope

  • Typed boot bootstrap-envelope (env): {instanceAddress, addressType ∈ userDataDir|pid|tmuxSession|webhookUrl} + appName/adapter. Transport ⟂ instance-address kept separate. NEO_AI_DATA_ROOT resolution is #12417's surface (out of scope here).
  • memory-core boot derives wake-route overrideMetadata from the envelope (the existing WakeSubscriptionService.bootstrap() overrideMetadata parameter is the seam). The durable subscriptionTemplate in identityRoots stays machine-agnostic (NO operator path — per the #11822 [hold-before-PR] catch).
  • Fail-closed on a misconfigured envelope (partial config, unknown type, recognized-but-not-yet-dispatchable type) — a non-default instance must never silently fall back to the default route and misroute its wakes. The default instance (no envelope) is routed by the absence of an address (#12407).

Acceptance Criteria

  • AC1: boot derives overrideMetadata from the env-envelope; no operator path enters shared identityRoots.
  • AC2: default instance (no envelope) → no override → routed by absence; misconfigured envelope → fail-closed (no subscription).
  • AC3: userDataDir dispatchable today via the existing daemon; reserved types (pid/tmuxSession/webhookUrl) fail closed until their dispatch lands in #12422.
  • AC4: unit coverage of the full resolveOverrideMetadata matrix; live 2-instance proof folds with #12402.

Contract Ledger

Surface Source of Authority Behavior Fallback Evidence
NEO_HARNESS_INSTANCE_ADDRESS + _TYPE (boot env) Epic #12416 / Discussion #12412 address-dim typed envelope → overrideMetadata both omitted = default instance (route by absence) unit
BootEnvelopeResolver.resolveOverrideMetadata this ticket pure env → override map; fail-closed on degenerate shapes throw → boot IIFE logs + skips (no subscription) unit
memory-core boot wiring WakeSubscriptionService.bootstrap({overrideMetadata}) seam inject per-instance address at boot bootstrap() with no override (default) static + unit; live → #12402

Carved out (now #12422)

The volatile HarnessPresence registry (state∪address union), bootId+pid-dead staleness/TTL, generic addressType delivery dispatch, and immediate-requires-fresh-presence — all gating on PR #12411's state vocab.

Related

Epic #12416; Discussion #12412; PR #12421 (delivers this); #12422 (carved-out HarnessPresence registry); #12402 (L3 validation); #11822/#12399/#12407 (wake-routing precedents); #12417 (NEO_AI_DATA_ROOT boundary).

tobiu closed this issue on Jun 3, 2026, 3:29 PM