# wdy-manifest v0.1 规范

- 状态：**v0.1 草案（2026-09）**。v0.1 承诺：字段只加不改名、历史记录永久可读。
- 定位：微短剧/微电影垂直场景的**可验证出处声明**（Verifiable Provenance Manifest）。wdy 不发版权登记，本 manifest 只记录"某文件在某时刻由某主体以某方式生成"，权属以登记证/合同/司法判定为准。
- English version: https://wdy.org/certified/rules/wdy-manifest/v0.1/wdy-manifest.spec.md

## 1. 字段表

| 字段 | 必填 | 说明 |
|---|---|---|
| `manifest_version` | ✅ | 固定 `"0.1"` |
| `record_id` | ✅ | 记录号，格式 `WDY-YYYY-NNNN-XXXXXX`：4 位年 + 4 位序号 + 6 位随机码（字母表去除 0/O/1/I/L，约 10 亿组合）——序号保审计连续，随机码令验证链接不可枚举；验证页 `wdy.org/certified/verify/<record_id>/`（中文 `…/zh/`） |
| `title` | ✅ | 作品名 |
| `content_type` | ✅ | `video` / `script` / `storyboard` / `poster` / `report` / `document` / `dataset` / `webpage` |
| `file.filename` / `file.size_bytes` / `file.sha256` | ✅ | 母版文件 SHA-256（hex 小写），验证时重算比对 |
| `provenance.production_mode` | ✅ | `ai` / `live` / `hybrid` / `authored`（人类写作，AI 占比固定 0，无 AI 标识义务） |
| `provenance.ai_tools[]` | 建议 | `{name, role}`，如 `{"name":"Kling v2","role":"video-gen"}` |
| `provenance.ai_generated_ratio` | ✅ | 0–1，与 `live_action_ratio` 之和须为 1.0 |
| `provenance.live_action_ratio` | ✅ | 同上 |
| `ai_disclosure.visible_label` | ✅ | AI/hybrid 作品必须 `true`（片头显著位置提示标识），否则**拒绝签发** |
| `ai_disclosure.metadata_marking` | ✅ | 隐式元数据标识（依据《人工智能生成合成内容标识办法》2025-09-01；微短剧另见广电总局令第 16 号第 34 条） |
| `ai_disclosure.eu_ai_act_article_50` | 选填 | `{applicable, machine_readable_marking:{metadata, pixel_watermark}, disclosure_log_url}`，出海 EU 时 `applicable=true` 且两项 marking 不得为 false（EU AI Act Art.50，2026-08-02 适用；既有系统机器可读标识过渡期至 2026-12-02） |
| `rights_claims[]` | 建议 | `{role, party, basis, scope}`——**只记录各方"自称依据什么主张什么权利"，不写权属结论** |
| `rights_evidence[]` | 选填 | 随附存证的佐证材料指纹（合同/署名页等）：`{filename, size_bytes?, sha256}`——**原件由提交者自留不上传**，日后可验明"这份文件就是当时那份" |
| `contact` | 建议 | `{name, email, org?}` 提交者联系方式，用于回发验证链接；**不出现在公开验证页** |
| `anchors.tsa` | 选填 | RFC 3161 可信时间戳锚：`{provider, serial, timestamp, gen_time, policy, digest_algorithm, message_imprint, tsr_file, tsr_sha256, endpoint, ca_hint, stamped_at}`（前三个字段为 v0.1 原字段名，其余为增量）。令牌文件（`.tsr`）随验证页同目录提供，可用 `openssl ts -verify` 离线核验 |
| `anchors.opentimestamps` | 选填 | OpenTimestamps（比特币）锚：`{type, protocol, chain, digest_algorithm, message_digest, calendars[], proof_file, proof_sha256, status, block_height, submitted_at, confirmed_at}`——证明文件（`.ots`）随验证页同目录提供，可对照公共区块浏览器多源核验（`tools/ots_anchor.py --verify`）或官方 `ots` 客户端 |
| `anchors.zhixin` | 选填 | 至信链（腾讯联盟链）锚：`{type, chain, api_endpoint, anchor_target, hash_sm3, ev_id, tx_id, block_height, tx_time, extend_info, cert_url, anchored_at}`——链方证书可在链方证书页独立核验 |
| `anchors.storage[]` | 选填 | `[{type: "arweave"|"s3"|"ipfs", ref}]` 公开可查副本 |
| `c2pa_mapping` | 选填 | 与 C2PA 2.1 的桥接说明（见 §3） |
| `request.evidence_tier` | 选填 | 提交者请求的证据级别：`standard`（哈希+联签+公开验证页）/ `tsa`（叠加可信时间戳授时）/ `judicial`（叠加司法链锚或公证，维权级）——级别方案与费用由 WDY 复核邮件确认 |
| `request.referral` | 选填 | 推广码（分销溯源，2–16 位大写字母数字），由提交页自动捕获并声明 |
| `signer.name` / `signer.key_id` | ✅ | 签发主体与密钥代号（如 `2026-rot1`） |
| `created_at` | ✅ | ISO-8601 UTC |
| `signature` | ✅ | `{alg:"Ed25519", key_id, created_at, value(base64)}` |

## 2. 签名方案

1. 取**不含 `signature` 字段**的 manifest 对象；
2. 规范化：`JSON.stringify(排序键, 紧凑分隔符, UTF-8)`；
3. 对规范化字节做 **Ed25519** 签名，base64 存入 `signature.value`；
4. 公钥发布于 `https://wdy.org/.well-known/wdy-key.pub`（每行一条 `key_id=公钥`）；
5. 私钥仅存本地 `keys/`（不入仓库、不上服务器），按期轮换，`key_id` 带轮次。

两级签名角色：
- **提交者**在本地完成指纹计算（浏览器工具或命令行）——文件不上传；
- **WDY** 复核 manifest 后联签 → 签名证明的是 *"WDY 在 T 时刻复核并发布了此记录"*，不是 *"WDY 见过文件"*。

## 3. 与 C2PA 2.1 的桥接

| C2PA 概念 | wdy-manifest 对应 |
|---|---|
| Claim Generator | `provenance.ai_tools[]` |
| Assertions (trainedAlgorithmicMedia / metadata marking) | `provenance.production_mode` + `ai_disclosure.metadata_marking` |
| Hard Bindings (SHA-256) | `file.sha256` |
| Signature (COSE/Ed25519) | `signature`（独立 JWS 风格对象） |
| Ingredient（素材清单） | v0.2 计划：`episode_tree[]` 引用上游 manifest |

原则：**C2PA 原生清单随源文件保留，wdy 段做跨平台断链后的回锚**——文件被转码剥离元数据时，仍可凭 SHA-256 在 wdy 存证库还原出处。

## 4. 验证方式

- 本地：`python wdy_verify.py <manifest.json> <原文件> --pub wdy-key.pub` → 重算哈希 + 验签 + 比例校验；
- 浏览器：`wdy.org.cn/submit` 在本地计算指纹；验证页在 `wdy.org/certified/verify/<record_id>/`；
- 任何第三方**无需信任 wdy**：只需原文件 + manifest JSON + 公钥即可离线完成全部复验。
- **独立锚**（按记录提供，凡已锚定）：RFC 3161 时间戳令牌（`.tsr`）与 OpenTimestamps 证明（`.ots`）随验证页同目录提供，核验命令印在验证页对应区块内。工具：`tools/tsa_anchor.py`、`tools/ots_anchor.py`。
