5ae06d38d3
A long-lived gateway DM rots because a turn where hygiene did not commit (turn-hold expiry, idle/ceiling timeout, cooldown, or one already in flight) fed the model the FULL uncompressed transcript — watermark-fenced summaries can land late, but a turn with none had no fail-closed bound at all. bound_model_input_without_hygiene() keeps the leading system/session_meta setup rows plus the newest tail, total <= hygiene_hard_message_limit, and never starts the kept tail on an orphaned tool result. It is deterministic and payload-only: the stored transcript is untouched, so the agent's durable prefix slice (history_offset) and the disk rows are unchanged, and the hygiene compressor still sees the full transcript. Applied at the three exits of _hmwa_run_session_hygiene where hygiene did not land. A landed compression publishes a NEW list on attempt.history, so object identity (`attempt.history is history`) decides — an adopted summary is passed through byte-identical, and below the limit the bound returns the same list object (no copy, no behaviour change).