Messages arriving from a cloud session are checked field by field so bad frames can't corrupt your transcript.
What's wrong with this entry?
The layer that converts messages arriving from a remote Claude Code session into local ones now checks every field instead of trusting it, so a malformed frame is dropped or repaired and logged rather than corrupting the local transcript.
- A missing or non-string message id gets a freshly generated one, logged at error level.
- Frames whose
contentis not a string are dropped, as are tool-progress frames with a non-string tool name or a non-finite elapsed time, and compaction-boundary frames with no metadata. - On the session-init frame, each of model, working directory, slash commands, MCP servers and tools is ignored with a log line when it arrives in the wrong shape, rather than being adopted.
[sdkMessageAdapter] init frame tools is not an array
Strings lifted out of the shipped bundle, so the claim above can be checked against them.