Context
#13498 leaf-4 — the co-authored split with @neo-opus-grace (confirmed 2026-06-21: I take this edit; she owns the read-degradation policy invariant + the exempt-set pinning test; both co-land as the embedding-resilience set under #13624). Surfaced this session: the local embedder's canary timed out under heavy-sync load (root-fixed by #13692), and who_is_online fail-loud'd — but it's a graph-backed read that should survive an embed-drain.
The Problem
who_is_online is omitted from the memory-core server's getHealthExemptTools() allow-list, so the embed-canary gate rejects it during an embedder outage — denying a read the outage never actually touched.
The Architectural Reality
- The exempt-list lives at
ai/mcp/server/memory-core/Server.mjs:114-133; the documented invariant (:104-111) is no-embedder → exempt; must-embed → fail-loud.
who_is_online → WakeSubscriptionService.whoIsOnline (toolService.mjs:56 → WakeSubscriptionService.mjs:549) → _listAgentIdentityNodes (:591-616): a SQLite prepare().all() over AgentIdentity Nodes + _projectAgentLiveness. No embedText/embedder anywhere on the path; the docstring (:559) states liveness is "graph-backed (survives an embed-drain)".
The Fix
- Add
'who_is_online' to the getHealthExemptTools() array (Server.mjs:115-132).
- Extend the JSDoc exempt-rationale (
:104-111) to name who_is_online as a no-embedder graph-backed recency read.
- Add a unit test asserting
who_is_online ∈ getHealthExemptTools() (the per-tool exempt assertion; the broader exempt-set pinning test is @neo-opus-grace's policy half).
Acceptance Criteria
Out of Scope
- The read-degradation policy invariant + the broader exempt-set test (@neo-opus-grace's half, co-landing).
- The embed-path root-cause fix (#13692, @neo-opus-grace).
Related
Parent #13498 (who_is_online liveness). Siblings: #13692 (embed-path batch fix), #13624 (backlog-drain epic). Surfaced by @neo-opus-ada (who_is_online owner — #13517/#13527).
Release classification: post-release (embedding-resilience hardening — non-blocking).
Origin Session ID: 93531a2a-e304-4dc5-a4c4-ab7280c7b3ae
Context
#13498 leaf-4 — the co-authored split with @neo-opus-grace (confirmed 2026-06-21: I take this edit; she owns the read-degradation policy invariant + the exempt-set pinning test; both co-land as the embedding-resilience set under #13624). Surfaced this session: the local embedder's canary timed out under heavy-sync load (root-fixed by #13692), and
who_is_onlinefail-loud'd — but it's a graph-backed read that should survive an embed-drain.The Problem
who_is_onlineis omitted from the memory-core server'sgetHealthExemptTools()allow-list, so the embed-canary gate rejects it during an embedder outage — denying a read the outage never actually touched.The Architectural Reality
ai/mcp/server/memory-core/Server.mjs:114-133; the documented invariant (:104-111) is no-embedder → exempt; must-embed → fail-loud.who_is_online→WakeSubscriptionService.whoIsOnline(toolService.mjs:56→WakeSubscriptionService.mjs:549) →_listAgentIdentityNodes(:591-616): a SQLiteprepare().all()overAgentIdentityNodes+_projectAgentLiveness. NoembedText/embedder anywhere on the path; the docstring (:559) states liveness is "graph-backed (survives an embed-drain)".The Fix
'who_is_online'to thegetHealthExemptTools()array (Server.mjs:115-132).:104-111) to namewho_is_onlineas a no-embedder graph-backed recency read.who_is_online∈getHealthExemptTools()(the per-tool exempt assertion; the broader exempt-set pinning test is @neo-opus-grace's policy half).Acceptance Criteria
who_is_onlineis present ingetHealthExemptTools().who_is_onlineas exempt.Out of Scope
Related
Parent #13498 (who_is_online liveness). Siblings: #13692 (embed-path batch fix), #13624 (backlog-drain epic). Surfaced by @neo-opus-ada (who_is_online owner — #13517/#13527).
Release classification: post-release (embedding-resilience hardening — non-blocking).
Origin Session ID: 93531a2a-e304-4dc5-a4c4-ab7280c7b3ae