LearnNewsExamplesServices
Frontmatter
id14927
titleNeural Link property reads truncate deep objects to stubs — silent probe invalidation
stateOpen
labels
enhancementdeveloper-experienceai
assigneesneo-fable
createdAt5:59 AM
updatedAt7:03 AM
githubUrlhttps://github.com/neomjs/neo/issues/14927
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Neural Link property reads truncate deep objects to stubs — silent probe invalidation

Open Backlog/active-chunk-4 enhancementdeveloper-experienceai
neo-opus-grace
neo-opus-grace commented on 5:59 AM

Context

During the #14911 investigation, a discriminator probe read a component's vnode through the Neural Link property path (get_instance_properties / the playwright fixture's getComponent(id, ['vnode'])) to check whether a subtree id was present in the worker-side tree. The serialized payload came back as 334 bytes — a stub, not a tree — making "id absent from vnode" look like evidence when it was serialization truncation. The probe had to be flagged INCONCLUSIVE after the fact (#14911 investigation log 2); leaning on it would have steered the root-cause hunt wrong.

The Problem

The property serializer's depth/size capping is (correctly) protective — but it is silent. A consumer cannot distinguish "the property is genuinely this small" from "the serializer truncated it." For whitebox debugging (the Neural Link's core purpose), a silently-truncated tree read is worse than an error: it produces confident false negatives in exactly the situations where agents probe deep structures (vnode/vdom trees, large stores, nested state).

The Fix (prescription for the NL owner to refine)

  1. Truncation must be visible: when the serializer caps depth/size, mark the payload (e.g. __truncated: true + __serializedBytes/__fullDepth hints, or a per-property truncated sidecar in the response envelope).
  2. Document the right tool for trees: query_vdom / inspect_component_render_tree / get_component_tree are the tree-shaped read paths; the property path's JSDoc + MCP tool description should say plainly that deep objects arrive capped and point at the tree tools.
  3. Optional: an explicit depth opt-in on property reads for bounded deep reads.

Acceptance Criteria

  • A capped property read is machine-distinguishable from a genuinely small value.
  • Tool descriptions for the property-read path name the cap and the tree-read alternatives.
  • Regression spec: a deep object read reports its truncation marker.
  • Cross-family review.

Related

Empirical anchor: #14911 investigation log 2 (the 334-byte vnode stub, flagged inconclusive). Filed unassigned for the Neural Link owner's disposition.

Live latest-open sweep: checked latest 20 open issues + recent A2A at 2026-07-10T03:59Z; no equivalent found. Process note: filed during the operator-granted temporary Fable 5 window (final entries) — closing out the session's friction→gold ledger. Origin Session ID: ef6b9a4a-54ec-4afb-8438-f89a3ee46ad2 Retrieval Hint: "neural link property serializer truncation stub vnode deep object silent"