Context
Slice 4 of #16741 (S7, epic #16168) — the F3 refinement from the author falsification pass: client-held watermarks keep the plane cursor-stateless, but route-health rendering for poll-only routes then has NO plane-side observation — the cockpit cannot distinguish "healthy, polls elsewhere" from "nobody ever polls." The agreed resolution preserves statelessness: last-poll-at as observational telemetry — a GraphLog append on each authenticated poll-digest call. A timestamp, never a cursor; no delivery state owned.
Kept separate from slices 2/3 deliberately: the code is small, but the MCP-server change class drags the parity gates (openapi.yaml + tool handbook + config-leaf parity lint) — that gate set should not contaminate the fleet-server or cockpit slices.
The Fix
WakeSubscriptionService.pollDigest (ai/services/memory-core/WakeSubscriptionService.mjs:1584): append the observational last-poll-at event (GraphLog, per-subscription) on each authenticated call.
- Expose last-poll-at in the subscription state read surface (the
list/state projection consumed by fleetWakeRoutesSource), openapi + handbook + parity lint in the same commit.
- Health derivation contract: poll-route health = subscription state + last-poll recency; absence of polls renders absence-of-signal, never a verdict (tier-degradation vocabulary).
Acceptance Criteria
Out of Scope
The SSE push path (slice 2), cockpit rendering (slice 3), any change to pollDigest's digest semantics or watermark contract.
Related
Parent #16741 · slice 1 #16800 (merged, PR #16796 — the surface this decorates) · slices 2/3 siblings · epic #16168.
Live latest-open sweep: latest 20 open checked at 2026-08-14T08:1xZ, no equivalent; A2A herd window clean.
Origin Session ID: c4996813-01b9-4234-8bdd-ed3bf22c0970
Retrieval Hint: query_raw_memories("last-poll-at observational telemetry poll-digest pull route health")
Context
Slice 4 of #16741 (S7, epic #16168) — the F3 refinement from the author falsification pass: client-held watermarks keep the plane cursor-stateless, but route-health rendering for poll-only routes then has NO plane-side observation — the cockpit cannot distinguish "healthy, polls elsewhere" from "nobody ever polls." The agreed resolution preserves statelessness: last-poll-at as observational telemetry — a GraphLog append on each authenticated
poll-digestcall. A timestamp, never a cursor; no delivery state owned.Kept separate from slices 2/3 deliberately: the code is small, but the MCP-server change class drags the parity gates (openapi.yaml + tool handbook + config-leaf parity lint) — that gate set should not contaminate the fleet-server or cockpit slices.
The Fix
WakeSubscriptionService.pollDigest(ai/services/memory-core/WakeSubscriptionService.mjs:1584): append the observational last-poll-at event (GraphLog, per-subscription) on each authenticated call.list/state projection consumed byfleetWakeRoutesSource), openapi + handbook + parity lint in the same commit.Acceptance Criteria
Out of Scope
The SSE push path (slice 2), cockpit rendering (slice 3), any change to
pollDigest's digest semantics or watermark contract.Related
Parent #16741 · slice 1 #16800 (merged, PR #16796 — the surface this decorates) · slices 2/3 siblings · epic #16168.
Live latest-open sweep: latest 20 open checked at 2026-08-14T08:1xZ, no equivalent; A2A herd window clean.
Origin Session ID: c4996813-01b9-4234-8bdd-ed3bf22c0970
Retrieval Hint:
query_raw_memories("last-poll-at observational telemetry poll-digest pull route health")