From ffe7001b4273b7ad31f91cbfb50f8e88ade7de30 Mon Sep 17 00:00:00 2001 From: Script Generator Date: Mon, 29 Jun 2026 17:42:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=B0=8F=E5=AE=9D=E9=A2=84=E8=AD=A6):=20?= =?UTF-8?q?=E9=80=8F=E4=BC=A0=E9=A3=8E=E9=99=A9=E6=97=A5=E6=8A=A5=E8=AF=81?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/lib/xiaobao-risk.test.ts | 24 ++++++++++++++++++++++++ apps/web/lib/xiaobao-risk.ts | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/apps/web/lib/xiaobao-risk.test.ts b/apps/web/lib/xiaobao-risk.test.ts index b80ccea..78d9dfe 100644 --- a/apps/web/lib/xiaobao-risk.test.ts +++ b/apps/web/lib/xiaobao-risk.test.ts @@ -4,6 +4,7 @@ import { calcXiaobaoVersionRisk } from './xiaobao-risk'; import type { DevTask } from './dev-task'; import type { TestCase } from './test-case'; import type { Bug } from './bug'; +import type { VersionDailyEvidence } from './xiaobao-risk-evidence'; function version(patch: any = {}) { return { @@ -104,3 +105,26 @@ test('calcXiaobaoVersionRisk marks blocked when critical Bug / blocked dev task assert.ok(risk.reasons.some((reason: { key: string }) => reason.key === 'critical_bug')); assert.ok(risk.reasons.some((reason: { key: string }) => reason.key === 'blocked_work')); }); + +test('calcXiaobaoVersionRisk preserves daily evidence on the returned risk object', () => { + const dailyEvidence: VersionDailyEvidence = { + todayDeliveries: [{ id: 'ev-1', title: '提交提测', summary: '完成核心流程', occurredAt: '2026-07-02T02:00:00.000Z' }], + todayProgress: [], + todayRisks: [], + progressNotes: [], + needsProgressItems: [], + recentActivityCount: 1, + lastActivityAt: '2026-07-02T02:00:00.000Z', + }; + + const risk = calcXiaobaoVersionRisk({ + version: version(), + devTasks: [], + testCases: [], + bugs: [], + dailyEvidence, + now: new Date('2026-07-02T01:00:00.000Z'), + }); + + assert.equal(risk.dailyEvidence, dailyEvidence); +}); diff --git a/apps/web/lib/xiaobao-risk.ts b/apps/web/lib/xiaobao-risk.ts index c647a95..0b151e6 100644 --- a/apps/web/lib/xiaobao-risk.ts +++ b/apps/web/lib/xiaobao-risk.ts @@ -3,6 +3,7 @@ import type { DevTask } from './dev-task'; import { STATUS_PROGRESS, getEstimateHours } from './dev-task'; import type { TestCase } from './test-case'; import { getTestCaseEstimateHours } from './test-case'; +import type { VersionDailyEvidence } from './xiaobao-risk-evidence'; import { WORK_HOURS, addWorkHours } from './work-hours'; export type XiaobaoRiskLevel = 'on_track' | 'attention' | 'at_risk' | 'likely_delayed' | 'blocked'; @@ -55,6 +56,7 @@ export interface XiaobaoVersionRisk { remainingWorkHours: number; reasons: RiskReason[]; silentRisks: SilentRisk[]; + dailyEvidence?: VersionDailyEvidence; signals: XiaobaoRiskSignals; trend: { direction: 'up' | 'down' | 'flat' | 'unknown'; @@ -71,6 +73,7 @@ export interface CalcXiaobaoVersionRiskInput { now?: Date; snapshots?: Array<{ riskScore: number; createdAt?: string; date?: string }>; silentRisks?: SilentRisk[]; + dailyEvidence?: VersionDailyEvidence; recentActivityCount?: number; lastActivityAt?: string; } @@ -197,6 +200,7 @@ export function calcXiaobaoVersionRisk(input: CalcXiaobaoVersionRiskInput): Xiao remainingWorkHours, reasons, silentRisks, + dailyEvidence: input.dailyEvidence, signals, trend, };