Renn F
dba231474b
fix(lifecycle): stop cell-PM redirect clobbering review handoffs; cascade dependency prune on delete/cancel
...
Two live bugs the CEO hit daily, both in TaskService:
1. awaiting_qa / awaiting_documentation tasks were assigned to the cell
PM (be-pm) and deadlocked until manually reassigned. _resolve_cell_pm_redirect
forces every cell-PM-owned task type (documentation/design/research/planning/
administrative) onto the cell PM on every reassign(). The gateway hands off
to QA (i_am_done) and to the documenter (pass_review) via reassign(), so the
redirect clobbered the rightful reviewer — who has no claim right on those
states per CLAIM_RULES. The redirect is for delegation/escalation ownership
routing, not for clobbering a review handoff. Gate it on
_REVIEW_HANDOFF_STATUSES (awaiting_qa / awaiting_documentation /
awaiting_pr_review); awaiting_pm_review is deliberately excluded (the cell
PM IS the owner there, so the redirect still fires).
2. Deleting or cancelling a task left a dependent BLOCKED on it stuck
forever — the CEO caught a good-to-go task held by a stale dependency on a
deleted task. delete() and cancel() never called _unblock_dependents (the
edge-prune only the complete()/ceo_approve paths ran), so a BLOCKED
dependent was never auto-revived. (A PENDING dependent's claim was not
blocked — unmet_dependency_ids treats a missing row as "met" — but a
BLOCKED dependent is past the gate and only _unblock_dependents revives it.)
Both paths now loop _unblock_dependents over the root and every descendant;
idempotent, and a deleted id in completed_dependency_ids is a dead-end node
in the sequence graph so it cannot false-block.
Tests: 3 unit (review-handoff preserved for QA/doc/PR-reviewer; PM-review and
CLAIMED redirects still fire) + 3 integration (delete/cancel revive a BLOCKED
dependent; delete prunes a PENDING dependent).
2026-08-01 23:48:38 +02:00
..
2026-07-19 11:50:47 +02:00
2026-07-11 15:51:19 +02:00
2026-07-25 00:41:13 +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-07-31 13:56:19 +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-31 13:56:19 +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-31 13:56:19 +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-07-07 10:09:23 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-31 13:56:19 +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-08-01 23:48:38 +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-31 18:48:45 +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-07-31 13:56:19 +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