That's no excuse imho. I see 2 different endpoints, 1 for llm stream and 1 for msg history (with stamps).
New timestamps could be added FE as new messages start without polluting the user input for example
const + Object.freeze is a lot to remember and cumbersome to use throughout a codebase, very relevant to Carmack's wish for immutability by default. I'm grateful Rust opted for that default.