LearnNewsExamplesServices
Frontmatter
id13297
titleWire neural-link HealthService to RuntimeFreshnessService (freshness parity)
stateClosed
labels
enhancementaiarchitecturemodel-experience
assigneesneo-opus-grace
createdAtJun 15, 2026, 5:59 AM
updatedAtJun 21, 2026, 2:17 AM
githubUrlhttps://github.com/neomjs/neo/issues/13297
authorneo-opus-grace
commentsCount0
parentIssue13289
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 15, 2026, 9:18 AM

Wire neural-link HealthService to RuntimeFreshnessService (freshness parity)

Closed v13.1.0/archive-v13-1-0-chunk-3 enhancementaiarchitecturemodel-experience
neo-opus-grace
neo-opus-grace commented on Jun 15, 2026, 5:59 AM

Context

Sub-leaf of #13289. #13289 found (via the #13286 stale-bridge incident) that the neural-link MCP bridge has zero runtime-freshness tracking, while Memory Core / Knowledge Base / GitHub Workflow each surface a runtimeFreshness block (digest-based, cloud-safe, via the shared RuntimeFreshnessService). This leaf delivers the concrete parity wiring; #13289 stays open for its broader goal — cheap source-code staleness detection (the #13286 class proper), which is an open design question (Ideation Sandbox candidate).

The Problem

ai/services/neural-link/HealthService.mjs returns a bridge-connection status payload but no freshness diagnostic. So a long-lived neural-link bridge process can be bridge-healthy while its config/OpenAPI schema has moved underneath it, with no signal — unlike the other three MCP servers.

The Architectural Reality

ai/mcp/server/shared/services/RuntimeFreshnessService.mjs already provides a per-consumer createTracker({files, serviceName, ...}) digesting configDigest (ai/config.mjs) + openApiDigest (the server's openapi.yaml), and ai/services/{memory-core,knowledge-base,github-workflow}/HealthService.mjs are the existing consumers. neural-link is the only MCP server not wired, and it has both required inputs (ai/config.mjs + ai/mcp/server/neural-link/openapi.yaml).

The Fix

Mirror the KB consumer pattern in neural-link's HealthService: a module-level RuntimeFreshnessService.createTracker(...) (config + OpenAPI digests, serviceName: 'Neural Link MCP server'), the #runtimeFreshnessTracker field + the boot-identity / reader / cache accessors, a resolveRuntimeFreshness() method + clearCache(), and runtimeFreshness: await this.resolveRuntimeFreshness() in the healthcheck payload.

Acceptance Criteria

  • neural-link's healthcheck payload includes a runtimeFreshness block with status (current/stale/unknown), via the shared RuntimeFreshnessService.
  • Git-independent (no gitHead; digest-only, cloud-safe — neural-link supplies no rootDir).
  • Unit-verified: injected matching identity → current; changed config/OpenAPI digest → stale with Neural-Link restart guidance; unreadable identity → unknown without throwing; gitHead drift ignored.

Out of Scope

  • Source-code staleness detection (the #13286 class proper) — the harder, cheap-mechanism-TBD design question; stays on #13289 (Ideation Sandbox candidate).

Decision Record impact

none. Aligned-with the existing RuntimeFreshnessService + the #12778 gitHead-removal (cloud-safe digest design).

Related

  • Parent: #13289 (umbrella — stays open for code-staleness). Surfacing incident: #13286. Shared infra: ai/mcp/server/shared/services/RuntimeFreshnessService.mjs. Aligned anchor: #12778.

Live latest-open sweep: checked latest 20 open issues at 2026-06-15T03:58Z; no equivalent found.

Release classification: post-release (Agent Harness infra reliability) — boardless.

Origin Session ID: 0f5d9f1d-0683-452d-aac1-f467297186ac

Authored by Claude Opus 4.8 (Claude Code), @neo-opus-grace (Grace).