LearnNewsExamplesServices
Frontmatter
id17153
titlePresence bands derive from vouched beacon horizons at the snapshot bound
stateClosed
labels
enhancementaiagent-os
assigneesneo-fable-clio
createdAtAug 15, 2026, 10:32 AM
updatedAtAug 15, 2026, 11:50 AM
githubUrlhttps://github.com/neomjs/neo/issues/17153
authorneo-fable-clio
commentsCount0
parentIssue16737
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 15, 2026, 11:50 AM

Presence bands derive from vouched beacon horizons at the snapshot bound

Closed Backlog/active-chunk-16 enhancementaiagent-os
neo-fable-clio
neo-fable-clio commented on Aug 15, 2026, 10:32 AM

Split leaf of #16737 (the S3 roster ticket) — the first of its four remaining legs, following the #16787 split-leaf precedent. Parent stays open for the other legs.

Context

#16737's presence-contract half shipped via #16787: the roster carries the plane's who_is_online band with tier-degradation at producer AND render, and fleetPresenceStateAdapter.mjs already exports the GRADED vocabulary (PRESENCE_BANDS) plus gradePresenceBand. The documented deliberate residual (module header, pre-change): the active-turn grade trusted the producer-computed fresh boolean; the full beacon-horizon derivation waited for the plane to vouch freshUntil/expiresAt per row — which #16931 landed (TurnPresenceService.observationFor → vouched verbatim into signals.turnPresence, WakeSubscriptionService.mjs:861).

The Problem

The producer's fresh boolean is stamped at the PRODUCER's clock; the snapshot envelope declares capturedAt as the observation-time bound for every row. Trusting the boolean across that skew lets a finished turn keep rendering active-turn (the inverse of the 70-minute-flap falsifier: instead of a live turn flapping dark, a dead turn stays live). It also makes specs wall-clock-dependent: the prior flap fixture used real new Date() against pinned horizon strings — deterministic only until the calendar caught up with the fixture (it did: the fixture's freshUntil of 2026-08-11 went stale on 2026-08-15).

The Architectural Reality

ai/services/fleet/fleetPresenceStateAdapter.mjs — the presence axis of the truth-preserving presence contract; pure module (no Neo globals), consumed through the bulk readPresence seam shared with the decomposed wake-routes source. The grade DERIVES; it never re-computes liveness — "no second clock authority" means evaluating vouched instants against a vouched bound, never inventing windows adapter-side. Known producer-side limitation, out of scope here: the plane's verdict keys on add_memory recency, not add_message — an actively-messaging seat can read dark (observed live by @neo-opus-ada, 2026-08-15).

The Fix (implemented on feature/16737-beacon-horizon-bands)

  • New pure exported helper beaconFreshAtBound({turnPresence, boundAt}) — the ONE place beacon freshness is decided. Precedence: expired observation (expiresAt ≤ bound) vouches nothing whatever its boolean claims; a present freshUntil governs against the bound; horizons absent/unparseable → the vouched boolean is the only signal (tier degradation: no horizon tier ⇒ no refinement, never a verdict); no usable bound → same fallback. NaN-safe, total.
  • readFleetPresenceSnapshot resolves ONE capturedAt value used for BOTH the envelope declaration and every horizon evaluation — bound and declaration can never drift by clock skew or a second new Date().
  • Module header residual paragraph replaced by the landed-derivation contract.
  • Spec: flap falsifier re-pinned to explicit bounds (deterministic forever); new pure matrix for beaconFreshAtBound; the skew falsifier — ONE payload, three bounds (active-turnfresh → expired) proving horizon-derivation over producer-clock trust.

Acceptance Criteria

  • beaconFreshAtBound exported, pure, total; matrix spec covers: absent observation, horizon-over-boolean both directions, expired-observation veto, boolean fallback (absent + unparseable horizons), absent bound.
  • Grade and envelope share one resolved capturedAt (skew-impossible by construction).
  • Skew falsifier green: one payload, bounds before/after freshUntil and after expiresAt yield active-turn / verdict-grade / verdict-grade.
  • All pre-existing adapter specs stay green (boolean fallback preserves legacy producer rows).
  • Scoped receipt: npm run test-unit -- test/playwright/unit/ai/services/fleet/fleetPresenceStateAdapter.spec.mjs — 18/18 passed (2026-08-15, pre-PR).

Out of Scope

#16737's legs 2–4 (identity-binding third-signal render · wake-route health from subscription state · S5-gated viewer scoping) · producer-side verdict inputs (the add_message gap above) · any C3 render-side change.

Related

#16737 (parent) · #16787 (split-leaf precedent, delivered half) · #16931 (producer horizon vouching) · #16741 (wake-route delivery axis, composes with leg 3) · D#16720 (source discussion).

Live latest-open sweep: latest 20 open checked 2026-08-15T08:31Z (newest #17151); no equivalent. A2A in-flight sweep: last-15 messages same timestamp; no colliding claim (Vega #17139 · Grace #17141/#17151 · Ada #17148/#17150 — disjoint).

Origin Session ID: 1deebbe1-b7e6-4f76-b39d-9cfcbe342596

Retrieval Hint: "beacon horizon band vocabulary snapshot bound skew" · "fleetPresenceStateAdapter active-turn freshUntil"