Renn F
e6c9dde2a9
fix(runtime): stop the chown storm from starving claims, and savepoint the PM journal auto-record
...
Claim-shaped verbs were failing 7/7 (claim_review) and 6/6
(claim_doc_task) as silent 120s FlowVerbTimeout 504s on the NAS: the
per-claim ownership repair walked the whole clone issuing two stat
syscalls per entry (chown_ms 39502 vs git_ms 8 in the live log), several
passes stacked per claim, and the claim transaction held the task row
the whole time — so concurrent writers queued behind it into the 60s
lock_timeout. The walk now does one stat per entry shared by the
chown-skip and chmod-skip checks, and a .git/roboco-owned sentinel
(worktree-aware via _resolve_clone_root, written only after a
zero-failure pass) skips the walk entirely when the tree is already
agent-owned. Every root-side git write invalidates the sentinel BEFORE
its subprocess runs — GitService._run_git for scope != none, plus the
three raw-subprocess paths inside WorkspaceService the adversarial pass
proved bypass it deterministically on the common respawn shape
(_worktree_git for mutating verbs, _fetch_branch_ref,
_fetch_origin_best_effort) — so a live marker can never vouch for files
a root write is about to create.
One of those queued writers was the PM journal-decision auto-record:
its INSERT hit the lock timeout, _ensure_pm_decision's catch-all
swallowed it without rollback, and the poisoned session blew up
escalate_up with PendingRollbackError (live incident). The helper's try
body now runs in a savepoint — one fix covering all seven PM verbs that
route through it — verified empirically against real Postgres in both
directions: the failure path leaves the session healthy and the task
object readable, and create_entry's internal commit inside the savepoint
drains the transactional outbox exactly once.
2026-07-31 01:53:07 +02:00
..
2026-07-19 11:50:47 +02:00
2026-07-11 15:51:19 +02:00
2026-05-02 03:11:49 +02:00
2026-05-02 03:11:49 +02:00
2026-07-25 00:41:13 +02:00
2026-05-08 12:18:00 +02:00
2026-07-01 01:11:34 +02:00
2026-07-23 21:09:50 +02:00
2026-07-25 17:13:32 +02:00
2026-07-27 01:28:33 +02:00
2026-06-14 13:43:46 +02:00
2026-06-29 05:38:21 +02:00
2026-06-15 01:23:03 +02:00
2026-07-26 19:11:27 +02:00
2026-07-18 19:11:03 +02:00
2026-07-02 21:05:50 +02:00
2026-06-30 08:08:35 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-07 10:09:23 +02:00
2026-05-16 06:20:35 +02:00
2026-06-29 05:38:21 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-23 21:09:50 +02:00
2026-06-29 05:38:21 +02:00
2026-06-14 13:43:46 +02:00
2026-06-17 16:50:11 +02:00
2026-07-11 22:54:42 +02:00
2026-07-23 00:05:33 +02:00
2026-07-07 10:09:23 +02:00
2026-06-29 05:38:21 +02:00
2026-07-19 17:38:30 +02:00
2026-06-16 18:01:40 +02:00
2026-06-29 11:32:34 +02:00
2026-07-10 19:55:38 +02:00
2026-07-10 00:15:04 +02:00
2026-07-10 00:15:04 +02:00
2026-06-29 11:32:34 +02:00
2026-07-11 09:21:24 +02:00
2026-07-24 17:50:13 +02:00
2026-07-19 08:12:34 +02:00
2026-07-23 21:54:45 +02:00
2026-06-29 05:38:21 +02:00
2026-06-29 05:38:21 +02:00
2026-07-19 08:12:34 +02:00
2026-07-19 08:12:34 +02:00
2026-06-29 05:38:21 +02:00
2026-07-31 01:53:07 +02:00
2026-06-19 09:15:01 +02:00
2026-06-15 07:03:59 +02:00
2026-07-18 15:55:55 +02:00
2026-07-19 08:12:34 +02:00
2026-07-19 08:12:34 +02:00
2026-07-24 17:50:13 +02:00
2026-07-24 14:34:25 +02:00
2026-07-24 14:34:25 +02:00
2026-07-24 14:34:25 +02:00
2026-06-29 11:32:34 +02:00
2026-07-24 17:50:13 +02:00
2026-06-25 18:35:52 +02:00
2026-06-14 23:18:58 +02:00
2026-06-29 05:38:21 +02:00
2026-07-19 08:12:34 +02:00
2026-07-24 17:50:13 +02:00
2026-07-22 03:31:12 +02:00
2026-07-19 11:50:47 +02:00
2026-07-07 10:09:23 +02:00
2026-07-05 13:37:17 +02:00
2026-05-14 04:21:07 +02:00
2026-07-07 10:09:23 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-06-30 08:08:35 +02:00
2026-07-25 17:13:32 +02:00
2026-06-26 01:43:08 +02:00
2026-06-23 07:26:41 +02:00
2026-07-05 16:12:44 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-30 16:35:42 +02:00
2026-07-20 20:59:36 +02:00
2026-07-29 23:23:29 +02:00
2026-07-15 08:25:20 +02:00
2026-06-29 05:38:21 +02:00
2026-07-04 03:10:33 +02:00
2026-06-14 13:43:46 +02:00
2026-06-15 06:12:00 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-04 03:10:33 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-06-26 01:43:08 +02:00
2026-07-04 03:10:33 +02:00
2026-06-29 05:38:21 +02:00
2026-06-29 05:38:21 +02:00
2026-07-07 10:09:23 +02:00
2026-07-30 23:37:27 +02:00
2026-07-19 08:12:34 +02:00
2026-07-23 21:09:50 +02:00
2026-07-01 01:11:34 +02:00
2026-07-15 05:45:57 +02:00
2026-07-22 03:31:12 +02:00
2026-07-23 00:06:14 +02:00
2026-07-15 04:34:06 +02:00
2026-07-10 03:59:13 +02:00
2026-07-22 03:31:25 +02:00
2026-07-10 09:38:10 +02:00
2026-07-08 16:03:00 +02:00
2026-06-29 05:38:21 +02:00
2026-06-30 08:08:35 +02:00
2026-06-30 08:08:35 +02:00
2026-06-29 05:38:21 +02:00
2026-07-16 04:30:18 +02:00
2026-07-22 08:11:28 +02:00
2026-07-22 08:11:28 +02:00
2026-07-18 16:35:28 +02:00
2026-07-22 15:53:02 +02:00
2026-07-14 02:22:37 +02:00
2026-07-25 17:13:32 +02:00
2026-07-07 10:09:23 +02:00
2026-07-22 15:53:02 +02:00
2026-07-18 16:48:45 +02:00
2026-07-25 17:13:32 +02:00
2026-07-18 16:48:45 +02:00
2026-07-09 05:26:30 +02:00
2026-06-29 05:38:21 +02:00
2026-07-18 16:41:18 +02:00
2026-06-21 02:48:07 +02:00
2026-06-15 20:47:41 +02:00
2026-06-15 20:47:41 +02:00
2026-07-26 19:11:27 +02:00
2026-07-25 05:39:44 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 15:07:28 +02:00
2026-07-04 03:10:33 +02:00
2026-07-07 10:09:23 +02:00
2026-07-02 18:28:07 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-24 13:53:29 +02:00
2026-06-29 05:38:21 +02:00
2026-07-22 03:31:01 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 05:39:44 +02:00
2026-06-21 02:48:07 +02:00
2026-07-23 21:09:50 +02:00
2026-07-11 22:54:42 +02:00
2026-07-23 09:41:27 +02:00
2026-07-19 17:38:30 +02:00
2026-07-18 00:44:48 +02:00
2026-06-29 11:32:34 +02:00
2026-07-11 09:21:24 +02:00
2026-07-13 13:57:14 +02:00
2026-06-03 06:35:03 +02:00
2026-07-07 10:09:23 +02:00
2026-07-29 23:23:29 +02:00
2026-07-19 07:40:18 +02:00
2026-07-18 15:54:49 +02:00
2026-07-23 21:09:50 +02:00
2026-07-25 17:13:32 +02:00
2026-07-18 15:54:49 +02:00
2026-06-17 20:50:07 +02:00
2026-07-23 21:09:50 +02:00
2026-07-07 10:09:23 +02:00
2026-06-22 13:02:59 +02:00
2026-06-30 08:08:35 +02:00
2026-06-12 23:10:21 +02:00
2026-07-25 00:49:13 +02:00
2026-07-11 22:54:42 +02:00
2026-07-11 09:21:12 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 22:54:42 +02:00
2026-07-22 08:11:28 +02:00
2026-07-22 08:11:28 +02:00
2026-07-16 19:49:26 +02:00
2026-07-25 17:13:32 +02:00
2026-07-07 10:09:23 +02:00
2026-07-07 10:09:23 +02:00
2026-06-22 12:37:46 +02:00
2026-06-11 18:16:20 +02:00
2026-07-31 01:53:07 +02:00
2026-05-12 22:40:15 +02:00
2026-05-12 22:40:15 +02:00
2026-07-31 01:53:07 +02:00
2026-07-10 00:15:04 +02:00
2026-06-08 05:17:15 +02:00
2026-07-07 10:09:23 +02:00
2026-06-05 16:35:22 +02:00
2026-06-22 01:59:41 +02:00
2026-06-29 11:32:34 +02:00
2026-06-30 11:05:22 +02:00
2026-07-24 20:29:20 +02:00
2026-06-29 11:32:34 +02:00
2026-07-30 16:35:42 +02:00
2026-07-25 17:13:32 +02:00
2026-07-28 23:52:04 +02:00
2026-07-28 23:52:04 +02:00
2026-07-05 13:37:17 +02:00