Renn F
a3d1769018
[F127] per-task advisory lock prevents open_pr milestone double-emit
...
open_pr's idempotent re-entry guard (pr_number is not None) read t.pr_number
from an unlocked fetch. Two concurrent same-task open_pr calls (the
alive-but-unresponsive respawn race) both fetched pr_number=None, both passed
the guard, both ran the runner (GitHub 422 ensures one PR), and both reached
_record_milestone_progress -> a double-emitted 70% 'opened PR #N' entry.
Fix: acquire_task_lock (pg_advisory_xact_lock, seed 2) before the fetch, held
through the runner + milestone + request commit. The second concurrent call
blocks until the first commits, then its fetch sees the committed pr_number
and the idempotent guard short-circuits without re-emitting. Per-task (single-
active-task guard means same-task concurrent open_pr is only the bug case).
2026-06-29 00:05:24 +02:00
..
2026-05-02 03:11:49 +02:00
2026-06-21 20:31:42 +02:00
2026-05-12 06:27:33 +02:00
2026-06-21 20:31:42 +02:00
2026-06-28 18:02:08 +02:00
2026-06-08 02:45:03 +02:00
2026-06-28 04:46:09 +02:00
2026-06-26 01:43:08 +02:00
2026-05-12 06:27:33 +02:00
2026-06-21 05:11:20 +02:00
2026-06-23 07:26:41 +02:00
2026-06-28 23:52:03 +02:00
2026-06-28 09:57:08 +02:00
2026-06-27 06:52:59 +02:00
2026-06-25 01:07:05 +02:00
2026-06-23 00:39:08 +02:00
2026-06-16 05:13:00 +02:00
2026-06-25 01:07:05 +02:00
2026-06-21 20:31:42 +02:00
2026-06-27 07:19:35 +02:00
2026-05-15 06:31:38 +02:00
2026-06-21 20:31:42 +02:00
2026-06-25 01:07:05 +02:00
2026-05-24 06:59:25 +02:00
2026-05-16 00:13:14 +02:00
2026-06-28 10:48:26 +02:00
2026-05-02 03:11:49 +02:00
2026-06-03 18:44:33 +02:00
2026-06-14 13:43:46 +02:00
2026-06-04 02:12:45 +02:00
2026-06-21 08:08:28 +02:00
2026-06-03 18:44:33 +02:00
2026-06-21 04:46:28 +02:00
2026-06-21 04:20:07 +02:00
2026-06-22 12:37:46 +02:00
2026-06-28 15:35:59 +02:00
2026-06-22 12:37:46 +02:00
2026-06-03 06:35:03 +02:00
2026-06-21 20:31:42 +02:00
2026-06-28 23:58:00 +02:00
2026-06-21 20:31:42 +02:00
2026-05-15 06:54:35 +02:00
2026-05-16 00:47:59 +02:00
2026-06-14 04:34:02 +02:00
2026-05-24 06:59:25 +02:00
2026-06-14 13:43:46 +02:00
2026-05-28 00:24:42 +02:00
2026-06-14 13:43:46 +02:00
2026-05-11 02:15:47 +02:00
2026-05-11 02:15:47 +02:00
2026-06-04 06:01:06 +02:00
2026-06-28 10:25:53 +02:00
2026-05-15 06:31:38 +02:00
2026-06-15 20:47:41 +02:00
2026-06-21 05:11:20 +02:00
2026-06-11 04:36:17 +02:00
2026-05-12 06:27:33 +02:00
2026-05-12 06:27:33 +02:00
2026-05-12 06:27:33 +02:00
2026-06-28 10:20:39 +02:00
2026-06-28 11:36:47 +02:00
2026-05-16 10:14:45 +02:00
2026-05-16 10:14:45 +02:00
2026-06-03 06:35:03 +02:00
2026-06-27 07:19:35 +02:00
2026-05-15 06:54:35 +02:00
2026-06-21 06:09:59 +02:00
2026-06-27 06:52:59 +02:00
2026-06-28 15:38:56 +02:00
2026-06-29 00:05:24 +02:00
2026-06-25 01:07:05 +02:00
2026-05-14 03:28:38 +02:00
2026-06-28 22:21:32 +02:00
2026-06-25 01:07:05 +02:00
2026-06-21 20:31:42 +02:00
2026-05-16 06:37:49 +02:00
2026-06-28 16:47:09 +02:00
2026-06-28 17:00:20 +02:00
2026-06-28 02:19:48 +02:00
2026-06-28 21:10:52 +02:00
2026-06-28 17:00:20 +02:00
2026-06-21 03:47:17 +02:00
2026-06-26 02:13:41 +02:00
2026-06-21 20:31:42 +02:00
2026-06-21 05:11:20 +02:00
2026-06-25 10:54:31 +02:00
2026-06-14 04:44:21 +02:00
2026-06-14 13:43:46 +02:00
2026-06-06 22:10:48 +02:00
2026-06-03 06:35:03 +02:00
2026-05-12 06:27:33 +02:00
2026-06-03 06:35:03 +02:00
2026-05-03 09:19:08 +02:00
2026-05-14 04:21:07 +02:00
2026-06-16 04:10:05 +02:00
2026-06-14 04:34:02 +02:00
2026-06-28 10:20:39 +02:00
2026-06-28 23:34:49 +02:00
2026-06-28 04:40:06 +02:00
2026-06-28 11:30:55 +02:00
2026-05-15 08:21:08 +02:00
2026-06-11 09:21:26 +02:00
2026-05-12 06:27:33 +02:00
2026-06-24 15:43:30 +02:00
2026-06-14 13:43:46 +02:00