defer-delete: 10s cancel window on segment + journal-entity deletes
Replace the synchronous DELETE paths for transcript segments and journal
entities with a defer-then-commit flow backed by a process-local
threading.Timer registry (`think/deferred_deletes.py`). DELETE returns a
`pending_id` + commit time; a new Cancel endpoint pops the timer before
it fires. Validation still runs synchronously — principal guards, path
checks, containment checks all land their errors before scheduling.
Process restart drops pending timers; audit log retains the orphan
`phase: "pending"` row as an intentional fail-safe. Extended the
notification framework with an `actionButton` slot and wired Cancel into
both workspaces; notification dismiss is distinct from deferred-delete
cancel.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>