Skip to content

fix(automation): 每日简报把往日的自动化运行当作今日待办,抬高「需要注意」计数 #239

Description

@wxrbyte

问题

buildBrief() 产生的「需要你注意」条目里会混入往日的自动化运行——昨天甚至上周的 run 会被当成今天需要注意的事,并把摘要里的计数一起抬高。

同一个函数对同一个 inputs.runs 数组用了两种口径:

  • packages/shared/src/automation/brief.ts:101 的 quiet 统计走 latestRunsForCurrentDay(inputs.runs, now);该私有函数的文档注释就在 :221:"Use only the latest successful run per rule on the brief's local calendar day."
  • 但 :97 的 automationItems(inputs)(实现见 :200)直接消费未过滤的 inputs.runs,只按 run.materialChanges > 0 || run.notified 过滤。

生产链路传入的是全量历史运行,没有任何日期上界:

  • apps/electron/src/main/kernelHost.ts:2249 automationBuildBrief() → :2251 this.automationRuns.list()(无参数)→ :2269 原样交给 buildBrief({ runs, ... })。
  • 该函数同时被 apps/electron/src/main/index.ts:552 的 automation:buildBrief IPC 暴露,渲染侧 packages/ui/src/client/automation.ts:119 的 loadDailyBrief() 把它显示在 Today 页的「每日简报」区。

「每日通报」这一语义也体现在 buildBrief 自身的输出上:summary 文案是 "N things need your attention."(spec §27),而 now 参数默认 Date.now()、函数名为 Daily Brief。

复现

const now = 1_700_000_000_000
const dayMs = 24 * 60 * 60 * 1000

const stale = { ...run, id: 'stale-run', ruleId: 'rule-stale', ranAt: now - 7 * dayMs, materialChanges: 3, notified: true }
const today = { ...run, id: 'today-run', ruleId: 'rule-today', ranAt: now,               materialChanges: 3, notified: true }

const brief = buildBrief({ runs: [stale, today], alerts: [], diffs: [], portfolio: [], movers: [] }, now)
  • 实际:brief.items 含 automation-stale-run 与 automation-today-run 两条;brief.summary === '2 things need your attention.'
  • 预期:只含当天那条;brief.summary === '1 thing needs your attention.'

用例已加入 packages/shared/src/automation/brief.test.ts:修复前 11 pass / 1 fail,修复后 12 pass / 0 fail。

建议修法

在 buildBrief 中只计算一次 latestRunsForCurrentDay(inputs.runs, now),把同一份结果同时喂给 automationItems 与 quiet 统计(消除两种口径)。

与其他 issue 的区别(避免重复)

环境

Bun 1.4.2 / Windows 11。bun test packages/shared/src/automation --isolate → 69 pass / 0 fail;bun run typecheck → 五工作区 exit 0。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

claimedClaimed by a contributor and currently in progress

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions