Make attachment writes transactional and decode attachment URLs

- Stage attachment file writes until projector transactions commit, then apply write/prune/delete side effects
- Remove orphaned attachment files on thread revert and delete thread attachment dirs on thread deletion
- Serve URL-encoded attachment paths in `wsServer` and stream file responses
- Add regression tests for rollback safety, revert/delete cleanup, and encoded attachment URLs
b9ff7aa5cdJulius Marminge committed on 2/28/2026, 5:30:46 AM· committed by Julius Marmingeparentb5188e8
4 files changedLine totals unavailable