Renn F
366800299b
[F008] evidence_builder: surface persisted pr_review verdict+issues in the PM task_handoff
...
The pr_fail a2a steer to the owning PM is fire-and-forget; a PM respawned
into needs_revision later read none of it (build_task_handoff never looked
at notes_structured), saw a generic 'needs revision' with zero concrete
change-requests, and re-submitted the same PR (the 2026-06-27 infinite
pr_fail loop on 9980d0a0 / PR #138 ). The signal-gap was only partially
closed by the a2a.
build_task_handoff now extracts notes_structured.pr_review
(verdict/summary/issues/head_sha — the slot pr_fail authors on every fail)
into a pr_review field on the handoff, so every PM briefing for the task
carries the concrete change-requests. A prior pr_fail alone now counts as
prior-work-worth-resuming. Type-guarded + capped; absent => no key (no
misleading empty slot).
TDD red->green; ruff + mypy clean; evidence_builder suite green (14 passed).
2026-06-28 10:25:53 +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-05-11 02:15:47 +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 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-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-22 12:37:46 +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-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-11 18:16:20 +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-06 22:10:48 +02:00
2026-06-25 01:07:05 +02:00
2026-05-14 03:28:38 +02:00
2026-06-26 01:43:08 +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 02:19:48 +02:00
2026-06-20 09:27:29 +02:00
2026-06-28 02:19:48 +02:00
2026-06-28 02:19:48 +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 10:23:54 +02:00
2026-06-28 04:40:06 +02:00
2026-06-22 13:06: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