8e01a953dc
Compose now prompts Keep / Discard on Cancel when the top-level body is non-empty. The default action keeps the draft (matching the silent behaviour we had before), but users who want to start fresh can now do so from inside the sheet without having to tap-and-hold the TextEditor to select and delete. Profile view becomes `.searchable()` with a case-insensitive substring match on post body + tags. The filter runs locally on the parsed profile so it's cheap even on large feeds. TODO.org gains a "Post-1.0 enhancements" section summarising every interaction-fidelity, timeline, compose, render, network and test change landed during this review pass.