The consumer half of #16737's banded-presence AC — the final split leaf (siblings: #16787 the contract, #16927 the capability chip, #16931 the producer vouching, all delivered). Unblocked tonight by PR #16934's merge: verbose who_is_online rows now carry signals.turnPresence.freshUntil/expiresAt on every active row.
Context
#16737's AC, verbatim: "Banded presence vocabulary (active-turn / fresh / recent / dark) from the beacon horizons (freshUntil/expiresAt) — never boolean online/offline (70-min-turn flap specimen is the falsifier)." The producer half is merged; nothing consumes the horizons yet — the cockpit still renders the plane's own coarse state vocabulary (online/idle/dark/…), which cannot distinguish "mid-turn RIGHT NOW" (a fresh beacon) from "wrote a memory recently" (activity recency), and flaps on long turns exactly as the specimen describes.
The Fix
Consumer-side grading in ai/services/fleet/fleetPresenceStateAdapter.mjs (the one presence producer→render seam):
- A pure exported
gradePresenceBand({state, signals, now}): active-turn (a fresh beacon — signals.turnPresence.fresh === true, horizons vouched) → fresh (plane state online without a fresh beacon: recent add_memory) → recent (plane state idle: outside freshness, within the idle cutoff) → dark (plane state dark) — with benched/neverConnected passing through untouched (membership facts, not recency grades) and any unreadable row keeping today's honest unknown. The plane's own verdict stays the authority for its half (no second clock: the grade DERIVES from vouched horizons + the plane's own states, it never re-computes liveness).
- The adapter emits the graded band on its existing per-row contract (closed enum extended:
active-turn + fresh + recent join; online/idle retire from the RENDER vocabulary but stay accepted inputs).
AgentCard's PRESENCE_BAND_LABEL gains the new vocabulary (◉ active turn, ◉ fresh, ◉ recent, ◉ dark); tier-degradation unchanged (absent/unknown renders nothing).
Acceptance Criteria
Out of Scope
Viewer scoping (S5, still gated) · the roster-level chip (delivered #16927) · plane-side band computation (deliberately client-graded from vouched facts per #16931's design).
Related
#16737 (parent) · #16931/PR #16934 (the producer, merged tonight) · #16787 · #16927.
Live latest-10 sweep 2026-08-11T00:07Z: no equivalent. A2A sweep: mailbox in degradation wave 4 (documented deviation — nothing stores; collision risk nil, the FM lanes are all mine tonight).
Origin Session ID: ff94e740-acb8-4f25-a94b-b614bdd91ea1
Retrieval Hint: "banded presence consumer active-turn fresh recent dark grade horizons"
The consumer half of
#16737's banded-presence AC — the final split leaf (siblings:#16787the contract,#16927the capability chip,#16931the producer vouching, all delivered). Unblocked tonight by PR #16934's merge: verbosewho_is_onlinerows now carrysignals.turnPresence.freshUntil/expiresAton every active row.Context
#16737's AC, verbatim: "Banded presence vocabulary (active-turn / fresh / recent / dark) from the beacon horizons (freshUntil/expiresAt) — never boolean online/offline (70-min-turn flap specimen is the falsifier)." The producer half is merged; nothing consumes the horizons yet — the cockpit still renders the plane's own coarse state vocabulary (online/idle/dark/…), which cannot distinguish "mid-turn RIGHT NOW" (a fresh beacon) from "wrote a memory recently" (activity recency), and flaps on long turns exactly as the specimen describes.The Fix
Consumer-side grading in
ai/services/fleet/fleetPresenceStateAdapter.mjs(the one presence producer→render seam):gradePresenceBand({state, signals, now}): active-turn (a fresh beacon —signals.turnPresence.fresh === true, horizons vouched) → fresh (plane stateonlinewithout a fresh beacon: recentadd_memory) → recent (plane stateidle: outside freshness, within the idle cutoff) → dark (plane statedark) — withbenched/neverConnectedpassing through untouched (membership facts, not recency grades) and any unreadable row keeping today's honestunknown. The plane's own verdict stays the authority for its half (no second clock: the grade DERIVES from vouched horizons + the plane's own states, it never re-computes liveness).active-turn+fresh+recentjoin;online/idleretire from the RENDER vocabulary but stay accepted inputs).AgentCard'sPRESENCE_BAND_LABELgains the new vocabulary (◉ active turn,◉ fresh,◉ recent,◉ dark); tier-degradation unchanged (absent/unknown renders nothing).Acceptance Criteria
gradePresenceBandmatrix: fresh-beacon rows gradeactive-turnregardless of activity freshness (the 70-min-turn flap falsifier: staleadd_memory+ fresh beacon = active-turn, never a flap to dark);online-no-beacon →fresh;idle→recent;dark→dark; benched/neverConnected/unknown pass through; malformed signals fail to today's behavior, never a fabricated grade.Out of Scope
Viewer scoping (S5, still gated) · the roster-level chip (delivered
#16927) · plane-side band computation (deliberately client-graded from vouched facts per#16931's design).Related
#16737(parent) ·#16931/PR #16934 (the producer, merged tonight) ·#16787·#16927.Live latest-10 sweep 2026-08-11T00:07Z: no equivalent. A2A sweep: mailbox in degradation wave 4 (documented deviation — nothing stores; collision risk nil, the FM lanes are all mine tonight).
Origin Session ID: ff94e740-acb8-4f25-a94b-b614bdd91ea1
Retrieval Hint: "banded presence consumer active-turn fresh recent dark grade horizons"