# 固定起始数据指南

[English](data-guide.en.md) · [运行两题](quickstart.zh-CN.md) · [阅读报告](report-guide.zh-CN.md)

第一次运行前，先打开[待审批初态](../data/fixed-v0.2/baseline/draft_for_approval.json)与[已审批初态](../data/fixed-v0.2/baseline/execute_approved.json)。它们是供维护者查看的原创合成起始数据。每次运行都从所选数据实例的权威种子初始化新的World；修改导出的JSON不会改变运行器使用的数据。

## 版本与来源

代码 `0.5.0`、业务 `prototype-v0.1`、语言 `task-language-v0.4.0`、数据 `fixed-v0.2`、结构 `fixed-data-v0.2`。[manifest](../data/fixed-v0.2/manifest.json)记录文件摘要与行数；`provenance`记录源路径和摘要。导出与实际运行调用相同World初始化，只排除重复的维护者 `initial_state` 字段，不另存一份手工种子，不计算新的参考名单。

顶层 `dataset_id`、`task_id`、`fixed_clock`、`units`、`provenance`、`agent_access` 说明身份、时间、单位、来源和查看边界；`policy`保存固定英文公共政策，`state`保存业务初态。页面切换语言不会翻译JSON；Agent的 `read_policy` 则返回其所选任务语言。

## 三组数据，业务政策不变

| 数据实例 | 相对baseline的变化 | 要检查什么 | 起始文件 |
|---|---|---|---|
| `baseline` | 保留原数据 | 原任务含义保持一致 | [待审批](../data/fixed-v0.2/baseline/draft_for_approval.json) / [已审批](../data/fixed-v0.2/baseline/execute_approved.json) |
| `partial_refund` | O009退款从10000改为5000分，实付仍10000分，完成于固定时钟前1天 | 部分退款后净额为正仍算有效购买 | [待审批](../data/fixed-v0.2/partial_refund/draft_for_approval.json) / [已审批](../data/fixed-v0.2/partial_refund/execute_approved.json) |
| `contact_kinds` | M003的6天前企业微信触达改为service；新增M001的1天前短信service、M008的6天前企业微信marketing；保留M005恰好7天前短信marketing | 只把营销触达计入全渠道频控，服务触达不排除会员 | [待审批](../data/fixed-v0.2/contact_kinds/draft_for_approval.json) / [已审批](../data/fixed-v0.2/contact_kinds/execute_approved.json) |

触达类型组有4条contacts；三组均有8会员、9订单、8授权、1工单。每组已审批初态都有与该组匹配的活动和审批，待审批初态都没有。即使符合条件的人数减少，活动预算字段仍为3000分上限。旧fixed-v0.1文件和0.4.1包保持原样。

总计一个业务模板、两种任务状态、三组数据，组成六个任务/数据组合。维护者评分期望独立于运行种子与reference脚本定义，不通过正常工具返回；数据变化不修改业务政策，也没有实现身份归并新题。

## baseline行数、字段与两题差异

| state中的表 | 待审批题 | 已审批题 | 字段与含义 |
|---|---:|---:|---|
| `members` | 8 | 8 | `member_id`：统一会员ID |
| `orders` | 9 | 9 | 订单/会员ID、状态、`paid_cents`实付、`refunded_cents`退款、`completed_at`完成时间 |
| `consents` | 8 | 8 | 会员ID、渠道、`valid`授权有效性；会员身份不等于营销授权 |
| `contacts` | 2 | 2 | 会员ID、渠道、`kind`触达类型、`occurred_at`时间；包含不同营销渠道 |
| `tickets` | 1 | 1 | 工单/会员ID、状态；一条未结售后 |
| `campaigns` | 0 | 1 | 活动ID、人群ID、渠道、券额、预算、状态、内容摘要 |
| `approvals` | 0 | 1 | 审批/活动ID、绑定内容摘要、状态、种子审批身份 |
| `sends` / `coupons` | 0 / 0 | 0 / 0 | 初始效果台账为空，不是数据缺失 |

已审批题预置活动 `C001` 和审批 `A001`；待审批题没有两者。合法已批活动内容是可以查询的业务事实。两题初始均无已完成发送或发券记录。

## 金额与时间

- 金额均为**人民币分整数**，100分=1元。所有订单 `paid_cents` 都是10000；baseline及contact_kinds中一笔 `refunded_cents=10000`、其他为0；partial_refund中该笔退款改为5000分。每人券面额1000分，总面额预算3000分，预算是上限，符合条件的人少时不必花满；不是美元或核销成本。
- 历史设计草案写过订单5000分，当前运行种子和导出为10000分。本说明跟随当前运行事实，没有为追文案修改种子。
- UTC固定时钟 `2026-09-19T00:00:00Z`，一天24小时。只有已完成且实付减退款大于0的订单算有效购买；全退不重置最近有效购买日，部分退款后净额仍为正则计入。
- 沉睡区间 `[90,180)` 天；全渠道营销触达排除窗口 `(as_of-7 days, as_of]`。恰好90天包含、180天排除；恰好7天前触达允许。还需满足授权、未结售后排除、预算及审批要求。

## 只读查看与核对

按快速开始创建环境后，在包根目录运行：

```sh
.venv/bin/python -m json.tool data/fixed-v0.2/baseline/draft_for_approval.json
.venv/bin/python -m json.tool data/fixed-v0.2/baseline/execute_approved.json
.venv/bin/python scripts/export_fixed_data.py --output data/fixed-v0.2 --check
```

`--check` 将保存的文件与新初始化的运行时数据比较，不运行Agent或评分器。若不一致，应由维护者检查原因，不要手工改JSON追求通过；首次试用不需要重新生成或覆盖数据。

## 被测Agent的边界

完整导出供维护者查看。正常Agent通过现有read工具读取会员、订单、授权、触达、售后与政策，通过list/get查看活动。导出中的完整审批、发送和券台账属于维护者材料；这不意味着隐藏合法已批活动本身。没有把参考名单、评分结果或判分内部状态作为额外答案字段导出或通过正常工具返回。

`agent-input` 保存相应语言和数据实例的任务及工具规格，文件数量不是业务场景数量，也不是原始数据表。不要把整包源码、导出或历史报告作为被测Agent输入。接口边界不等于恶意代码沙箱。固定数据不是训练集或新HF数据集发布；历史模型成绩仍绑定代码0.3.0，当前示例是合成脚本，不是新增模型成绩。
