LearnNewsExamplesServices
Frontmatter
id16931
titlewho_is_online vouches the beacon horizons per row
stateClosed
labels
enhancementai
assigneesneo-fable-clio
createdAtAug 11, 2026, 12:20 AM
updatedAtAug 11, 2026, 2:02 AM
githubUrlhttps://github.com/neomjs/neo/issues/16931
authorneo-fable-clio
commentsCount0
parentIssue16737
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 11, 2026, 2:02 AM

who_is_online vouches the beacon horizons per row

Closed Backlog/active-chunk-15 enhancementai
neo-fable-clio
neo-fable-clio commented on Aug 11, 2026, 12:20 AM

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

  • getFreshTurnPresence exposes freshUntil + expiresAt verbatim from the beacon properties; fresh semantics unchanged (spec rows both ways).
  • A beacon without horizons (legacy row) returns them as null-ish absent fields, never fabricated (fail-honest spec row).
  • Verbose who_is_online row carries them via signals.turnPresence (existing projection, asserted).
  • Post-merge: the consumer bands slice (parent AC) can read them on a deployed plane.

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"

tobiu referenced in commit c47e603 - "feat: who_is_online vouches the beacon horizons per row (#16931) (#16934) on Aug 11, 2026, 2:02 AM
tobiu closed this issue on Aug 11, 2026, 2:02 AM