Skip to main content
自定义 Report 不接收 Record 路径,也不在页面 render 时临时查数据。先声明所需的 RecordProjection,再定义 Calculation、Page、PageFamily 或 Download:

先选择官方 projector

NiceEval 内部负责把运行事实写入 Record,并提供形成 typed view 的官方 opaque projector。 Report 作者只选择这些 projector,不能定义 raw Attachment family 或读取 payload。
每个 projection 都有明确 owner 和访问方式。attemptSlotProjection 保留 Sample 的每个 slot;selectedRunProjection 只对 selected Run 读取;attemptOriginRunProjection 为每个 slot 读取其 Attempt 的 origin Run。 Report 不在 callback 中打开 Record,也不能通过 pure AnalysisSample 恢复 I/O。

定义计算

Calculation 使用静态声明的 inputs。它返回领域值,而不是让 host 推导通过率或分母。
选择 allow-partial 时,callback 能看到 ProjectedSample、coverage 和 issues。结果必须保留自己的业务分母与完整度。选择 require-complete 时,只要必需数据不完整,callback 不会执行。

定义页面和 Report

Page 返回闭合的语义 document,而不是 React、HTML 或文件路径。要为每个 Assertion、Turn 或 diagnostics category 增加详情页时,使用 definePageFamily。实例、route 和 document 只能从已经投影或计算出的内存值展开。

设成项目默认

niceeval.config.ts 中导入 Report。以后不带 --reportshowview 使用它:

处理不完整与失败

recorded-data problem 不会改变 Sample 分母:
  • unavailable 表示 owner 没有请求的 Attachment;
  • migration-requiredmigration-unavailableunsupported 表示历史 schema 不能按当前需要读取;
  • invalid 或 partial collection 表示记录的数据不完整。
这些问题由内建 problems surface 显示。allow-partial consumer 可以展示可用值;require-complete consumer 形成 data-unavailable projector、Calculation 或页面 callback 抛错,以及非法 document 或 route conflict,属于 execution problem。showview 显示问题并保留其它页面;静态导出不会发布这一份 execution。

运行和发布

showview--out 都选择 Sample、执行同一个 Report,并得到固定 ReportExecutionview 后续的成功 rebuild 会产生下一份 execution;失败时保留 last-good execution。 --out 必须指向不存在的目录。详情见发布静态报告报告 API