Context
Parent: #2 · POC: #16 · Related: mid-session anti-thrash follow-up
#16 is decision-only per request and has no session floor. Separate from the “judge dies” failure path: when Switchyard is healthy, a continuous chat can still bounce Strong → Weak if later turns score below threshold.
#3 sketched a durable Redis/KV floor as later graduation work. This issue is the in-process / POC floor first.
Goal
Once a session has routed to Strong, do not silently drop back to Weak on later turns while state is available on the replica.
Proposed work
- Choose a session key (header / conversation id — document the contract).
- In-process floor:
committed_tier = max(floor, decision) with TTL.
- Config knobs (enable/disable, TTL) with safe defaults for the POC.
- Demo: multi-turn chat that escalates to Strong and stays there.
- Document loss profile on restart / replica hop (points at durable store as later work).
Out of scope
Acceptance criteria
Context
Parent: #2 · POC: #16 · Related: mid-session anti-thrash follow-up
#16 is decision-only per request and has no session floor. Separate from the “judge dies” failure path: when Switchyard is healthy, a continuous chat can still bounce Strong → Weak if later turns score below threshold.
#3 sketched a durable Redis/KV floor as later graduation work. This issue is the in-process / POC floor first.
Goal
Once a session has routed to Strong, do not silently drop back to Weak on later turns while state is available on the replica.
Proposed work
committed_tier = max(floor, decision)with TTL.Out of scope
Acceptance criteria