The producer half of #16737's banded-presence AC — split per the one-PR-resolvable rule (parent: #16737; consumer sibling precedents: #16787, #16927).
Context
#16737's beacon-horizon AC is explicitly gated: "the banded presence vocabulary (active-turn / fresh / recent / dark) from the beacon horizons (freshUntil/expiresAt) — lands when the plane vouches them per row." Source-verified tonight (the live probe was eaten by the degradation wave, so the contract was read at source): TurnPresenceService.getFreshTurnPresence (ai/services/memory-core/TurnPresenceService.mjs:200-213) consumes props.freshUntil internally to compute the boolean fresh, then returns only {turnId, startedAt, lastProgressAt, fresh} — the horizons the service itself WRITES per beacon (:147-148) are dropped at its own read surface. who_is_online's verbose rows carry this projection verbatim as signals.turnPresence (WakeSubscriptionService._projectAgentLiveness), so no consumer — the fleet presence adapter included — can band on horizons the plane never vouches.
The Fix
Additive, two fields: getFreshTurnPresence returns freshUntil and expiresAt alongside the existing shape ({turnId, startedAt, lastProgressAt, fresh, freshUntil, expiresAt}). The verbose who_is_online rows inherit through signals.turnPresence with zero WakeSubscriptionService changes. The boolean fresh stays — existing consumers keep their contract; the horizons let banded consumers derive active-turn (fresh beacon) vs fresh/recent/dark recency gradations client-side without a second clock authority.
Acceptance Criteria
Out of Scope
The consumer band vocabulary itself (parent #16737, next slice, needs this deployed) · terse-mode payload (stays cheap by design).
Related
#16737 (parent) · #16927 / PR #16928 (consumer sibling) · D#16720 (graduated source).
Live latest-8 sweep 2026-08-10T22:22Z: no equivalent. A2A: no overlapping claim (mailbox read 22:17).
Origin Session ID: ff94e740-acb8-4f25-a94b-b614bdd91ea1
Retrieval Hint: "beacon horizons freshUntil expiresAt who_is_online vouch banded presence"
The producer half of
#16737's banded-presence AC — split per the one-PR-resolvable rule (parent:#16737; consumer sibling precedents:#16787,#16927).Context
#16737's beacon-horizon AC is explicitly gated: "the banded presence vocabulary (active-turn / fresh / recent / dark) from the beacon horizons (freshUntil/expiresAt) — lands when the plane vouches them per row." Source-verified tonight (the live probe was eaten by the degradation wave, so the contract was read at source):TurnPresenceService.getFreshTurnPresence(ai/services/memory-core/TurnPresenceService.mjs:200-213) consumesprops.freshUntilinternally to compute the booleanfresh, then returns only{turnId, startedAt, lastProgressAt, fresh}— the horizons the service itself WRITES per beacon (:147-148) are dropped at its own read surface.who_is_online's verbose rows carry this projection verbatim assignals.turnPresence(WakeSubscriptionService._projectAgentLiveness), so no consumer — the fleet presence adapter included — can band on horizons the plane never vouches.The Fix
Additive, two fields:
getFreshTurnPresencereturnsfreshUntilandexpiresAtalongside the existing shape ({turnId, startedAt, lastProgressAt, fresh, freshUntil, expiresAt}). The verbosewho_is_onlinerows inherit throughsignals.turnPresencewith zeroWakeSubscriptionServicechanges. The booleanfreshstays — existing consumers keep their contract; the horizons let banded consumers deriveactive-turn(fresh beacon) vsfresh/recent/darkrecency gradations client-side without a second clock authority.Acceptance Criteria
getFreshTurnPresenceexposesfreshUntil+expiresAtverbatim from the beacon properties;freshsemantics unchanged (spec rows both ways).null-ish absent fields, never fabricated (fail-honest spec row).who_is_onlinerow carries them viasignals.turnPresence(existing projection, asserted).Out of Scope
The consumer band vocabulary itself (parent
#16737, next slice, needs this deployed) · terse-mode payload (stays cheap by design).Related
#16737(parent) ·#16927/ PR #16928 (consumer sibling) · D#16720 (graduated source).Live latest-8 sweep 2026-08-10T22:22Z: no equivalent. A2A: no overlapping claim (mailbox read 22:17).
Origin Session ID: ff94e740-acb8-4f25-a94b-b614bdd91ea1
Retrieval Hint: "beacon horizons freshUntil expiresAt who_is_online vouch banded presence"