RecordProjection,再定义 Calculation、Page、PageFamily 或 Download:
先选择官方 projector
NiceEval 内部负责把运行事实写入 Record,并提供形成 typed view 的官方 opaque projector。 Report 作者只选择这些 projector,不能定义 raw Attachment family 或读取 payload。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
definePageFamily。实例、route 和 document 只能从已经投影或计算出的内存值展开。
设成项目默认
在niceeval.config.ts 中导入 Report。以后不带 --report 的 show 与 view 使用它:
处理不完整与失败
recorded-data problem 不会改变 Sample 分母:unavailable表示 owner 没有请求的 Attachment;migration-required、migration-unavailable与unsupported表示历史 schema 不能按当前需要读取;invalid或 partial collection 表示记录的数据不完整。
allow-partial consumer 可以展示可用值;require-complete consumer 形成 data-unavailable。
projector、Calculation 或页面 callback 抛错,以及非法 document 或 route conflict,属于 execution problem。show 与 view 显示问题并保留其它页面;静态导出不会发布这一份 execution。
运行和发布
show、view 与 --out 都选择 Sample、执行同一个 Report,并得到固定 ReportExecution。view 后续的成功 rebuild 会产生下一份 execution;失败时保留 last-good execution。
--out 必须指向不存在的目录。详情见发布静态报告和报告 API。