Build image / build-and-push (push) Successful in 11s
Address the Gadfly review of #118: - Forbid <img> (`disallowedElements`): a prompt-injected reply could embed ``, which the browser auto-fetches — a data exfiltration beacon. The assistant has no reason to emit images. Tested. - Give the lazy Markdown chunk the same stale-chunk recovery the routes get: extract `lazyPage` to its own module and use it in ChatPanel, so a post-deploy 404 doesn't permanently break the assistant. `lazyPage` now preserves the component's prop type instead of erasing to `{}`. - Wrap the renderer in an error boundary that falls back to the raw text, so a chunk that can't load (or a renderer that throws) degrades to readable text rather than taking the editor down. - Memoize MarkdownMessage and hoist its plugin/regex constants so typing in the composer doesn't re-parse every message in the thread. - Correctness: detect fenced code with no info-string (newline check, not just the language- class); pass `start` through on ordered lists; pass GFM column alignment (`style`) through on th/td instead of hardcoding left; de-dup the heading renderers and style all six levels. - Disable "Start over" while a turn is in flight — clearing mid-turn raced the in-flight stream. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01H3zbym8Doka2d7D48maSgZ