From ddd385cc4dfb7166d8660b0a498abd010f692667 Mon Sep 17 00:00:00 2001 From: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> Date: Thu, 29 Oct 2026 18:13:31 +0800 Subject: [PATCH] fix(chat): expose retained report execution failures Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com> --- apps/presentation/dashboard/src/data/chat.ts | 2 +- .../personal-workspace/steward-report.tsx | 3 ++- docs/product/periodic-reports.md | 8 ++++++++ .../steward_report_fixture.py | 12 ++++++++++++ .../native_chat/steward_reports.py | 17 ++++++++++++++--- tests/test_native_steward_reports.py | 19 +++++++++++++++++++ 6 files changed, 56 insertions(+), 5 deletions(-) diff --git a/apps/presentation/dashboard/src/data/chat.ts b/apps/presentation/dashboard/src/data/chat.ts index 7649ac4c3a..df720acba4 100644 --- a/apps/presentation/dashboard/src/data/chat.ts +++ b/apps/presentation/dashboard/src/data/chat.ts @@ -2768,7 +2768,7 @@ const privateConversationSchema = z.object({ z.object({available: z.literal(true), enabled: z.boolean(), configured: z.boolean(), schedule: z.record(z.string(), z.unknown()).nullable().optional(), next_due_at: z.string().nullable().optional(), retained_window_due_at: z.string().nullable().optional(), generation_id: z.string().nullable().optional(), - delivery_status: z.string().optional(), publication_verified: z.boolean().optional(), + delivery_status: z.string().optional(), execution_failed: z.boolean().optional(), publication_verified: z.boolean().optional(), destination: z.string().optional()}), z.object({available: z.literal(false), error_code: z.string()}), ]).optional(), diff --git a/apps/presentation/dashboard/src/features/personal-workspace/steward-report.tsx b/apps/presentation/dashboard/src/features/personal-workspace/steward-report.tsx index da24073516..19a7c6114d 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/steward-report.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/steward-report.tsx @@ -32,12 +32,13 @@ export function StewardReport({state, zh, busy, available, goalActive, onChange} : state.configured ? (zh ? "已暂停 · 原窗口和回执保留" : "Paused · Original windows and receipts retained") : (zh ? "尚未启用" : "Not enabled")}

{zh ? "汇总全部获准本机 Goal,包括停止项和读取缺口。每天汇报前24小时,生成与实际送达分别核验;状态监控照常运行。" : "Covers every authorized local Goal, including stopped Goals and read gaps. Daily reports cover the previous 24 hours; generation and delivery are verified separately. Monitoring continues."}

- {state.configured ?

{zh ? "下次计划:" : "Next deadline: "}{stamp(state.next_due_at)}
+ {state.configured ?

{zh ? "下次日历计划:" : "Next calendar deadline: "}{stamp(state.next_due_at)}
{zh ? "最近窗口:" : "Latest window: "}{stamp(state.retained_window_due_at)} · {state.delivery_status === "delivered" ? (zh ? "原私聊全文已核验送达" : "Full private reply verified") : state.delivery_status === "generation_failed" ? (zh ? "本期生成失败,证据保留;取消失败窗口后,后续到期可继续" : "Generation failed; evidence retained. Cancel this failed window to continue at a later deadline.") : state.delivery_status === "generation_cancelled" ? (zh ? "失败窗口已取消,未完成或送达;原证据保留" : "Failed window cancelled, not completed or delivered; evidence retained") : state.delivery_status === "unconfirmed" ? (zh ? "发送结果待确认,不重复发送" : "Send unconfirmed; no blind resend") + : state.execution_failed ? (zh ? "本期执行失败;原窗口保留,未自动重试" : "Execution failed; original window retained, no automatic retry") : state.generation_id ? (zh ? "已生成,投递待核验" : "Generated; delivery pending") : (zh ? "尚未生成" : "Not generated")}

: null}