The concurrent-soft-delete guard was already covered; add the missing assertion that update() returns toView(updated) from the post-update re-fetch (full AgentRoleView shape, distinct second findById row), so a regression returning the stale pre-update view or leaking columns is caught. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>