治理台原先调 memory 的五指标版,还把 submissions/corrections/judgements 硬塞 0 —— 仪表在说谎。八指标本就在 report 里算好,这里接上,与工作台汇报同源同口径。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
2.1 KiB
2.1 KiB
module: report
职责: 汇报(日/周/月/年)对任务日志的聚合投影;度量八指标的计算 不负责: 任务日志本身(见 memory)、终态与预算(见 task)—— 本模块只读不写这两处; 活动记忆与蒸馏(见 memory)
公开出口: index.ts
- 类型:
ReportServiceReportReportDraftReportSectionReportPeriodWindowMetricsLogFactTaskFact - 错误:
ReportNotFoundErrorReportAlreadySubmittedError - 端口类型:
ReportStoreFactSource - 用例工厂:
createReportService(deps): ReportService - 纯函数:
windowOfperiodLabeldraftReportcomputeMetrics;常量REPORT_PERIODS - adapter:
createReportStore;Drizzle 表:reports
层级: L8(编码规范 §4)
依赖: @contracts;@shared/db;port:FactSource(memory L2 + task L6,由 app 注入)
被依赖: app(路由组装)
不变量(OS 2.1 / 8.1 / 8.3):
- 零手工汇报:草案的每一句都取自任务日志;员工唯一的手工位是确认前补的一段话
- 汇报是投影不是账本:未提交的草案每次取回都重算;提交那一刻才固定为事实快照
- 确认即提交,提交后不再改(
ReportAlreadySubmittedError) - 口径挂归侧与事件流,零埋点:输入只有归侧日志行与任务终态,没有第三种埋点
- 自主率与纠正率成对读,复合为有效自主率 —— 单看任一都会被优化坏
- 单位成本的分母只认放行通过:跑得多不等于产出多
- 度量是只读投影,不设独立模块(§4 注);治理台驾驶舱与工作台汇报同源同口径
- 周期窗口左闭右开、周一为首日、按 UTC 切分(单组织单时区)
近变(2026-07-27):
- 模块面未变。app 层的
GET /api/gov/metrics(运营驾驶舱)改接本模块的metrics(undefined, period)—— 此前它调 memory 的五指标版并把 submissions / corrections / judgements 硬塞 0,纠正率与 DMN 覆盖率结构性恒为 0。 「治理台与工作台汇报同源同口径」这一条,从此在代码里也成立。