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
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).
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
runtimeFreshnessblock (digest-based, cloud-safe, via the sharedRuntimeFreshnessService). 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.mjsreturns 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.mjsalready provides a per-consumercreateTracker({files, serviceName, ...})digestingconfigDigest(ai/config.mjs) +openApiDigest(the server'sopenapi.yaml), andai/services/{memory-core,knowledge-base,github-workflow}/HealthService.mjsare 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-levelRuntimeFreshnessService.createTracker(...)(config + OpenAPI digests,serviceName: 'Neural Link MCP server'), the#runtimeFreshnessTrackerfield + the boot-identity / reader / cache accessors, aresolveRuntimeFreshness()method +clearCache(), andruntimeFreshness: await this.resolveRuntimeFreshness()in the healthcheck payload.Acceptance Criteria
runtimeFreshnessblock withstatus(current/stale/unknown), via the sharedRuntimeFreshnessService.gitHead; digest-only, cloud-safe — neural-link supplies norootDir).current; changed config/OpenAPI digest →stalewith Neural-Link restart guidance; unreadable identity →unknownwithout throwing; gitHead drift ignored.Out of Scope
Decision Record impact
none. Aligned-with the existingRuntimeFreshnessService+ the #12778gitHead-removal (cloud-safe digest design).Related
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).