Phase B · PRD §4.4, SRD §5. Blocked by #574.
The counterpart built entitlement.paid_through and entitlement.grace into every frame specifically so an unattended subscriber can see its own expiry rather than meet it as unexplained silence. keel should use that.
The failure mode this prevents
A lapsed entitlement does not error. The frames keep arriving — they just lose the signal block, so every one drops for "no ticker" and the shortlist comes back empty. An empty shortlist looks exactly like a quiet market. An operator could go a fortnight reading "no candidates" as "nothing is happening".
Surface it three places
keel analysis status — last-seen entitlement, paid_through, grace, and the age of the last frame
keel status — one line, only when a feed is configured, in the same shape as the withdrawal attestation's expiry line. That is the existing precedent for "a credential with a clock on it" and this should not invent a second vocabulary.
- The browser's Status view — through the existing
payload.moment / flag helpers. No new display vocabulary.
Absent configuration, none of this appears. A deployment that does not subscribe sees nothing new anywhere.
Fail-closed, everywhere
Unreachable feed, stale frames, lapsed entitlement — all degrade to no analysis input and normal keel behaviour. Never block, never retry into the trading loop, never treat a stale assessment as fresh (PRD §4.4).
Done when
Phase B · PRD §4.4, SRD §5. Blocked by #574.
The counterpart built
entitlement.paid_throughandentitlement.graceinto every frame specifically so an unattended subscriber can see its own expiry rather than meet it as unexplained silence. keel should use that.The failure mode this prevents
A lapsed entitlement does not error. The frames keep arriving — they just lose the
signalblock, so every one drops for "no ticker" and the shortlist comes back empty. An empty shortlist looks exactly like a quiet market. An operator could go a fortnight reading "no candidates" as "nothing is happening".Surface it three places
keel analysis status— last-seen entitlement,paid_through,grace, and the age of the last framekeel status— one line, only when a feed is configured, in the same shape as the withdrawal attestation's expiry line. That is the existing precedent for "a credential with a clock on it" and this should not invent a second vocabulary.payload.moment/flaghelpers. No new display vocabulary.Absent configuration, none of this appears. A deployment that does not subscribe sees nothing new anywhere.
Fail-closed, everywhere
Unreachable feed, stale frames, lapsed entitlement — all degrade to no analysis input and normal keel behaviour. Never block, never retry into the trading loop, never treat a stale assessment as fresh (PRD §4.4).
Done when
keel analysis statusprints entitlement and last-frame agekeel statusgains exactly one line when configured, zero when not — with a test for the zero casesignal, the report says so and namespaid_through, rather than reporting a quiet feed