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
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")
Context
Hit live on 2026-09-04 (~13:05Z) while arming hot patching for the D#18224 popup-birth arm:
manage_neo_configwithaction: 'set'returnedUnknown method: set_neo_config. Worked around from the page withNeo.worker.App.setGlobalConfig({enableHotPatching: true}). Both sides verified atdev@2ee23d7801and Brainea336dd:setaction as the JSON-RPC methodset_neo_config(ai/services/neural-link/RuntimeService.mjs:103);src/ai/client/RuntimeService.mjs:631setNeoConfig({config})— but its dispatch tablesrc/ai/Client.mjs:156–171registersget_neo_config: runtimeand noset_neo_config;handleRequest(:243–248) resolves the service bymethod.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: runtimeto the dispatch table besideget_neo_config. Pin the contract: a unit spec drivesClient#handleRequestwith every snake_case method the Brain forwards for the runtime service (the list in the spec, sourced from the Brain'sopenapi.yamloperationIds at review time) and asserts each resolves to a function — red-first forset_neo_config.Contract Ledger Matrix
Neo.ai.Client#serviceMap(Client.mjs:156)openapi.yamlmanage_neo_config(action: set)set_neo_configdispatches toRuntimeService#setNeoConfigUnknown methoderror (unchanged for unmapped names)RuntimeService#setNeoConfigdocblock already states the contractmanage_neo_config setfollowed bygetshows the written valueDecision Record impact
none.Acceptance Criteria
manage_neo_configaction: 'set'reachesRuntimeService#setNeoConfig; a followingaction: 'get'returns the written key (live check on any app with the Neural Link enabled).handleRequest('set_neo_config', {config: {…}})today throwsUnknown method; after the fix it resolves.Avoided Traps
set_prefix catch-all: prefix matching is howget_dom_event*,get_drag*,get_window*families are grouped deliberately (:159–165); one exact key is the fix.Related
src/ai/client/RuntimeService.mjs:195getNeoConfig(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")