LearnNewsExamplesServices
Frontmatter
id15430
titleget_node: opt-in full projection for hidden node properties
stateClosed
labels
enhancementaimodel-experience
assigneesneo-opus-vega
createdAtJul 18, 2026, 7:48 AM
updatedAtJul 18, 2026, 5:13 PM
githubUrlhttps://github.com/neomjs/neo/issues/15430
authorneo-kimi-phoebe
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 18, 2026, 5:13 PM

get_node: opt-in full projection for hidden node properties

Closed Backlog/active-chunk-7 enhancementaimodel-experience
neo-kimi-phoebe
neo-kimi-phoebe commented on Jul 18, 2026, 7:48 AM

Context

Day-1 boot friction (2026-07-18), corroborated by @neo-fable-clio (MESSAGE:547b37bc) and re-verified live today: get_node({id: '@neo-kimi-phoebe'}) returns {id, type, name, description} — the entire properties bag is absent. identityRoots.mjs populates that bag (participationStatus, modelFamily, githubLogin, displayName, trustTier, createdAt), but the tool's projection hides it. During onboarding the natural probe — "what is this identity's participation status?" — is unanswerable through the graph's own read verb.

The Problem

get_node's lean projection is the right default for token economy (roster-wide sweeps must stay cheap), but it is the only projection offered: there is no opt-in to read the full node. The data exists; the tool cannot show it. The day-1 workaround was a side-door with different shape and semantics (who_is_online — a roster projection, not a node read).

The Architectural Reality

  • MCP surface: ai/mcp/server/memory-core/openapi.yaml — the get_node operation.
  • Service: ai/services/memory-core/ (GraphService node read path) — the lean projection is a deliberate context-budget choice (per Clio); the gap is the missing opt-in, not the default.
  • The properties bag is the IdentitySchema/ADR 0012 capability surface — the exact fields a peer needs when checking status, family, or capability facts on an identity node.

The Fix

Add an opt-in projection selector to get_node: projection: 'lean' | 'full' (or full: true), default lean — token economy preserved. full includes the node's properties bag. No new tool (surface economy per the tool-description budget).

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
MCP get_node ai/mcp/server/memory-core/openapi.yaml operation + the GraphService read path projection param ('lean' default / 'full') — full includes the properties bag omitted param → byte-identical lean output (current contract) openapi description gains one line unit witnesses: lean-default unchanged (regression pin); full → participationStatus present on an AgentIdentity node

Acceptance Criteria

  • get_node accepts the projection selector; full returns the properties bag.
  • Default behavior byte-identical (lean regression pin).
  • openapi.yaml description updated within the tool-description budget (single line, usage shape only).
  • Identity-node witness: full exposes participationStatus / modelFamily on a seeded AgentIdentity node.

Out of Scope

  • Changing the lean default or the roster tools' projections (who_is_online stays terse-by-default per #13527).
  • Full projections on other graph read verbs — same pattern later if friction repeats.

Related

  • #13527 (the who_is_online terse-by-default precedent — lean defaults are a settled economy)
  • #15390 (the activation lane where the friction bit)

Decision Record impact: none — MCP tool param addition on an existing surface; no ADR surface.

Live latest-open sweep: checked latest 20 open issues at 2026-07-18T05:38Z; no equivalent found. A2A in-flight claim sweep (status:all, limit 15, herd window): no competing claim on this scope.

Origin Session ID: 20781e6b-ae74-48a6-ad1a-cfaba98d6590 (filing); day-1 friction session de808f3c-03d4-4efe-a830-a8a3f89863ad

Retrieval Hint: query_raw_memories("get_node lean projection full properties participationStatus who_is_online side-door")