Dotta and Paperclip
b930ecf415
feat(ui): surface feedback delivery recovery states on the source comment
...
Implements the approved UX spec. Delivery state renders on the
human comment it belongs to, never as a new task status:
- retrying: one quiet footer line beside the comment's timestamp, revealed only
after the ~400ms Doherty window, polite live region, no operator control while
automatic recovery still owns the problem, static icon under reduced motion.
- exhausted: a persistent compact warning InlineBanner directly under the
comment with Retry delivery, an authorized View run (omitted, never disabled,
when no safe route exists), a one-shot alert announcement, and a focusable
anchor for the attention deep link. Retry pending/error state stays on that
one button and reports failure inline, not only via toast.
- recovered: the warning is replaced in place by the existing success
SystemNotice so the operator can see why attention disappeared. Quiet
transient recovery morphs to "Delivered after retry" for 5s and leaves
nothing behind.
State is shown once: the generic recovery card is suppressed for
feedback_delivery in the thread, and the attention queue gets one plain-language
operator row per feedback batch deep-linked at the banner. That row is new — an
exhausted delivery is agent-owned but carries manual_repair_required, so it had
no inbox surface at all.
44 focused tests (29 component, 3 thread integration, 1 live-Postgres attention,
plus the 18 projection tests) and pnpm check:token-gates pass.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-08-16 19:23:56 +00:00
..
2026-08-16 19:23:56 +00:00
2026-06-06 12:45:57 -05:00
2026-08-05 23:40:05 -05:00
2026-07-09 13:08:56 -05:00
2026-06-10 21:09:02 -07:00
2026-06-10 21:09:02 -07:00
2026-04-24 15:50:32 -05:00
2026-07-09 13:08:56 -05:00
2026-06-10 21:09:02 -07:00
2026-06-10 21:09:02 -07:00
2026-08-04 23:07:38 -05:00
2026-06-06 12:45:57 -05:00
2026-03-26 11:12:25 -05:00
2026-06-19 08:35:53 -07:00
2026-06-25 09:49:10 -05:00
2026-07-14 14:22:39 -05:00
2026-04-24 15:50:32 -05:00
2026-08-05 21:49:40 -05:00
2026-07-28 11:12:58 -07:00
2026-08-16 13:46:50 -05:00
2026-08-16 19:23:56 +00:00
2026-08-13 10:14:05 -07:00
2026-07-30 16:52:58 -07:00
2026-08-11 14:39:23 -04:00
2026-08-11 14:39:23 -04:00
2026-07-06 16:33:36 -05:00
2026-07-09 16:29:30 -05:00
2026-08-11 09:06:21 -07:00
2026-07-22 20:35:51 -07:00
2026-05-28 07:33:51 -10:00
2026-07-09 16:29:30 -05:00
2026-08-04 23:00:14 -05:00
2026-06-20 16:17:54 -07:00
2026-08-12 08:58:25 -07:00
2026-08-12 08:58:25 -07:00
2026-08-12 16:08:49 -07:00
2026-07-27 19:13:35 -05:00
2026-08-14 22:11:16 -07:00
2026-08-11 15:25:07 -07:00
2026-07-09 16:29:30 -05:00
2026-08-10 17:01:33 -07:00
2026-07-15 21:44:21 -05:00
2026-05-06 06:32:37 -05:00
2026-07-15 19:05:06 -05:00
2026-07-15 11:42:40 -05:00
2026-08-07 00:42:08 -05:00
2026-08-11 15:25:07 -07:00
2026-07-09 13:08:56 -05:00
2026-08-16 13:46:50 -05:00
2026-08-06 11:56:40 -05:00
2026-07-07 05:54:20 -05:00
2026-08-02 10:47:03 -05:00
2026-08-02 10:47:03 -05:00
2026-07-31 22:48:32 -07:00
2026-07-17 13:27:32 -05:00
2026-08-02 10:47:03 -05:00
2026-08-05 09:55:01 -05:00
2026-07-09 22:11:03 -05:00
2026-07-30 16:52:58 -07:00
2026-06-30 14:50:25 -07:00
2026-08-07 14:29:58 -07:00
2026-07-10 14:32:47 -07:00
2026-07-03 16:44:21 -07:00
2026-07-03 16:44:21 -07:00
2026-07-03 16:44:21 -07:00
2026-07-10 14:32:47 -07:00
2026-08-07 14:29:58 -07:00
2026-07-10 14:32:47 -07:00
2026-08-15 18:52:08 -07:00
2026-08-15 18:52:08 -07:00
2026-08-11 11:40:57 -07:00
2026-08-11 11:40:57 -07:00
2026-08-11 11:40:57 -07:00
2026-06-10 21:09:02 -07:00
2026-06-10 21:09:02 -07:00
2026-08-11 11:40:57 -07:00
2026-08-14 16:44:31 -07:00
2026-07-30 11:37:00 -07:00
2026-08-02 20:24:52 -07:00
2026-08-16 19:23:56 +00:00
2026-04-02 09:11:49 -05:00
2026-04-03 15:59:42 -05:00
2026-06-05 03:20:46 +00:00
2026-04-15 21:13:56 -05:00
2026-07-16 15:50:45 -05:00
2026-08-02 22:14:58 -07:00
2026-08-05 16:34:04 -05:00
2026-08-02 20:27:09 -07:00
2026-08-05 16:34:04 -05:00
2026-07-02 22:21:56 -07:00
2026-07-02 22:21:56 -07:00
2026-08-12 16:43:13 -07:00
2026-07-07 20:30:09 -05:00
2026-07-10 13:21:12 -05:00
2026-08-16 19:23:56 +00:00
2026-04-04 14:04:33 -05:00
2026-07-31 21:55:59 -07:00
2026-08-04 11:44:43 -05:00
2026-08-10 17:01:33 -07:00
2026-07-16 16:49:18 -05:00
2026-07-10 17:09:57 -05:00
2026-08-16 19:23:56 +00:00
2026-08-11 11:40:57 -07:00
2026-04-17 09:44:19 -05:00
2026-07-14 15:47:58 -07:00
2026-07-17 11:03:07 -05:00
2026-07-31 18:52:59 -07:00
2026-07-07 20:30:09 -05:00
2026-07-03 18:30:51 -07:00
2026-08-01 15:43:13 -07:00
2026-03-24 11:48:59 -05:00
2026-04-24 15:50:32 -05:00
2026-07-07 13:41:23 -07:00
2026-06-05 03:20:46 +00:00
2026-08-16 13:46:50 -05:00
2026-08-04 13:17:49 -05:00
2026-08-16 13:46:50 -05:00
2026-08-16 13:46:50 -05:00
2026-08-16 13:46:50 -05:00
2026-08-16 13:46:50 -05:00
2026-07-17 11:03:07 -05:00
2026-07-09 13:08:56 -05:00
2026-08-16 13:46:50 -05:00
2026-07-28 10:50:13 -07:00
2026-07-11 03:02:21 -05:00
2026-06-05 16:48:02 -05:00
2026-07-27 18:58:31 -07:00
2026-08-11 11:40:57 -07:00
2026-08-11 11:40:57 -07:00
2026-08-07 00:41:42 -05:00
2026-08-07 00:41:42 -05:00
2026-07-14 14:22:39 -05:00
2026-08-11 09:06:21 -07:00
2026-08-11 09:06:21 -07:00
2026-08-12 22:54:07 -07:00
2026-07-09 13:08:56 -05:00
2026-06-26 12:02:44 -05:00
2026-07-09 13:08:56 -05:00
2026-07-24 16:47:24 -05:00
2026-08-13 14:23:09 -07:00
2026-07-22 21:30:34 -07:00
2026-05-15 10:20:02 -05:00
2026-05-12 17:38:24 -05:00
2026-07-29 12:50:16 -07:00
2026-08-16 13:46:50 -05:00
2026-08-04 23:00:14 -05:00
2026-05-20 10:37:11 -05:00
2026-08-11 19:10:45 -07:00
2026-05-17 17:15:06 -05:00
2026-05-10 07:34:12 -05:00
2026-07-24 16:47:24 -05:00
2026-05-10 07:34:12 -05:00
2026-07-23 09:50:48 -07:00
2026-07-14 12:57:20 -05:00
2026-06-03 19:13:21 -07:00
2026-06-03 19:13:21 -07:00
2026-08-07 14:29:58 -07:00
2026-05-28 07:33:51 -10:00
2026-05-22 08:12:52 -05:00
2026-08-10 17:00:32 -07:00
2026-04-20 10:39:37 -05:00
2026-07-24 07:19:58 -07:00
2026-08-04 13:54:40 -05:00
2026-07-21 15:16:26 -05:00
2026-07-27 19:13:35 -05:00
2026-07-05 05:58:20 -05:00
2026-07-05 05:58:20 -05:00
2026-07-23 15:49:28 -05:00
2026-06-12 10:15:53 -07:00
2026-08-12 16:09:00 -07:00
2026-04-24 15:50:32 -05:00
2026-07-10 13:21:12 -05:00
2026-07-30 14:01:02 -07:00
2026-07-30 14:01:02 -07:00
2026-07-08 13:38:36 -05:00
2026-07-08 13:38:36 -05:00
2026-08-06 10:29:07 -05:00
2026-07-27 19:45:59 -05:00
2026-06-22 19:35:53 -07:00
2026-08-05 21:49:40 -05:00
2026-08-05 21:49:40 -05:00
2026-05-13 16:23:04 -05:00
2026-05-13 16:23:04 -05:00
2026-08-12 13:02:49 -07:00
2026-08-12 13:02:49 -07:00
2026-04-09 06:16:05 -05:00
2026-04-14 12:57:11 -05:00
2026-06-19 09:14:41 -07:00
2026-07-21 15:16:26 -05:00
2026-06-05 16:48:02 -05:00
2026-08-04 13:54:40 -05:00
2026-07-24 12:26:43 -05:00
2026-07-24 16:44:56 -05:00
2026-07-24 16:44:56 -05:00
2026-08-05 15:59:01 -05:00
2026-07-17 11:03:07 -05:00
2026-08-11 08:56:32 -04:00
2026-07-31 18:52:23 -07:00
2026-06-19 15:38:52 -05:00
2026-08-16 13:46:50 -05:00
2026-06-05 12:55:49 -05:00
2026-07-21 15:16:26 -05:00
2026-08-13 16:15:12 -07:00
2026-07-14 14:22:39 -05:00
2026-08-13 16:15:12 -07:00
2026-07-14 14:22:39 -05:00
2026-07-14 14:22:39 -05:00
2026-07-14 14:22:39 -05:00
2026-07-14 14:22:39 -05:00
2026-06-05 16:48:02 -05:00
2026-07-30 16:52:58 -07:00
2026-07-30 21:40:57 -07:00
2026-08-11 12:11:45 -04:00
2026-08-02 10:37:10 -05:00
2026-06-23 09:00:14 -05:00
2026-08-02 10:37:10 -05:00
2026-07-31 18:54:11 -07:00
2026-07-31 18:54:11 -07:00
2026-08-01 16:04:43 -05:00
2026-08-14 16:44:31 -07:00