SIGN IN SIGN UP

fix(chat): bound the steered-copy match by when the message was injected

The persisted copy could only be recognized by its content, and the
scope that kept the match off history — the turn's own prompt, located
through `detail.in_flight_user_turn_id` — is gone precisely when it is
needed: the backend stamps that id by matching the pending prompt
against the transcript TAIL, and once the agent has written the steered
message the tail IS that message. So the guard was dead in the shape it
exists for, and the version before it reached back through the whole
window instead.

The `steering` block now carries the note's `created_at`, the instant
the backend injected the text, stamped on the machine the agent runs
on. A persisted user turn older than that cannot be a copy of it —
including this round's prompt, written before the user steered — so the
match needs no prompt anchor and cannot touch history. Candidates stay
limited to what the detail projected, keeping every compared timestamp
on the agent's clock, and anything unreadable suppresses nothing.

The message also shows the time it was actually sent rather than the
turn's start, which is the same stamp read for display.
X
xintaofei committed
dcedd99e54b15b7539e879f34df5cd267db820b8
Parent: d65deb3