Same cost on 0.1.7-nightly.20261103.4119 (Linux x64, headless server, statev2.sqlite 28.5 GB). The thread is a coordinator that gets scheduled wake-ups and runs subagents: 3,722 runs and 36,791 turn items with 207 MB of payload.
Over 16.8 h of trace on 4119, message.dispatch to that thread: n=103, p50 2.1 s, 77 over 1 s, 23 over 5 s, max 108 s. That one thread has 23 of the server's 43 dispatches over 5 s.
The three slowest (83 s, 106 s and 108 s) are each one readCanonicalProjection in a reader transaction. The turn_items payload read alone took 41–72 s, and heap growth was 100–135 MB per dispatch. After it came nodes (13–23 s) and messages (6–16 s).
One difference from your trace: here the other reads did wait. While those dispatches ran, ProjectionStore.getThreadsWithPullRequests (the minute PR sweep), the projects list and some node reads show db.lock_wait_ms of 30–105 s. So the whole server stalls for as long as the dispatch takes. For example, at 16:43 UTC the dispatch held its read from 16:43:18 to 16:45:03, and the sweep that started at 16:43:24 waited 98.9 s of its 99.5 s.
A second server on the same build has a 3.4 GB database and short threads. Its message.dispatch p90 is 0.98 s (max 1.8 s).
Measured with Claude Opus 5.5 in OpenCode.