LearnNewsExamplesServices
Frontmatter
id18281
titleThe Neural Link client never dispatches set_neo_config
stateClosed
labels
bugaiagent-os
assigneesneo-fable
createdAtSep 4, 2026, 3:47 PM
updatedAtSep 4, 2026, 9:36 PM
githubUrlhttps://github.com/neomjs/neo/issues/18281
authorneo-fable
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 4, 2026, 9:36 PM

The Neural Link client never dispatches set_neo_config

neo-fable
neo-fable commented on Sep 4, 2026, 3:47 PM

Context

Hit live on 2026-09-04 (~13:05Z) while arming hot patching for the D#18224 popup-birth arm: manage_neo_config with action: 'set' returned Unknown method: set_neo_config. Worked around from the page with Neo.worker.App.setGlobalConfig({enableHotPatching: true}). Both sides verified at dev@2ee23d7801 and Brain ea336dd:

  • the Brain's Neural Link server forwards the set action as the JSON-RPC method set_neo_config (ai/services/neural-link/RuntimeService.mjs:103);
  • the engine client implements it — src/ai/client/RuntimeService.mjs:631 setNeoConfig({config}) — but its dispatch table src/ai/Client.mjs:156–171 registers get_neo_config: runtime and no set_neo_config; handleRequest (:243–248) resolves the service by method.startsWith(prefix) over that table, finds none, and throws at :266.

A handler that exists and cannot be reached is the defect; the tool advertises a capability the runtime refuses.

The Fix

Add set_neo_config: runtime to the dispatch table beside get_neo_config. Pin the contract: a unit spec drives Client#handleRequest with every snake_case method the Brain forwards for the runtime service (the list in the spec, sourced from the Brain's openapi.yaml operationIds at review time) and asserts each resolves to a function — red-first for set_neo_config.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
Neo.ai.Client#serviceMap (Client.mjs:156) Brain openapi.yaml manage_neo_config (action: set) set_neo_config dispatches to RuntimeService#setNeoConfig Unknown method error (unchanged for unmapped names) RuntimeService#setNeoConfig docblock already states the contract manage_neo_config set followed by get shows the written value

Decision Record impact

none.

Acceptance Criteria

  • manage_neo_config action: 'set' reaches RuntimeService#setNeoConfig; a following action: 'get' returns the written key (live check on any app with the Neural Link enabled).
  • Unit, red-first: handleRequest('set_neo_config', {config: {…}}) today throws Unknown method; after the fix it resolves.
  • The dispatch-completeness spec above passes for the runtime service's full method list.

Avoided Traps

  • Do not add a set_ prefix catch-all: prefix matching is how get_dom_event*, get_drag*, get_window* families are grouped deliberately (:159–165); one exact key is the fix.
  • Do not move the enable-hot-patching workaround into docs as a recipe; the tool is the contract.

Related

  • #18276 (found in the same arm) · D#18224 DC_kwDODSospM4BFxN1 (the receipt) · src/ai/client/RuntimeService.mjs:195 getNeoConfig (the mapped sibling).

Live latest-open sweep: checked the latest 40 open issues (created-desc) at 2026-09-04 13:37Z; no equivalent found. A2A claim sweep (last 60 min, all read-states): none on the Neural Link config surface. Memory Core sweep: my own defect-note broadcast of 13:0xZ only; first occurrence promoted on a triage decision (both sides verified, capability advertised). Own-assignment sweep: none.

unowned-rationale: a one-key fix plus a contract spec; claimable by any seat; not on my active peer-role lanes.

Origin Session ID: ee061205-8271-4458-b73b-b132c1bec310

Retrieval Hint: query_raw_memories("set_neo_config Unknown method serviceMap dispatch table RuntimeService setNeoConfig")