fix double-box user bubble: Gradio nests .message.user > [data-testid=user]; my selector styled BOTH -> two stacked boxes. Now the OUTER is the single bubble, the INNER is flattened (transparent/no box). Verified via live CSS injection.
fix chart blank: 1B was WRITING chart.png as TEXT (623-byte bogus png -> 0x0 render). write tool now REFUSES image-ext text-writes + steers to matplotlib savefig; _render_media_file skips files without a real image magic-number (no blank bubble).
fix REGRESSION: prompt hardening ('write then final answer is one sentence') made the 1B SKIP the bash run + hallucinate 'saved chart.png' without running -> no image. Restore: after writing a runnable script you MUST run it with bash + read output before answering; never claim you ran code you did not.
fix chart/media not displaying: the 1B savefig's to an absolute /workspace/ path inside the script (bash rewrite can't reach in-code paths), so the PNG landed outside the scanned sandbox. Now: ensure /workspace exists at startup + _extra_media scans it this-turn-only (no cross-session leak; concurrency_limit=1). Refactored shared _render_media_file.