CreatAgent · 开放标准
creatagent.ingest/2 · 版本 2.0

选题推荐官开放标准

向 CreatAgent 提交一个选题仓库,必须长什么样。

更新 2026-10-14 机器版 JSON Schema 纯文本 llms.txt 三者同源生成
00

这是什么

CreatAgent 里每个选题是一个 Git 仓库:真源的指针、事实、观点、画面描述,全在里面。推荐官的 Agent 往这个仓库里写,CreatAgent 的入库门按本标准校验,通过了才进选题库,博主在 App 里刷到它、选它、用它写稿。

本标准就是"推荐官向 CreatAgent 交一个选题,必须长什么样"。它对任何人公开:规则、机器可读的 JSON Schema、纯文本版本都在这一页;入库门与这里是同一套规则(同一份代码),拒收时回的错误码也在这一页。

三个角色:

  • 推荐官:有名字、头像、声音的人或团队。提供选题与资料;被博主选用后平台分佣(后期功能)。
  • 推荐官的 Agent:替推荐官干活的程序(Claude Code、Codex 一类都行)。它读本标准,找真源、写文件、推分支、提交审核。
  • 入库门:CreatAgent 的校验与合并程序。只认本标准,一次列出全部问题。

一条原则贯穿全部规则:读的成本低,写的成本就高。写入时把时间线、关键帧、画面描述、章节大纲、标签、关系都做好,读的时候才能一两步落到一个文件、拿到能直接用的东西。

01

五条底线

  • 只收真源。原始出处页、官方原图、官网截图、新闻视频、报告 PDF、可引述的原话。不生成任何内容:不画图、不改写原话、不用 AI 修图、不用生成模型出画面。
  • Git 里只放文字和指针。图片、视频、音频、PDF、网页快照的字节一律传对象存储,仓库里只有一份资源记录指向它。单文件 ≤ 256 KB,仓库文字总量 ≤ 4 MB。
  • 每个字节都能回到出处。资源记录 → 出处页 → 原件;投影里每个定位(秒、行、页)都相对于那份原件。
  • 不碰不属于你的区。index/ 归资料管理员,catalog/ 由构建器生成,vectors/ 由入库门写。你的提交里出现这些改动就整次拒收。
  • 仓库里没有风格、没有用户。别人怎么讲、开头怎么钩、节奏怎么排都不收;也不放任何针对某个用户的内容。
02

推荐官身份

每个选题都要写明是谁推荐的。身份写在 topic.json 的 recommender 字段;头像与声音样本的字节传对象存储,键在 media/recommenders/<推荐官 id>/ 下(它们不是选题的真源,不放 media/sources/)。缺这个字段即拒收(S-RECOMMENDER)。

在 App 里,推荐官像文章的作者署名:选题视频上方是统一抬头"选题推荐官"(这一类角色的统称,不是某个人的头衔),下面是推荐官的头像和名字;收藏像收藏一篇文章,跟着署名走,不放在视频右侧。

声音是推荐官的一部分:预览视频的配音必须是推荐官本人的声音(真人录音,或推荐官本人授权的克隆音色),不得用通用合成音色;声音样本就是用来核对的。App 打开即播放配音。画面本身仍要在无声时也能看懂:用户可能在不方便外放的场合刷到它。

推荐官身份(topic.json 的 recommender 字段)

谁推荐了这个选题。App 在选题视频上放头像与收藏入口;被博主选用后按推荐官分佣(后期)。头像与声音样本的字节传对象存储 media/recommenders/<推荐官 id>/ 下(不是真源,不进 media/sources/)。

字段类型与限制必填说明
idstring(0–64 字,/^rec_[a-z0-9]+(?:-[a-z0-9]+)*$/)必填推荐官 id:rec_<slug>,由平台在登记推荐官时分配
namestring(1–40 字)必填展示名
avatarobject必填头像:方图、边长 ≥ 256,jpg/png/webp
avatar.r2Keystring(/^media/recommenders/rec_[a-z0-9-]+/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/recommenders/<推荐官 id>/<sha256>.<ext>
avatar.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
avatar.bytesinteger(1–)必填字节数
avatar.mime"image/jpeg" | "image/webp" | "image/png"必填
avatar.widthinteger(256–)必填像素宽
avatar.heightinteger(256–)必填像素高
voiceobject必填声音样本:3–60 秒,推荐官本人的声音(真人录音,或推荐官本人授权的克隆音色)。预览视频的配音必须是这个声音
voice.r2Keystring(/^media/recommenders/rec_[a-z0-9-]+/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/recommenders/<推荐官 id>/<sha256>.<ext>
voice.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
voice.bytesinteger(1–)必填
voice.mime"audio/mp4" | "audio/mpeg" | "audio/wav" | "audio/ogg"必填
voice.durationMsinteger(3000–60000)必填时长毫秒:3–60 秒
urlstring(0–2048 字,/^https:///)推荐官主页或介绍页(可选)
03

必须项

一个选题仓库至少要有下面这些。缺任何一项,入库门直接拒收(L-REQUIRED-MISSING)。

文件是什么硬指标
README.md门面:标题、一句话钩子、每个观点一行钩子 ≤ 40 字;观点行与 topic.json 逐字一致、顺序相同(S-README)
preview.json + 视频字节约一分钟的预览视频,推荐官配音9:16、H.264 mp4、30–60 秒、封面一帧;有配音音轨,voice 必填(S-PREVIEW、G-PREVIEW-AUDIO)
topic.json元数据:语言、类别、观点、推荐官观点 1–10 个(建议 2–5),推荐官必填
MEMORY.md入口:来龙去脉、角度、料、待核固定四节,≤ 200 行
angles/<slug>.md观点与视角每个观点一份,"视角""概述"(≤ 400 字)"反驳""关键画面"四行必有
facts/<slug>.md事实行至少 1 份文件,每条有出处
vocab.json词表用到的标签都在这里定义
events.json事件表至少 1 个事件,每个有成员
catalog/构建器产物用 ingest.mjs build 生成,不手写;缺了或过期即 D-CATALOG-STALE

入库门按这份布局表判断必需文件:MEMORY.md、topic.json、README.md、preview.json、angles/<slug>.md、facts/<slug>.md、vocab.json、events.json。资源记录、关系、原话、摘录、运行记录与检索日志不是硬性必需,但一个没有资源记录的选题没有任何可用的料,不会被博主选中。

钩子是标题下那一句 > 引用:≤ 40 字,说人话,让人想点进来,只用仓库里有出处的事实。

观点与视角是选题的灵魂。一个选题立几个观点,每个观点像辩论赛的立论:有争议、独特、有深度,而且信息丰富、一目了然——

  • 标题:一句有锋芒的主张(不是话题,是立场)。"法院叫停只是暂停键,十万美元迟早要收"是主张;"法院叫停之后"只是话题。
  • 视角:从哪个领域或身份看——经济学、移民律师、当事人、监管者、历史。
  • 展开:把主张讲透,推理链、数字、时间线。
  • 关联:与其他领域的关联,这件事牵动了谁、像历史上哪件事。
  • 论据:指向事实行;真源:指向资源,可带定位。
  • 反驳:可能的反驳及其依据,写最强的那一条。
  • 关键画面:配得上这个观点的画面。

用户选完选题后会在 App 里选一个观点,拿它去写稿;观点只写"立什么、凭什么",怎么讲是用户和他的风格卡的事。

topic.json · 选题元数据

选题是什么、用什么语言、有哪些观点、谁推荐的。

字段类型与限制必填说明
schema固定 "creatagent.topic/2"必填
topicIdstring(/^top_[A-Za-z0-9_-]{6,64}$/)必填选题 id,由平台在开运行时分配
titlestring(1–200 字)必填选题标题,与 README.md、MEMORY.md 的一级标题相同
localestring(2–10 字)必填选题语言;摘要、描述、钩子都用这个语言写(原文逐字除外),入库门按它查 Q-LANG
summarystring(0–2000 字)必填选题摘要
categorystring(0–64 字,/^[a-z0-9]+(?:-[a-z0-9]+)*$/)必填选题类别
recommender→ recommender必填谁推荐了这个选题。App 在选题视频上放头像与收藏入口;被博主选用后按推荐官分佣(后期)。头像与声音样本的字节传对象存储 media/recommenders/<推荐官 id>/ 下(不是真源,不进 media/sources/)。
anglesarray<object>(1–10 项)必填观点与视角:同一选题可以立几个有锋芒的主张,建议 2–5 个。用户选完选题后在 App 里选其一。每项对应一份 angles/<slug>.md
angles[].viewpointIdstring(/^vpt_[A-Za-z0-9_-]{6,64}$/)必填观点 id,vpt_ 前缀
angles[].filestring(0–200 字)必填angles/<slug>.md,必须存在
angles[].titlestring(1–60 字)必填观点标题:一句有锋芒的主张;与 README.md「## 视角」里逐字相同、顺序相同
angles[].questionstring(1–200 字)必填这个观点要回答的核心问题
angles[].perspectivestring(1–60 字)视角:从哪个领域或身份看(可选,与观点文件的「- 视角:」行同义,App 在"观点与视角"卡片上直接显示)
createdAtstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
updatedAtstring必填最近一次更新;构建器把它写进 catalog/manifest.json 的 builtAt(构建输出不用墙钟)

README.md · 门面

给用户看的第一眼:标题、一句话钩子、每个观点一行。平台机械解析,格式不能走样;入库门逐条检查,不合即 S-README。

行格式(正则)规则
一级标题^# (.+)$选题标题
钩子^> (.+)$标题下第一条引用行,≤ 40 字;让人想点进来,只用仓库里有出处的事实
观点小节^## 视角$固定标题
观点行^- \*\*(.+?)\*\*:(.+)$每个观点一行:观点标题与 topic.json angles[].title 逐字相同、顺序相同;简述 ≤ 80 字
预览小节^## 预览视频$可选,一两句说明;指针在 preview.json

MEMORY.md · 入口(≤ 200 行)

读者冷启动只读这一份:来龙去脉、角度、料、待核。固定四个二级标题,顺序不变,缺一个即拒收。

行格式(正则)规则
一级标题^# (.+)$选题标题
来龙去脉^## 来龙去脉$≤ 400 字:按时间讲清这件事,提到的每个事件写 evt_ id
角度^## 角度$每个观点一行:标题 → angles/<slug>.md
料^## 料$各种类资源计数、关键资源一行一个(resId + brief)
待核^## 待核$没查实的事、互相矛盾的口径;relations.jsonl 里每条 contradicts 边的两端至少一端要在这里提到

angles/<slug>.md · 观点与视角

一个观点一份,并登记在 topic.json angles 里。像辩论赛的立论:一句有锋芒的主张、从哪个领域或身份看、展开、与其他领域的关联、论据、真源、可能的反驳、关键画面。只写"立什么、凭什么",不写语气、开头、节奏、对标博主。

行格式(正则)规则
标题^# 角度:(.+)$观点标题:一句有锋芒的主张,与 topic.json angles[].title 相同
视角^- 视角:(.+)$从哪个领域或身份看(经济学、移民律师、当事人、监管者……)(必有,入库门检查)
核心问题^- 核心问题:(.+)$这个观点要回答的问题,与 topic.json angles[].question 相同
概述^- 概述:(.{1,400})$≤ 400 字:从哪些事实出发、会落到什么结论,信息要足,让人一眼看懂这个观点(必有,入库门检查)
展开^- 展开:(.+)$把主张讲透:推理链、数字、时间线;可以长
关联^- 关联:(.+)$与其他领域的关联:这件事牵动了谁、像历史上哪件事
论据^- 论据:(.+)$facts/<slug>.md#L<行号> 或 fct_ id,顿号分隔;每个都要指得到
真源^- 真源:(.+)$res_ id(可带定位),顿号分隔
反驳^- 反驳:(.+)$可能的反驳及其依据,写最强的那一条(必有,入库门检查)
关键画面^- 关键画面:(.+)$res_ id 或 res_…@定位,顿号分隔(必有,入库门检查)

facts/<slug>.md · 事实行

按子话题分文件,一行一条事实,行尾写出处资源与加入日期。一次写准:改一个字就是一条新事实(fct_ id 随正文变)。

行格式(正则)规则
事实行^- (.+?) \[src: (res_[0-9a-f]{20}(?:, res_[0-9a-f]{20})*); added: (\d{4}-\d{2}-\d{2})\]$正文 + [src: 资源 id 列表; added: 日期];src 里每个资源都要有记录;不以 "- " 开头的行当注释
04

预览视频

用户在 App 里先看到的是一段竖屏视频,上面叠着选题标题、钩子和几个观点,看完决定选不选。

  • 竖屏 9:16(推荐 1080×1920)、H.264(High 及以下档、yuv420p)、mp4 且 moov 前置(-movflags +faststart)、30–60 秒,iPhone 直接能播。
  • 画面只用本仓库已有的真源机械剪辑:照片缓推或平移、截图缓慢滚动、视频截取片段、淡入淡出。画面不加字(文字由 App 叠加),不用任何生成模型出画面。
  • 配音是推荐官的声音(第 02 节):讲这个选题是什么、为什么值得做,口吻随推荐官。配音混进视频的音轨(AAC);preview.json 的 voice 写配音人(= recommender.id)、语言和逐字稿(一行一句 [t起-止] 原文,App 可当字幕)。缺 voice 或配音人对不上即 S-PREVIEW;入库门读视频字节,没有音轨即 G-PREVIEW-AUDIO。
  • 画面在无声时也要能看懂:用户可能在不方便外放的场合刷到它。
  • 另截视频里的一帧做封面(同尺寸 jpg)。视频和封面都传对象存储,键由上传接口返回。
  • 预览视频不是真源:不进 resources/,事实行不能引用它。选题更新、画面变了就重剪、重传、改 preview.json。
  • 参考做法:ffmpeg 把每张图放大到略大于 1080×1920,用 crop 的 x/y 随时间移动,各段用 xfade 交叉淡化,叠上配音音轨,libx264 -profile:v high -pix_fmt yuv420p -movflags +faststart 编码;ffprobe 自查编码、尺寸、时长。

preview.json · 预览视频指针

用户在 App 里刷到的那段视频。字节在对象存储,仓库里只放这份指针。竖屏 9:16、H.264 mp4、30–60 秒;画面只用本仓库已有真源机械剪辑、不加字(标题、钩子、观点由 App 叠加);配音用推荐官的声音。它不是真源:不进 resources/,事实行不能引用它。

字段类型与限制必填说明
schema固定 "creatagent.topic-preview/1"必填
videoobject必填视频:mp4、H.264(High 及以下档、yuv420p)、moov 前置、9:16(推荐 1080×1920)
video.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
video.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
video.bytesinteger(1–)必填
video.mime固定 "video/mp4"必填
video.widthinteger(1–)必填
video.heightinteger(1–)必填
video.codecstring(/^avc1\.(42|4d|64)[0-9a-f]{4}$/)必填RFC 6381 编码串,如 avc1.640029(High 4.1)、avc1.4d0028(Main 4.0)
video.durationMsinteger(30000–60000)必填时长毫秒:30–60 秒
posterobject必填封面:视频里的一帧,同尺寸 jpg
poster.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
poster.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
poster.bytesinteger(1–)必填字节数
poster.mime"image/jpeg" | "image/webp" | "image/png"必填
poster.widthinteger(1–)必填像素宽
poster.heightinteger(1–)必填像素高
madeFromarray<string(/^res_[0-9a-f]{20}$/)>(1–30 项)必填画面用到的每份真源(都必须有资源记录)
voiceobject必填推荐官配音(必填,缺了即 S-PREVIEW):配音已混进视频音轨(没有音轨即 G-PREVIEW-AUDIO),这里登记是谁配的、什么语言、说了什么
voice.bystring(0–64 字,/^rec_[a-z0-9]+(?:-[a-z0-9]+)*$/)必填配音人:必须等于 topic.json recommender.id
voice.langstring(/^[a-z]{2}(-[A-Z]{2})?$/)必填语言:en、zh-CN …
voice.transcriptarray<string(0–500>(1–60 项)必填逐字稿:一行一句「[t起-止] 原文」,秒、最多一位小数,时间相对预览视频,止 ≤ 视频时长;App 可当字幕
captureobject必填
capture.method固定 "montage"必填
capture.agentIdstring(/^agt_[a-z0-9-]{3,40}$/)必填推荐官的 Agent id,由平台签发密钥时给出
capture.runIdstring(/^run_\d{8}-[a-z0-9]{6,40}$/)必填运行 id,由平台在开运行时分配
addedAtstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
05

目录:只允许这些路径

路径不在表里的,整次提交拒收(L-PATH-UNKNOWN)。

MEMORY.md                              入口(固定四节,≤ 200 行)
README.md                              门面
preview.json                           预览视频指针
topic.json                             选题元数据(含推荐官)
angles/<slug>.md                       观点与视角
facts/<slug>.md                        事实行
quotes.md                              原话
sources/<slug>-<h8>.md                 可引述的逐字摘录
resources/<kind>/<slug>-<h8>.json      资源记录
projections/<h8>/timeline.json         视频、音频:内容段 + 镜头 + 关键帧
projections/<h8>/transcript.md         视频、音频有人声时:逐句带时间码
projections/<h8>/visual.json           图片、截图、PDF 页图:画面描述 + 版面文字
projections/<h8>/outline.json          网页、文档、数据集:章节大纲
projections/<h8>/text.md               网页、文档:原文纯文本(超长分 text-2.md …)
vocab.json                             词表
events.json                            事件表
relations.jsonl                        手写关系
catalog/manifest.json  catalog/*.tsv   构建器产物(ingest.mjs build 生成)
paths/ROUTES.md  paths/log/<runId>.jsonl   检索经验与日志
runs/<runId>.json                      运行记录
index/                                 资料管理员区:不要碰
vectors/                               入库门写:不要交

命名:

  • <slug>:小写英文、数字、连字符,≤ 64 字符。中文标题写进文件内容,不写进路径。
  • <h8>:该资源 resId 去掉 res_ 后的前 8 位;资源文件名后缀与投影目录名都用它,对不上即 L-NAME-MISMATCH。
  • <kind> ∈ image · screenshot · video · audio · document · webpage · dataset · link,与记录里的 kind 一致。
  • 投影文件名固定,不允许别的名字。
  • 日期一律 YYYY-MM-DD,时间一律 UTC ISO。
  • JSON 两空格缩进、末尾换行。读者忽略不认识的字段,所以多写字段不报错,但也不会被用到。
06

资源类型与每种必须交什么

每份真源一条资源记录。记录是指针加缩略:出处、字节在哪、一句话、一段话、标签、关键词。按类型,还要交对应的投影与缩略图(这张表与入库门的 PROJECTION_MATRIX 同源):

类型投影(projections/<h8>/)缩略图 renditions.thumb
videotimeline.json、transcript.md(有则交)必填
audiotimeline.json、transcript.md不要
imagevisual.json必填
screenshotvisual.json、outline.json(有则交)必填
webpageoutline.json、text.md不要
documentvisual.json(有则交)、outline.json、text.mdPDF 必填
datasetoutline.json不要
link无不要

"有则交"的意思:视频任一内容段写了 speech 就必须交 transcript.md;截图、文档的可选投影有就交、没有就不列。资源记录的 projections 必须与目录里实际有的文件一致(C-PROJECTION-LIST)。

  • image 图片 / screenshot 截图:原图 + visual.json(截图的 ocr 必填)+ 缩略图(长边 480);大图另给 display(长边 1280)。
  • video 视频:原件 + timeline.json(两条轨、关键帧)+ 有人声时 transcript.md + 缩略图(封面帧)。
  • audio 音频:当前版本 2.0 的时间线形状要求画面轨,音频资源暂不接收;放宽后在小版本里加回。
  • document 文档(PDF 等):原件 + outline.json + text.md;页图另作 visual.json;PDF 要缩略图(首页图)。
  • webpage 网页:网页快照(html/mhtml)+ outline.json + text.md。
  • dataset 数据集:原件 + outline.json(按表或字段分节)。
  • link 链接:只有记录,没有字节、没有投影。用在"这个页面存在,但没必要存快照"的场合(缴费表单、在线工具)。

资源 id 以内容为锚:有字节的按 sha256(字节) 前 20 位;只有链接的按 sha256(规范化 URL) 前 20 位。所以同一份原件无论被谁、何时提交,id 都一样;资源内的定位(秒、行、页)也永远指向同一处。

resources/<kind>/<slug>-<h8>.json · 资源记录

一份真源的指针与缩略:出处、字节在哪、一句话、一段话、标签、关键词。每份资源一个文件,目录名 = kind,h8 = resId 去掉 res_ 的前 8 位。

字段类型与限制必填说明
schema固定 "creatagent.resource/2"必填
resIdstring(/^res_[0-9a-f]{20}$/)必填资源 id:res_ + sha256 前 20 位(有字节的资源按字节算,link 按规范化 URL 算)
kind"image" | "screenshot" | "video" | "audio" | "document" | "webpage" | "dataset" | "link"必填资源类型,与所在目录一致
origin固定 "source"必填恒为 source:选题仓库只收真源
titlestring(1–300 字)必填标题
captionstring(0–1000 字)这份资源能证明或展示什么(可选)
langstring(/^[a-z]{2}(-[A-Z]{2})?$/)必填原件语言
briefstring(4–40 字)必填一句话缩略,选题语言;App 卡片与检索列表用它
summarystring(40–300 字)必填一段话摘要:说了 / 展示了什么、能证明什么,选题语言
tagsarray<string(0–64>(1–10 项)必填标签,每个都要在 vocab.json 里定义
keywordsarray<string(1–40>(3–20 项)必填关键词规范形
aboutobject内容所讲的事发生在何时(不是发布日期)
about.fromstring(/^\d{4}-\d{2}-\d{2}$/)必填YYYY-MM-DD
about.tostring(/^\d{4}-\d{2}-\d{2}$/)YYYY-MM-DD
sourceobject必填出处
source.urlstring(0–2048 字,/^https:///)必填出处页面(新闻稿、官网页、论文页),不是图床直链
source.fileUrlstring(0–2048 字,/^https:///)字节的直接下载地址(与 url 不同时填)
source.publisherstring(0–200 字)发布方
source.publishedAtstring(/^\d{4}-\d{2}-\d{2}$/)YYYY-MM-DD
source.retrievedAtstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
source.attributionstring(0–300 字)界面与导出里展示的署名行,如 "WHO / Christopher Black"
captureobject必填怎么拿到的
capture.method"download" | "screenshot" | "excerpt" | "api" | "link-only"必填
capture.agentIdstring(/^agt_[a-z0-9-]{3,40}$/)必填推荐官的 Agent id,由平台签发密钥时给出
capture.runIdstring(/^run_\d{8}-[a-z0-9]{6,40}$/)必填运行 id,由平台在开运行时分配
capture.viewportstring(/^\d{2,5}x\d{2,5}(?:-full)?$/)截图的视口,如 860x1864 或 1280x800-full
objectobject原件字节(有字节的资源必填;link 不填)
object.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
object.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
object.bytesinteger(1–)必填
object.mimestring(3–100 字)必填
object.widthinteger(1–)图片、截图、视频
object.heightinteger(1–)
object.durationMsinteger(0–)视频、音频时长毫秒(时间定位的上限)
excerptPathstring(0–300 字)文字类真源的逐字摘录文件 sources/<slug>-<h8>.md,必须存在
derivedFromobject由另一份真源机械变换而来(裁切、截取、抽帧);生成式改动不允许
derivedFrom.resIdstring(/^res_[0-9a-f]{20}$/)必填资源 id:res_ + sha256 前 20 位(有字节的资源按字节算,link 按规范化 URL 算)
derivedFrom.transform"crop" | "resize" | "transcode" | "trim" | "frame"必填
renditionsobject缩略版本:图片、截图、视频、PDF 必填 thumb。缩放是机械派生,不占新的 resId
renditions.thumbobject必填缩略图:长边 480,jpg/webp
renditions.thumb.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
renditions.thumb.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
renditions.thumb.bytesinteger(1–)必填字节数
renditions.thumb.mime"image/jpeg" | "image/webp" | "image/png"必填
renditions.thumb.widthinteger(1–)必填像素宽
renditions.thumb.heightinteger(1–)必填像素高
renditions.displayobject展示图:长边 1280;原图更小时省略
renditions.display.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
renditions.display.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
renditions.display.bytesinteger(1–)必填字节数
renditions.display.mime"image/jpeg" | "image/webp" | "image/png"必填
renditions.display.widthinteger(1–)必填像素宽
renditions.display.heightinteger(1–)必填像素高
projectionsarray<string(/^(?:timeline\.json|transcript\.md|visual\.json|outline\.json|text\.md)$/)>(0–5 项)必填本资源在 projections/<h8>/ 下实际有的投影文件(text-2.md 等分片不列);必须与目录逐一对应
addedAtstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
08

图片应该怎么描述

每张图片、截图、PDF 页图一份 projections/<h8>/visual.json:画面里有什么(人、场景、物、图表、版式)、横竖、版面文字逐字(截图必填)、能当什么用。长截图按屏分区,每区一条描述与该区文字。

描述用选题语言写、写具体:读者靠这一句判断这张图是不是它要的。"一张截图"不合格;"手机竖屏网页截图:USCIS 官网 H-1B 页,顶部一块带警示图标的提示框"合格。

projections/<h8>/visual.json · 图片、截图、PDF 页图的画面描述

画面里有什么、版面文字逐字是什么、能当什么用。长截图按屏分区。

字段类型与限制必填说明
schema固定 "creatagent.visual/1"必填
resIdstring(/^res_[0-9a-f]{20}$/)必填资源 id:res_ + sha256 前 20 位(有字节的资源按字节算,link 按规范化 URL 算)
descriptionstring(20–400 字)必填画面里有什么:人、场景、物、图表、版式;选题语言
orientation"portrait" | "landscape" | "square"必填
ocrstring(0–20000 字)版面文字逐字、原语言(截图必填)
regionsarray<object>(0–40 项)长截图分区:一屏一条
regions[].boxstring(/^\d+,\d+,\d+,\d+$/)必填x,y,w,h(原图像素)
regions[].descriptionstring(10–200 字)必填
regions[].ocrstring(0–4000 字)
usableAsarray<"b-roll">(1–3 项)必填能当什么用:空镜、证据、人像、图表、文件、地图、标志
09

视频应该怎么描述

每个视频一份 projections/<h8>/timeline.json,两条轨各自铺满全片:

  • 内容轨 segments:按"讲什么"分段,每段 3–60 秒,一句摘要、几个关键词、这一段的字幕或转写原文。
  • 画面轨 shots:按镜头(剪辑点)切分,每个镜头写景别、拍的是什么、画面上的字,以及至少一个关键帧。

为什么两条轨:讲的内容和画面是两套边界。口播还在说"600 万孩子已登记",画面已经切到 App 截图;配口播稿时要用的是那张截图,不是发言人。

关键帧取法:每个镜头至少 1 帧(取镜头中点附近、不在转场里);镜头内画面有明显变化(换人、换图表)再加帧;全片任意相邻两帧间隔不超过 10 秒;全片不多于每 2 秒一帧;每帧时刻必须落在所在镜头内。每帧交原分辨率截图与长边 480 的缩略图,写一句"这一帧能看到什么",每帧写它独有的内容(相同描述会被标 Q-DUPLICATE-DESC)。

有人声或字幕的视频另交 transcript.md:一行一句,行首时间码。内容轨里的 speech 是它按段切开的副本,冗余是故意的。

projections/<h8>/timeline.json · 视频与音频的时间线

两条轨:内容轨按"讲什么"分段,画面轨按镜头切分,各自从 @t0.0 铺到全片结束,首尾相接、不重叠。关键帧是镜头里的截图,每帧都要有描述。

字段类型与限制必填说明
schema固定 "creatagent.timeline/1"必填
resIdstring(/^res_[0-9a-f]{20}$/)必填资源 id:res_ + sha256 前 20 位(有字节的资源按字节算,link 按规范化 URL 算)
durationMsinteger(1–)必填全片时长毫秒
segmentsarray<object>(1–∞ 项)必填内容轨:铺满 [0, durationMs];每段 3–60 秒
segments[].atstring(/^@(?:t\d+(?:\.\d)?(?:-\d+(?:\.\d)?)?|l\d+-\d+|p\d+(?:\.l\d+-\d+)?)$/)必填起止秒,如 @t0.0-11.8
segments[].summarystring(10–200 字)必填这一段讲了什么,选题语言
segments[].keywordsarray<string(1–40>(0–10 项)必填
segments[].speechstring(0–2000 字)本段字幕 / 转写原文,逐字、原语言;任一段有 speech 就必须同时交 transcript.md
segments[].speakersarray<string(0–60>(0–5 项)说话人
shotsarray<object>(1–∞ 项)必填画面轨:按剪辑点切分,铺满全片
shots[].atstring(/^@(?:t\d+(?:\.\d)?(?:-\d+(?:\.\d)?)?|l\d+-\d+|p\d+(?:\.l\d+-\d+)?)$/)必填起止秒
shots[].framing"close" | "medium" | "wide" | "screen" | "graphic" | "document" | "other"必填景别或画面类型
shots[].descriptionstring(15–200 字)必填这个镜头拍的是什么
shots[].onScreenTextstring(0–500 字)画面上的字(烧录字幕不算,放 speech)
shots[].keyframesarray<object>(1–30 项)必填关键帧:每镜头至少 1 帧(取中点附近、不在转场里);画面明显变化再加帧;全片任意相邻两帧间隔 ≤ 10 秒;全片不多于每 2 秒一帧;每帧时刻在所在镜头内
shots[].keyframes[].atstring(/^@(?:t\d+(?:\.\d)?(?:-\d+(?:\.\d)?)?|l\d+-\d+|p\d+(?:\.l\d+-\d+)?)$/)必填这一帧的秒,如 @t5.9
shots[].keyframes[].frameobject必填原分辨率截图 jpg
shots[].keyframes[].frame.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
shots[].keyframes[].frame.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
shots[].keyframes[].frame.bytesinteger(1–)必填字节数
shots[].keyframes[].frame.mime"image/jpeg" | "image/webp" | "image/png"必填
shots[].keyframes[].frame.widthinteger(1–)必填像素宽
shots[].keyframes[].frame.heightinteger(1–)必填像素高
shots[].keyframes[].thumbobject必填缩略图:长边 480
shots[].keyframes[].thumb.r2Keystring(/^media/sources/top_[A-Za-z0-9_-]{6,64}/[0-9a-f]{64}\.[a-z0-9]{1,8}$/)必填对象键:media/sources/<topicId>/<sha256>.<ext>,由上传接口返回
shots[].keyframes[].thumb.sha256string(/^[0-9a-f]{64}$/)必填sha256 十六进制
shots[].keyframes[].thumb.bytesinteger(1–)必填字节数
shots[].keyframes[].thumb.mime"image/jpeg" | "image/webp" | "image/png"必填
shots[].keyframes[].thumb.widthinteger(1–)必填像素宽
shots[].keyframes[].thumb.heightinteger(1–)必填像素高
shots[].keyframes[].descriptionstring(15–200 字)必填这一帧能看到什么:人、场景、文字、图表;每帧写它独有的内容
shots[].keyframes[].tagsarray<string(0–64>(0–5 项)

projections/<h8>/transcript.md · 字幕 / 转写

视频任一内容段有 speech 时必填;音频必填。一行一句,行首时间码就是定位;# 与 > 开头的行当注释。

行格式(正则)规则
标题^# (res_[0-9a-f]{20}) 字幕$
来源行^> 来源:(.+)|语言 ([a-z]{2}(?:-[A-Z]{2})?)$画面烧录字幕 / 官方字幕 / 转写
句^\[t(\d+(?:\.\d)?)-(\d+(?:\.\d)?)\] (.+)$逐字、原语言
10

其他资源怎么呈现

网页、文档、数据集:text.md 放从原件抽出的正文纯文本(去导航、去脚本,逐字、不翻译);outline.json 是它的目录,每节一条选题语言的摘要加原文行号或页码。可直接引述的几段另挑进 sources/<slug>-<h8>.md,并在资源记录的 excerptPath 指向它。

链接:只有资源记录。

原话:quotes.md 一行一条,带说话人,行格式与事实行相同。

不属于以上任何一种的东西(互动图表、地图服务、数据接口):按最接近的类型处理,存快照当 screenshot 或 webpage,描述里写明它原本是什么、怎么用。本标准没列的类型不要发明新目录。

projections/<h8>/outline.json · 网页、文档、数据集的章节大纲

配合同目录 text.md(原文纯文本):每一节一条中文摘要加原文行号或页码。

字段类型与限制必填说明
schema固定 "creatagent.outline/1"必填
resIdstring(/^res_[0-9a-f]{20}$/)必填资源 id:res_ + sha256 前 20 位(有字节的资源按字节算,link 按规范化 URL 算)
sectionsarray<object>(1–200 项)必填
sections[].atstring(/^@(?:t\d+(?:\.\d)?(?:-\d+(?:\.\d)?)?|l\d+-\d+|p\d+(?:\.l\d+-\d+)?)$/)必填@l12-30(text.md 行区间,须在行数之内)或 @p3(PDF 页)
sections[].headingstring(1–200 字)必填原文小标题(原语言);没有时由 Agent 起
sections[].summarystring(10–300 字)必填这一节说了什么,选题语言
sections[].keywordsarray<string(1–40>(0–10 项)必填

sources/<slug>-<h8>.md · 可引述的逐字摘录

从文字类真源挑出来可直接引述的几段,逐字、原语言;首行指回资源记录,资源记录的 excerptPath 指向它。全文放 projections/<h8>/text.md。

行格式(正则)规则
首行^> 资源:(res_[0-9a-f]{20})$指回资源记录

projections/<h8>/text.md · 原文纯文本

网页、文档从原件抽出的正文(去导航、去脚本),逐字、不翻译。单文件 ≤ 200 KB,超了分 text-2.md、text-3.md…,行号全局连续。outline.json 的 @l 定位指的就是这里的行。

quotes.md · 原话

可直接引述的原话,一行一条,带说话人;行格式与事实行相同。

行格式(正则)规则
原话行^- (.+?) \[src: (res_[0-9a-f]{20}(?:, res_[0-9a-f]{20})*); added: (\d{4}-\d{2}-\d{2})\]$正文写 "原话" —— 说话人或出处
11

词表、事件、关系

这三份文件是资料之间的"线"。没有它们,读者只能把每份资料当孤岛。

  • vocab.json:标签的定义、关键词的别名。标签是受控词表,<命名空间>:<slug>,命名空间固定为 sub(子话题)、ent(机构、人物)、place(地点)、use(画面用途)、src(出处类型:official / media / court / commons)。关键词写规范形,同义、中英、数字写法放 aliases。
  • events.json:选题里发生的事,按日期。"同一事件""时间先后"由构建器从这张表推出。
  • relations.jsonl:手写关系,一行一条,六种:supports 印证、contradicts 口径冲突、updates 之后的新口径、depicts 画面拍的是、cites 引用、explains 解释。每条必须写一句 note——读者靠它决定要不要沿这条边走。反向边、同一事件、同一出处、时间先后都由构建器推出,不手写。写了 contradicts 就在 MEMORY.md ## 待核 提一句。

vocab.json · 本选题词表

标签的定义与关键词的别名。资源、关键帧里的标签必须在这里定义过;关键词只写规范形,同义、中英、数字写法放 aliases。

字段类型与限制必填说明
schema固定 "creatagent.vocab/1"必填
tagsobject必填键 = 标签 id(<命名空间>:<slug>)
tags.<键>.labelstring(1–40 字)必填中文名
tags.<键>.defstring(4–200 字)必填一句定义:给读者判断"这个标签是不是我要的"
keywordsobject必填键 = 关键词规范形
keywords.<键>.aliasesarray<string(1–40>(0–20 项)必填

events.json · 事件表

选题里发生过的事,按日期。"同一事件""时间先后"两类连接由构建器从这张表推出,不手写。每个事件至少有一个事实或资源成员。

字段类型与限制必填说明
schema固定 "creatagent.events/1"必填
eventsarray<object>(1–500 项)必填
events[].idstring(/^evt_\d{8}-[a-z0-9]+(?:-[a-z0-9]+)*$/)必填事件 id:evt_<YYYYMMDD>-<slug>,作者起名后不再改
events[].datestring(/^\d{4}-\d{2}-\d{2}$/)必填发生日;不确定到日时写月初并加 precision
events[].precision"day" | "month" | "year"
events[].titlestring(2–60 字)必填
events[].summarystring(10–300 字)必填选题语言
events[].factsarray<string(/^fct_[0-9a-f]{12}$/)>(0–50 项)必填证明它发生的事实
events[].resourcesarray<string(/^res_[0-9a-f]{20}(?:@[0-9a-z:.-]{1,20})?$/)>(0–50 项)必填记录它的资源(可带定位)

relations.jsonl · 手写关系(每行一条)

资源、事实、事件之间的连接:谁印证谁、谁反驳谁、谁是新口径。每行一个 JSON 对象。反向边、同一事件、同一出处、时间先后由构建器推出,不手写。

字段类型与限制必填说明
fromstring(/^(?:res_[0-9a-f]{20}(?:@[0-9a-z:.-]{1,20})?|fct_[0-9a-f]{12}|evt_\d{8}-[a-z0-9]+(?:-[a-z0-9]+)*|(?:sub|ent|place|use|src):[a-z0-9]+(?:-[a-z0-9]+)*)$/)必填res_…(可带定位)、fct_…、evt_… 或标签 id
rel"supports" | "contradicts" | "updates" | "depicts" | "cites" | "explains"必填supports 印证 · contradicts 口径冲突 · updates 之后的新口径 · depicts 画面拍的是 · cites 引用 · explains 解释背景
tostring(/^(?:res_[0-9a-f]{20}(?:@[0-9a-z:.-]{1,20})?|fct_[0-9a-f]{12}|evt_\d{8}-[a-z0-9]+(?:-[a-z0-9]+)*|(?:sub|ent|place|use|src):[a-z0-9]+(?:-[a-z0-9]+)*)$/)必填res_…(可带定位)、fct_…、evt_… 或标签 id
notestring(2–120 字)必填为什么有这条边:读者靠这句话决定要不要沿它走
12

构建与自查

catalog/ 下全部倒排索引(关键词、标签、连接、时间顺序、素材清单、检索单元表、增量差异)由构建器从你写的文件算出,你不手写。入库门会用同一份构建器重算一遍逐字节比对,不一致即 D-CATALOG-STALE。构建器与校验器就是入库门用的那份代码,随标准发布,Node ≥ 24、零依赖:

node ingest.mjs build .          # 生成 catalog/(基线取本仓库 main;首次入库 --base none)
node ingest.mjs check . --json   # 本机自查:布局、形状、引用、覆盖、确定性、质量;输出与入库门回执同格式,有 error 退出码 1
node ingest.mjs units . --text   # 列出每个检索单元(含每条事实的 fct_ id);--text 打印嵌入文字,自查描述质量

改了任何文件都要重新 build 再提交。向量由入库门在合并后计算,你不算、不交;vectors/ 出现在你的提交里即 L-GATE-FILE。

13

提交流程

  1. 开运行:POST /v1/agent/runs,带推荐官 Agent 的密钥,给 topicId(更新已有选题)或 newTopic(新建)。返回 runId、分支名 runs/<runId>、仓库地址与限时写 token、经验仓库只读 token。
  2. 先读经验:克隆经验仓库,读 MEMORY.md、本类别的路径、要去站点的笔记、坑。经验里写了 miss 的路径不要再走。
  3. 先传字节,再写记录:算好每个文件的 sha256、字节数、mime,POST /v1/agent/runs/<runId>/uploads 申请直传,PUT 到返回的地址(服务端边收边算 sha256,不符直接拒)。传完把返回的对象键写进记录。
  4. 写文件、构建、自查:按本标准写全部文件,ingest.mjs build 生成 catalog/,ingest.mjs check 必须通过。
  5. 提交并推送:只推 runs/<runId> 分支,不推 main。提交说明首行 add|update|fix|remove: 摘要,带三个 trailer(不合规即 L-COMMIT-MESSAGE):
git commit -m "add: H-1B 十万美元一手资料 3 份、事实 3 条" -m "Run-Id: run_20261014-demoh1bfee
Agent-Id: agt_demo-studio
Topic-Id: top_20261014-demo-h1b-fee"
git push origin runs/run_20261014-demoh1bfee
  1. 提交审核:POST /v1/agent/runs/<runId>/submit,体 {"head":"<提交号>"}。返回入库门回执:accepted 合入;rejected 按错误码改完重推再提交;分支落后于 main 时返回冲突,git fetch origin main && git rebase origin/main 后重新 build、重推。

写 token 与 runId 绑定,提交审核后(无论结果)或到期即失效。一次运行只能删改自己加的资源记录。

runs/<runId>.json · 运行记录

这次运行谁做的、基于哪个提交、产出多少。

字段类型与限制必填说明
schema固定 "creatagent.run/1"必填
runIdstring(/^run_\d{8}-[a-z0-9]{6,40}$/)必填运行 id,由平台在开运行时分配
agentIdstring(/^agt_[a-z0-9-]{3,40}$/)必填推荐官的 Agent id,由平台签发密钥时给出
topicIdstring(/^top_[A-Za-z0-9_-]{6,64}$/)必填选题 id,由平台在开运行时分配
goal"create" | "update" | "fix"必填
baseCommitstring(/^[0-9a-f]{7,64}$/)必填开始时 main 的提交号
startedAtstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
endedAtstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
statsobject必填
stats.attemptsinteger(0–)必填检索与抓取尝试次数
stats.hitsinteger(0–)必填
stats.resourcesAddedinteger(0–)必填
stats.factsAddedinteger(0–)必填
stats.bytesUploadedinteger(0–)必填

paths/log/<runId>.jsonl · 检索日志(每行一条)

每一次检索或抓取尝试一行,失败也记。平台把有效路径提炼成经验,下一次运行先读经验。

字段类型与限制必填说明
atstring必填UTC ISO 时间,如 2026-10-14T03:12:40.000Z
stepinteger(1–)必填
action"search" | "browse" | "fetch" | "api" | "screenshot"必填
viastring(1–200 字)必填用了什么:搜索引擎、站内搜索、具体 API
querystring(0–1000 字)
urlstring(0–2048 字,/^https:///)https 地址
outcome"hit" | "miss" | "blocked" | "paywall" | "stale" | "duplicate" | "secondhand"必填
yieldedarray<string(/^res_[0-9a-f]{20}$/)>(0–50 项)命中时产出的资源
notestring(0–500 字)一句经验:为什么好用或为什么不行
promote"domain" | "route" | "pitfall"建议提炼进全局经验

入库门的回执

提交后入库门返回的校验报告。一次列出全部问题,不在第一个错误处停。error 拒收;warning 收录但记录。本机 node ingest.mjs check . --json 输出同一格式。

字段类型与限制必填说明
schema固定 "creatagent.ingest-report/1"必填
contractstring(/^\d+\.\d+$/)必填入库门执行的契约版本
topicIdstring(0–80 字)必填
headstring(0–64 字)必填被校验的提交号
verdict"accepted" | "rejected"必填
summaryobject必填
summary.errorsinteger(0–)必填
summary.warningsinteger(0–)必填
issuesarray<object>必填
issues[].codestring(/^[LSRCDGVQ]-[A-Z0-9-]+$/)必填稳定错误码,见错误码表
issues[].severity"error" | "warning"必填
issues[].rulestring(1–200 字)必填违反的规则
issues[].pathstring | null出问题的文件
issues[].fieldstring | null文件内字段路径(JSON 路径或 #L 行号)
issues[].refstring | null出问题的节点或定位
issues[].expectedstring | null期望的格式或取值
issues[].messagestring(1–1000 字)必填实际看到了什么
issues[].fixstring(1–500 字)必填怎么改

paths/ROUTES.md · 有效检索路径

本选题在互联网上找真源的有效路径,一行一条,带命中计数。

行格式(正则)规则
经验行^- \[(hit|miss|mixed) (\d+)/(\d+)\] (.+?) → (.+?) \[via: (run_\d{8}-[a-z0-9]{6,40}(?:, run_\d{8}-[a-z0-9]{6,40})*); last: (\d{4}-\d{2}-\d{2})\]$
14

错误码

入库门一次列出全部问题,不在第一个错误处停。错误码稳定,按码改;这张表与入库门代码同源(INGEST_RULES)。级别:拒收(error)、警告(收录但记进运行记录)、内部(入库门自身或读端的故障,不退回推荐官,重试即可)。

组错误码级别意思怎么改
L 布局L-PATH-UNKNOWN拒收路径不在 TOPIC_REPO_LAYOUT 表内删除该文件,或按 TOPIC_REPO_LAYOUT 改到允许的路径
L 布局L-REQUIRED-MISSING拒收必需文件缺失补上该必需文件
L 布局L-BINARY拒收二进制扩展名进了 Git字节传 R2 media/sources/<topicId>/,Git 里只留资源记录
L 布局L-FILE-TOO-LARGE拒收单文件超过 256 KB拆分文件(text.md 超 200 KB 分 text-2.md …)或把字节放 R2
L 布局L-GIT-TOO-LARGE拒收Git 文字总量超过 4 MB把大文本放 R2,Git 只留指针
L 布局L-HOT-TOO-LARGE拒收热区合计超过 2 MB压缩热区:MEMORY.md、角度文件、词表写短,catalog 由内容决定
L 布局L-INDEX-TOUCHED拒收外部提交改动了 index/撤回对 index/ 的改动;index/ 只由资料管理员写
L 布局L-GATE-FILE拒收外部提交包含入库门写的文件撤回对 vectors/ 的改动;向量由入库门计算
L 布局L-NAME-MISMATCH拒收文件名的 8 位后缀或投影目录名与 resId 不符文件名后缀与投影目录名用 resId 去掉 res_ 后的前 8 位,目录种类与 kind 一致
L 布局L-BRANCH-NAME拒收分支名不是 runs/<runId>(原 V10)推到 runs/<runId> 分支
L 布局L-COMMIT-MESSAGE拒收提交说明首行或 trailer 不合规(原 V12)首行 <add|update|fix|remove|merge|lib>: 摘要,并带 Run-Id / Agent-Id / Topic-Id 三个 trailer
S 形状S-JSON拒收不是合法 JSON / JSONL修成合法 JSON(JSONL 每行一个对象)
S 形状S-SCHEMA拒收不符合文件的 schema按契约 shapes.ts 的 schema 补齐或改正字段
S 形状S-MEMORY-SECTIONS拒收MEMORY.md 缺固定小节MEMORY.md 写齐四个二级标题:## 来龙去脉、## 角度、## 料、## 待核
S 形状S-FACT-LINE拒收事实或原话行不匹配 FACT_LINE_RE改成 - 正文 [src: res_…; added: YYYY-MM-DD]
S 形状S-TRANSCRIPT-LINE拒收transcript.md 的行不是 [t起-止] 原文每行写成 [t起-止] 原文(秒,最多一位小数)
R 引用R-DANGLING拒收引用的 resId / fct / evt / 文件解析不到补上被引用的资源、事实、事件或文件,或删掉这条引用
R 引用R-LOCATOR-FORMAT拒收定位不是规范写法用规范写法:@t11.8-25.0、@t12.4、@l30-41、@p7、@p7.l3-9
R 引用R-LOCATOR-RANGE拒收定位超出原件时长 / 行数定位改到原件时长 / 行数之内
R 引用R-TAG-UNDEFINED拒收标签不在 vocab.json 里在 vocab.json tags 里定义该标签(label + def),或改用已定义的标签
R 引用R-PROJECTION-RESID拒收投影文件的 resId 与所在目录的资源不符投影文件的 resId 改成所在目录对应的资源
C 覆盖C-PROJECTION-MISSING拒收该种类资源必需的投影缺失按 2.4 节的表补齐该种类必需的投影
C 覆盖C-PROJECTION-LIST拒收资源记录的 projections 与目录里的文件不一致资源记录 projections 列出目录里实际有的投影文件(text-N.md 分片不列),不放不适用的投影
C 覆盖C-RENDITION-MISSING拒收视觉资源没有缩略图生成长边 480 的缩略图传 R2,写进 renditions.thumb
C 覆盖C-TRACK-GAP拒收时间线的轨没有铺满或有空隙两条轨各自从 @t0.0 铺到全片结束,相邻段首尾相接
C 覆盖C-TRACK-OVERLAP拒收时间线的轨有重叠相邻段首尾相接,不重叠
C 覆盖C-SEGMENT-LENGTH拒收内容段长度不在 3–60 秒内容段按 3–60 秒切分
C 覆盖C-KEYFRAME-GAP拒收两帧间隔超过 10 秒按 ≤ 10 秒补关键帧并写描述
C 覆盖C-KEYFRAME-OUTSIDE拒收关键帧不在所在镜头内关键帧时刻放进所在镜头的区间内
C 覆盖C-KEYFRAME-DENSE拒收关键帧多于每 2 秒一帧减少关键帧,全片不多于每 2 秒一帧
C 覆盖C-EVENT-EMPTY拒收事件没有成员给事件补上证明它发生的事实或记录它的资源
C 覆盖C-ANGLE-LINES拒收观点文件缺"视角""概述""反驳""关键画面"行,或概述超过 400 字观点文件写齐 - 视角:…、- 概述:…(≤ 400 字)、- 反驳:…、- 关键画面:res_… 四行
D 确定性D-CATALOG-STALE拒收catalog/ 与构建器重建结果不逐字节相同基于最新 main 运行 node ingest.mjs build . 重建 catalog/ 后再提交
G 对象(仅入库门)G-OBJECT-MISSING拒收R2 对象不存在把字节上传到记录里的 R2 键
G 对象(仅入库门)G-OBJECT-MISMATCH拒收R2 对象字节数或 sha256 与记录不符按 R2 里实际字节改正 bytes / sha256,或重新上传
G 对象(仅入库门)G-IMAGE-SIZE拒收图片尺寸与记录不符按实际图片改正 width / height
G 对象(仅入库门)G-KEY-PREFIX拒收R2 键不在本选题的 media/sources/<topicId>/ 下真源字节放 media/sources/<本选题 topicId>/,推荐官头像与声音放 media/recommenders/<推荐官 id>/
V 向量(入库门自身与读端)V-EMBED-FAILED内部入库门嵌入失败(服务端故障,不退回外部 Agent)入库门自身故障,重试即可(不退回外部 Agent)
V 向量(入库门自身与读端)V-READER-MISMATCH内部读端发现嵌入 id 或行数不符读端版本与入库数据不一致,升级读端或重嵌入
Q 质量(多为警告)Q-LANG警告摘要或描述不是选题语言摘要与描述用选题语言写,原文逐字只放 speech / ocr / text.md
Q 质量(多为警告)Q-DUPLICATE-DESC警告同一资源内描述重复每个镜头、关键帧写各自看得到的内容,不用模板话
Q 质量(多为警告)Q-DUPLICATE-FACT警告同一事实正文出现多次同一事实只写一行,多来源并列在 src 里
Q 质量(多为警告)Q-CONTRADICTS-UNMENTIONED警告contradicts 边未在 MEMORY.md ## 待核 里提及在 MEMORY.md ## 待核 里提一句这条矛盾(写出两端的 id)
S 形状S-RECOMMENDER拒收topic.json 缺推荐官身份或形状不对topic.json 加 recommender:{ id: "rec_<slug>", name, avatar(长边 ≥ 256 的方图), voice(3–60 秒的 m4a / mp3 声音样本) }
S 形状S-README拒收README.md 不合门面格式,或观点行与 topic.json 不一致首行 # 标题,标题下一行 > 钩子(≤ 40 字),## 视角 下每个观点一行 - 观点标题:简述(≤ 80 字),标题与 topic.json angles[].title 逐字相同、顺序相同
S 形状S-PREVIEW拒收preview.json 不合格式,或缺推荐官配音 voice、配音人不是本选题的推荐官preview.json 写 voice:{ by: topic.json recommender.id, lang, transcript: ["[t0.0-3.2] 第一句", …] },视频 9:16、30–60 秒、H.264
G 对象(仅入库门)G-PREVIEW-AUDIO拒收预览视频没有音轨(推荐官配音必须混进视频)把推荐官配音混进预览视频(AAC 音轨),重新上传并改 preview.json 的 video 指针
15

样例

下面是一个完整的合格仓库(H-1B 十万美元选题的最小版本:截图、网页、链接三份资源,一个观点,三条事实)和一个被拒提交。两者在生成本页时都真实跑过入库门的校验器:合格样例的 verdict 是 accepted,被拒样例的回执就是校验器的原话。对象键与哈希为示意(本机校验不查对象存储)。

合格样例

完整仓库 29 个文件;catalog/ 由构建器生成(这里只列 manifest.json 与 units.tsv)。

README.md
# H-1B 十万美元:法院叫停之后还收不收

> 公告说要收十万美元,法院说不行,移民局说"等命令解除再收"。

## 视角

- **法院叫停只是暂停键,十万美元迟早要收**:法院撤的是执行指引,不是公告本身;移民局白纸黑字写着"命令解除仍会收"。

## 预览视频

见 `preview.json`:由本仓库的截图与网页快照剪成,推荐官配音,画面不带字。
MEMORY.md
# H-1B 十万美元:法院叫停之后还收不收

## 来龙去脉
2025-09-19 白宫公告要求部分 H-1B 新申请附 10 万美元(evt_20250919-proclamation-signed);2026-06-08 马萨诸塞州联邦地区法院撤销执行指引(evt_20260608-district-court-vacatur);2026-07-24 第一巡回上诉法院驳回政府的暂缓动议(evt_20260724-first-circuit-denies-stay),DHS 表示遵守,但命令解除后仍计划收取。

## 角度
- 法院叫停只是暂停键,十万美元迟早要收 → angles/pause-not-cancel.md

## 料
- 网页 1、截图 1、链接 1;字节在对象存储 media/sources/top_20261014-demo-h1b-fee/
- res_163d6eead4f867324539 移民局官网置顶:法院已撤销十万美元指引
- res_372d6812e4f76f4d353c USCIS H-1B 官方页全文
- res_a5228efbbf3921c958d4 Pay.gov 十万美元缴费入口

## 待核
- 公告写明未延期则生效 12 个月后失效,本仓库没有核实是否延期
topic.json
{
  "schema": "creatagent.topic/2",
  "topicId": "top_20261014-demo-h1b-fee",
  "title": "H-1B 十万美元:法院叫停之后还收不收",
  "locale": "zh-CN",
  "summary": "2025 年 9 月白宫公告要求部分 H-1B 新申请附 10 万美元;2026 年 6 月联邦地区法院撤销执行指引,7 月上诉法院拒绝暂缓;移民局表示遵守但命令解除后仍会收。",
  "category": "us-immigration",
  "recommender": {
    "id": "rec_demo-studio",
    "name": "示例推荐官",
    "avatar": {
      "r2Key": "media/recommenders/rec_demo-studio/f3051c11ed9217f7f3051cd3b1232557f3051d9574b432b7f3051e57ed921a3d.png",
      "sha256": "f3051c11ed9217f7f3051cd3b1232557f3051d9574b432b7f3051e57ed921a3d",
      "bytes": 88211,
      "width": 1024,
      "height": 1024,
      "mime": "image/png"
    },
    "voice": {
      "r2Key": "media/recommenders/rec_demo-studio/ed9217969a0dc420e4c0ea5b2f7410966be30459ed92197b9a0dc605e4c0ec40.m4a",
      "sha256": "ed9217969a0dc420e4c0ea5b2f7410966be30459ed92197b9a0dc605e4c0ec40",
      "bytes": 301002,
      "durationMs": 18400,
      "mime": "audio/mp4"
    },
    "url": "https://example.com/demo-studio"
  },
  "angles": [
    {
      "viewpointId": "vpt_demo-h1b-pause-not-cancel",
      "file": "angles/pause-not-cancel.md",
      "title": "法院叫停只是暂停键,十万美元迟早要收",
      "question": "法院撤销了执行指引,为什么说这笔钱没有取消、只是推迟?",
      "perspective": "移民律师的视角——看程序,不看口号"
    }
  ],
  "createdAt": "2026-10-14T20:00:00.000Z",
  "updatedAt": "2026-10-14T20:00:00.000Z"
}
preview.json
{
  "schema": "creatagent.topic-preview/1",
  "video": {
    "r2Key": "media/sources/top_20261014-demo-h1b-fee/38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4.mp4",
    "sha256": "38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4",
    "bytes": 6120448,
    "width": 1080,
    "height": 1920,
    "mime": "video/mp4",
    "codec": "avc1.640029",
    "durationMs": 42800
  },
  "poster": {
    "r2Key": "media/sources/top_20261014-demo-h1b-fee/38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4.jpg",
    "sha256": "38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4",
    "bytes": 241337,
    "width": 1080,
    "height": 1920,
    "mime": "image/jpeg"
  },
  "madeFrom": [
    "res_163d6eead4f867324539",
    "res_372d6812e4f76f4d353c"
  ],
  "voice": {
    "by": "rec_demo-studio",
    "lang": "zh-CN",
    "transcript": [
      "[t0.0-1.4] 我是示例推荐官。",
      "[t2.0-8.6] 今天推荐的选题:H-1B 十万美元被法院叫停了,可这笔钱真的不收了吗?",
      "[t9.4-19.8] 法院撤的是执行指引,公告本身还在;上诉法院只是不准暂缓,移民局官网写明命令解除后仍会收。",
      "[t20.6-27.2] 对雇主来说,这是一笔推迟的钱,不是省下的钱。我们一起把它讲清楚。"
    ]
  },
  "capture": {
    "method": "montage",
    "agentId": "agt_demo-studio",
    "runId": "run_20261014-demoh1bfee"
  },
  "addedAt": "2026-10-14T20:00:00.000Z"
}
angles/pause-not-cancel.md
# 角度:法院叫停只是暂停键,十万美元迟早要收

- 视角:移民律师的视角——看程序,不看口号
- 核心问题:法院撤销了执行指引,为什么说这笔钱没有取消、只是推迟?
- 概述:法院撤销的是"机构执行指引",公告本身没被推翻;上诉法院只是不准暂缓,没有裁定公告违法;移民局官网明写"命令解除后仍会收"。三步合起来,这笔钱是推迟,不是取消。
- 展开:2025-09-19 公告把十万美元写进入境限制;2026-06-08 地区法院撤的是 USCIS 落实公告的指引,理由是程序,不是公告权力本身;2026-07-24 上诉法院驳回暂缓,意味着在上诉期间指引无效,但案子还在走。移民局的置顶提示用的是"will comply … while DHS considers next steps""still plans to collect",这是典型的"暂停执行、保留追收"的措辞。对雇主来说,现在不付是合法的,但要为"命令被推翻后补收"留预算。
- 关联:和 2017 年旅行禁令的走法几乎一样——地区法院叫停、上诉法院拒绝暂缓、最后在最高法院翻盘;对企业财务来说,这是一笔或有负债,而不是已经省下的钱。
- 论据:facts/court.md#L3、facts/court.md#L4、facts/payment.md#L3
- 真源:res_163d6eead4f867324539、res_372d6812e4f76f4d353c@l3-6、res_372d6812e4f76f4d353c@l13-16、res_a5228efbbf3921c958d4
- 反驳:最强的反驳是"公告写明 12 个月后自动失效,官司拖过 2026-09-21 就自然作废"——这取决于白宫是否延期,本仓库尚未核实(见 MEMORY.md 待核)。
- 关键画面:res_163d6eead4f867324539、res_372d6812e4f76f4d353c@l3-6
facts/court.md
# 诉讼进展

- 2026-06-08 马萨诸塞州联邦地区法院下令撤销执行 10 万美元要求的机构指引,案号 State of California v. Mullin, 1:25-cv-13829 [src: res_372d6812e4f76f4d353c, res_163d6eead4f867324539; added: 2026-10-14]
- 2026-07-24 第一巡回上诉法院驳回政府的暂缓执行动议;DHS 表示会遵守法院命令,但如果命令日后被解除仍计划收取这笔钱 [src: res_372d6812e4f76f4d353c, res_163d6eead4f867324539; added: 2026-10-14]
vocab.json
{
  "schema": "creatagent.vocab/1",
  "tags": {
    "sub:court-ruling": {
      "label": "法院裁决",
      "def": "地区法院、上诉法院对十万美元要求的裁决与暂缓动议"
    },
    "sub:payment": {
      "label": "缴费",
      "def": "十万美元怎么付、何时付、付款证明"
    },
    "ent:uscis": {
      "label": "移民局 USCIS",
      "def": "美国公民及移民服务局的页面、表态与设施"
    },
    "src:official": {
      "label": "官方出处",
      "def": "政府机构官网、官方账号发布的原件"
    },
    "use:evidence": {
      "label": "证据画面",
      "def": "画面本身能证明某个事实,口播时可作佐证"
    }
  },
  "keywords": {
    "H-1B": {
      "aliases": [
        "h1b",
        "H1B签证",
        "工作签证"
      ]
    },
    "十万美元": {
      "aliases": [
        "10 万美元",
        "$100,000",
        "100,000"
      ]
    },
    "法院裁决": {
      "aliases": [
        "法院",
        "撤销",
        "vacated"
      ]
    },
    "暂缓": {
      "aliases": [
        "stay",
        "暂缓执行"
      ]
    },
    "Pay.gov": {
      "aliases": [
        "缴费",
        "payment"
      ]
    },
    "移民局": {
      "aliases": [
        "USCIS"
      ]
    }
  }
}
events.json
{
  "schema": "creatagent.events/1",
  "events": [
    {
      "id": "evt_20250919-proclamation-signed",
      "date": "2025-09-19",
      "title": "白宫发布十万美元公告",
      "summary": "总统公告限制部分 H-1B 工人入境,新申请须附 10 万美元,2025-09-21 美东 0:01 生效。",
      "facts": [],
      "resources": [
        "res_372d6812e4f76f4d353c@l8-9"
      ]
    },
    {
      "id": "evt_20260608-district-court-vacatur",
      "date": "2026-06-08",
      "title": "地区法院撤销执行指引",
      "summary": "马萨诸塞州联邦地区法院在 State of California v. Mullin 案中撤销十万美元的机构执行指引。",
      "facts": [
        "fct_1e22cb6fe66d"
      ],
      "resources": [
        "res_372d6812e4f76f4d353c@l3-3",
        "res_163d6eead4f867324539"
      ]
    },
    {
      "id": "evt_20260724-first-circuit-denies-stay",
      "date": "2026-07-24",
      "title": "上诉法院驳回暂缓",
      "summary": "第一巡回上诉法院驳回政府暂缓执行动议;DHS 表示遵守,但命令解除后仍计划收取。",
      "facts": [
        "fct_595512654d63"
      ],
      "resources": [
        "res_372d6812e4f76f4d353c@l5-6",
        "res_163d6eead4f867324539"
      ]
    }
  ]
}
relations.jsonl
{"from":"res_163d6eead4f867324539","rel":"supports","to":"fct_1e22cb6fe66d","note":"官网置顶提示原文写明 6 月 8 日法院撤销执行指引"}
{"from":"res_372d6812e4f76f4d353c@l5-6","rel":"supports","to":"fct_595512654d63","note":"官网提示写明 7 月 24 日第一巡回法院驳回暂缓、DHS 仍计划收取"}
{"from":"res_372d6812e4f76f4d353c@l13-16","rel":"cites","to":"res_a5228efbbf3921c958d4","note":"USCIS 页写明十万美元经 Pay.gov 缴费且须先付后递交"}
{"from":"res_372d6812e4f76f4d353c@l5-6","rel":"updates","to":"res_372d6812e4f76f4d353c@l8-9","note":"公告规定收费;法院裁决后 USCIS 口径改为暂不执行"}
resources/screenshot/uscis-h1b-alert-shot-163d6eea.json
{
  "schema": "creatagent.resource/2",
  "resId": "res_163d6eead4f867324539",
  "kind": "screenshot",
  "origin": "source",
  "title": "USCIS H-1B 页面置顶提示截图(法院撤销十万美元执行指引)",
  "caption": "手机视口截图,定位到 2026-06-08 法院命令那段提示,可作口播里的证据画面",
  "lang": "en",
  "brief": "移民局官网置顶:法院已撤销十万美元指引",
  "summary": "USCIS 官网 H-1B 页的置顶提示框:马萨诸塞州联邦地区法院 2026-06-08 撤销十万美元要求的执行指引,第一巡回上诉法院 7 月 24 日驳回暂缓;DHS 表示遵守但若命令解除仍会收取。是\"法院叫停\"最直接的官方画面证据。",
  "tags": [
    "sub:court-ruling",
    "ent:uscis",
    "src:official",
    "use:evidence"
  ],
  "keywords": [
    "十万美元",
    "法院裁决",
    "暂缓",
    "USCIS",
    "H-1B"
  ],
  "about": {
    "from": "2026-06-08",
    "to": "2026-07-24"
  },
  "source": {
    "url": "https://www.uscis.gov/working-in-the-united-states/h-1b-specialty-occupations",
    "publisher": "U.S. Citizenship and Immigration Services",
    "retrievedAt": "2026-10-14T18:28:04.317Z"
  },
  "capture": {
    "method": "screenshot",
    "agentId": "agt_demo-studio",
    "runId": "run_20261014-demoh1bfee",
    "viewport": "860x1864"
  },
  "object": {
    "r2Key": "media/sources/top_20261014-demo-h1b-fee/163d6eead4f867324539c481b123255712ebac07468971cd9a0dc605b12326db.png",
    "sha256": "163d6eead4f867324539c481b123255712ebac07468971cd9a0dc605b12326db",
    "bytes": 253847,
    "width": 860,
    "height": 1864,
    "mime": "image/png"
  },
  "renditions": {
    "thumb": {
      "r2Key": "media/sources/top_20261014-demo-h1b-fee/12ebaa83468970499a0dc481b1232557cfc065a1b12326194689722e4f5aa08c.jpg",
      "sha256": "12ebaa83468970499a0dc481b1232557cfc065a1b12326194689722e4f5aa08c",
      "bytes": 31200,
      "width": 221,
      "height": 480,
      "mime": "image/jpeg"
    }
  },
  "projections": [
    "visual.json"
  ],
  "addedAt": "2026-10-14T20:00:00.000Z"
}
projections/163d6eea/visual.json
{
  "schema": "creatagent.visual/1",
  "resId": "res_163d6eead4f867324539",
  "description": "手机竖屏网页截图:USCIS 官网 H-1B 页中段,一块左侧蓝边、带信息图标的灰底提示框,框内是一大段英文,讲法院撤销十万美元指引与上诉法院驳回暂缓;框下是 H-1B 分类说明与可展开的总统公告标题。",
  "orientation": "portrait",
  "ocr": "ALERT: On June 8, 2026, the U.S. District Court for the District of Massachusetts issued an order that vacated agency guidance implementing the $100,000 payment requirement for certain H-1B petitions. See State of California v. Mullin, 1:25-cv-13829 (D. Mass.). On July 24, 2026, the First Circuit denied the government's motion. If this order is later lifted, DHS still plans to collect the payment.\nThis nonimmigrant classification applies to people who wish to perform services in a specialty occupation.\nPresidential Proclamation on Restriction on Entry of Certain Nonimmigrant Workers",
  "regions": [
    {
      "box": "33,205,787,970",
      "description": "置顶提示框:法院撤销执行指引、上诉法院驳回暂缓、DHS 仍计划收取",
      "ocr": "ALERT: On June 8, 2026, the U.S. District Court for the District of Massachusetts issued an order … If this order is later lifted, DHS still plans to collect the payment."
    },
    {
      "box": "0,1221,860,620",
      "description": "H-1B 分类的一段说明与\"总统公告\"折叠标题"
    }
  ],
  "usableAs": [
    "evidence",
    "document"
  ]
}
projections/372d6812/outline.json
{
  "schema": "creatagent.outline/1",
  "resId": "res_372d6812e4f76f4d353c",
  "sections": [
    {
      "at": "@l1-7",
      "heading": "H-1B Specialty Occupations · Alerts",
      "summary": "页面标题与置顶提示:地区法院 6 月 8 日撤销十万美元执行指引,上诉法院 7 月 24 日驳回暂缓,DHS 若命令解除仍会收取。",
      "keywords": [
        "法院裁决",
        "暂缓",
        "十万美元"
      ]
    },
    {
      "at": "@l8-9",
      "heading": "Presidential Proclamation on Restriction on Entry of Certain Nonimmigrant Workers",
      "summary": "2025 年 9 月 19 日总统公告限制部分 H-1B 工人入境,新申请须附 10 万美元。",
      "keywords": [
        "H-1B",
        "十万美元"
      ]
    },
    {
      "at": "@l10-18",
      "heading": "Who is subject to / How to pay / When to pay / Exceptions",
      "summary": "谁要付:2025-09-21 起递交、受益人在境外的新申请;怎么付:经 Pay.gov 表单;何时付:递交申请前并附付款证明;例外由国土安全部长批准。",
      "keywords": [
        "十万美元",
        "Pay.gov"
      ]
    },
    {
      "at": "@l19-20",
      "heading": "Eligibility Criteria",
      "summary": "专业职业的资格要求:岗位须属专业职业,受益人须满足学历要求。",
      "keywords": [
        "H-1B"
      ]
    }
  ]
}
catalog/manifest.json
{
  "schema": "creatagent.catalog-manifest/1",
  "contract": "2.0",
  "topicId": "top_20261014-demo-h1b-fee",
  "embedding": "bge-m3@u1",
  "counts": {
    "resources": 3,
    "projections": 3,
    "segments": 0,
    "shots": 0,
    "keyframes": 0,
    "sections": 4,
    "facts": 3,
    "quotes": 1,
    "events": 3,
    "relations": 4,
    "links": 60,
    "keywords": 21,
    "tags": 5,
    "units": 18
  },
  "base": "none",
  "inputs": {
    "angles/pause-not-cancel.md": "cb000cc140e802df",
    "events.json": "d85a5638057fe054",
    "facts/court.md": "fb79850fe5c190a0",
    "facts/payment.md": "96ee68349303ebe2",
    "projections/163d6eea/visual.json": "c0ba6b8319ca8c96",
    "projections/372d6812/outline.json": "8803cf3202051d88",
    "projections/372d6812/text.md": "a16c6851ab665112",
    "quotes.md": "3ac5dd39325ca3e5",
    "relations.jsonl": "c4dad861f769e4d1",
    "resources/link/paygov-h1b-payment-a5228efb.json": "b704a0235b678f2a",
    "resources/screenshot/uscis-h1b-alert-shot-163d6eea.json": "43b524c760592fe0",
    "resources/webpage/uscis-h1b-page-372d6812.json": "2bd11017736fa002",
    "topic.json": "9a00b1497a71ed85",
    "vocab.json": "98a0d0c8e3b50cfe"
  },
  "builtAt": "2026-10-14T20:00:00.000Z"
}
catalog/units.tsv
# creatagent.units/1	单元	种类	所在	文字哈希	一句话
angle:vpt_demo-h1b-pause-not-cancel	angle	angles/pause-not-cancel.md	b209415d730e342c	法院叫停只是暂停键,十万美元迟早要收
evt:evt_20250919-proclamation-signed	evt	events.json#evt_20250919-proclamation-signed	0ef8e2bd274ef118	白宫发布十万美元公告
evt:evt_20260608-district-court-vacatur	evt	events.json#evt_20260608-district-court-vacatur	941187f64a96163c	地区法院撤销执行指引
evt:evt_20260724-first-circuit-denies-stay	evt	events.json#evt_20260724-first-circuit-denies-stay	80678defb88275fa	上诉法院驳回暂缓
fact:fct_1e22cb6fe66d	fact	facts/court.md#L3	1f1a579b33c0e59d	2026-06-08 马萨诸塞州联邦地区法院下令撤销执行 10 万美元要求的机构指引,案号 State of Calif…
fact:fct_595512654d63	fact	facts/court.md#L4	6639a6e7e05a90d2	2026-07-24 第一巡回上诉法院驳回政府的暂缓执行动议;DHS 表示会遵守法院命令,但如果命令日后被解除仍计划收取…
fact:fct_d7606b3867a2	fact	facts/payment.md#L3	42e9aa404e4c3165	雇主须在向 USCIS 递交 H-1B 申请之前,经 Pay.gov 的 H-1B Visa Payment to Re…
quote:fct_6b96e0e69932	quote	quotes.md#L3	3b85e2cc13bda36e	"If this order is later lifted, DHS still plans to collect t…
res:res_163d6eead4f867324539	res	resources/screenshot/uscis-h1b-alert-shot-163d6eea.json	cf031846f15e1fc7	移民局官网置顶:法院已撤销十万美元指引
res:res_372d6812e4f76f4d353c	res	resources/webpage/uscis-h1b-page-372d6812.json	f034d734dd25585e	USCIS H-1B 官方页:谁付、怎么付、法院进展
res:res_a5228efbbf3921c958d4	res	resources/link/paygov-h1b-payment-a5228efb.json	3ea358bc39283c5c	Pay.gov 十万美元缴费入口
sec:res_372d6812e4f76f4d353c@l1-7	sec	projections/372d6812/outline.json#@l1-7	dfdba30e7e25d5b0	页面标题与置顶提示:地区法院 6 月 8 日撤销十万美元执行指引,上诉法院 7 月 24 日驳回暂缓,DHS 若命令解除…
sec:res_372d6812e4f76f4d353c@l10-18	sec	projections/372d6812/outline.json#@l10-18	8a79a2cc8d019291	谁要付:2025-09-21 起递交、受益人在境外的新申请;怎么付:经 Pay.gov 表单;何时付:递交申请前并附付款…
sec:res_372d6812e4f76f4d353c@l19-20	sec	projections/372d6812/outline.json#@l19-20	e7a730d55dc7d170	专业职业的资格要求:岗位须属专业职业,受益人须满足学历要求。
sec:res_372d6812e4f76f4d353c@l8-9	sec	projections/372d6812/outline.json#@l8-9	ba883602b1549785	2025 年 9 月 19 日总统公告限制部分 H-1B 工人入境,新申请须附 10 万美元。
vis:res_163d6eead4f867324539	vis	projections/163d6eea/visual.json	3002d31732e410a7	移民局官网置顶:法院已撤销十万美元指引
vis:res_163d6eead4f867324539#r1	vis	projections/163d6eea/visual.json#r1	3be3d10e4ed3244e	置顶提示框:法院撤销执行指引、上诉法院驳回暂缓、DHS 仍计划收取
vis:res_163d6eead4f867324539#r2	vis	projections/163d6eea/visual.json#r2	680150e3f59a1498	H-1B 分类的一段说明与"总统公告"折叠标题
合格样例的回执(node ingest.mjs check . --json)
{
  "schema": "creatagent.ingest-report/1",
  "contract": "2.0",
  "topicId": "top_20261014-demo-h1b-fee",
  "head": "c0ffee0000000000000000000000000000000000",
  "verdict": "accepted",
  "summary": {
    "errors": 0,
    "warnings": 0
  },
  "issues": []
}

被拒样例

在合格仓库上改了五处:topic.json 删掉推荐官;preview.json 删掉推荐官配音 voice;截图记录用了词表里没有的标签、删掉缩略图;观点文件删掉"关键画面"行、一个行定位超出 text.md 行数;另外交了 vectors/manifest.json 和一个布局外的 notes.txt。

topic.json
{
  "schema": "creatagent.topic/2",
  "topicId": "top_20261014-demo-h1b-fee",
  "title": "H-1B 十万美元:法院叫停之后还收不收",
  "locale": "zh-CN",
  "summary": "2025 年 9 月白宫公告要求部分 H-1B 新申请附 10 万美元;2026 年 6 月联邦地区法院撤销执行指引,7 月上诉法院拒绝暂缓;移民局表示遵守但命令解除后仍会收。",
  "category": "us-immigration",
  "angles": [
    {
      "viewpointId": "vpt_demo-h1b-pause-not-cancel",
      "file": "angles/pause-not-cancel.md",
      "title": "法院叫停只是暂停键,十万美元迟早要收",
      "question": "法院撤销了执行指引,为什么说这笔钱没有取消、只是推迟?",
      "perspective": "移民律师的视角——看程序,不看口号"
    }
  ],
  "createdAt": "2026-10-14T20:00:00.000Z",
  "updatedAt": "2026-10-14T20:00:00.000Z"
}
preview.json
{
  "schema": "creatagent.topic-preview/1",
  "video": {
    "r2Key": "media/sources/top_20261014-demo-h1b-fee/38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4.mp4",
    "sha256": "38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4",
    "bytes": 6120448,
    "width": 1080,
    "height": 1920,
    "mime": "video/mp4",
    "codec": "avc1.640029",
    "durationMs": 42800
  },
  "poster": {
    "r2Key": "media/sources/top_20261014-demo-h1b-fee/38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4.jpg",
    "sha256": "38453d7074b431336be30397ed9218b9e4c0eb1d6be304ba8bc9938dcfc066c4",
    "bytes": 241337,
    "width": 1080,
    "height": 1920,
    "mime": "image/jpeg"
  },
  "madeFrom": [
    "res_163d6eead4f867324539",
    "res_372d6812e4f76f4d353c"
  ],
  "capture": {
    "method": "montage",
    "agentId": "agt_demo-studio",
    "runId": "run_20261014-demoh1bfee"
  },
  "addedAt": "2026-10-14T20:00:00.000Z"
}
resources/screenshot/uscis-h1b-alert-shot-163d6eea.json
{
  "schema": "creatagent.resource/2",
  "resId": "res_163d6eead4f867324539",
  "kind": "screenshot",
  "origin": "source",
  "title": "USCIS H-1B 页面置顶提示截图(法院撤销十万美元执行指引)",
  "caption": "手机视口截图,定位到 2026-06-08 法院命令那段提示,可作口播里的证据画面",
  "lang": "en",
  "brief": "移民局官网置顶:法院已撤销十万美元指引",
  "summary": "USCIS 官网 H-1B 页的置顶提示框:马萨诸塞州联邦地区法院 2026-06-08 撤销十万美元要求的执行指引,第一巡回上诉法院 7 月 24 日驳回暂缓;DHS 表示遵守但若命令解除仍会收取。是\"法院叫停\"最直接的官方画面证据。",
  "tags": [
    "sub:court-ruling",
    "ent:uscis",
    "src:official",
    "use:evidence",
    "use:b-roll"
  ],
  "keywords": [
    "十万美元",
    "法院裁决",
    "暂缓",
    "USCIS",
    "H-1B"
  ],
  "about": {
    "from": "2026-06-08",
    "to": "2026-07-24"
  },
  "source": {
    "url": "https://www.uscis.gov/working-in-the-united-states/h-1b-specialty-occupations",
    "publisher": "U.S. Citizenship and Immigration Services",
    "retrievedAt": "2026-10-14T18:28:04.317Z"
  },
  "capture": {
    "method": "screenshot",
    "agentId": "agt_demo-studio",
    "runId": "run_20261014-demoh1bfee",
    "viewport": "860x1864"
  },
  "object": {
    "r2Key": "media/sources/top_20261014-demo-h1b-fee/163d6eead4f867324539c481b123255712ebac07468971cd9a0dc605b12326db.png",
    "sha256": "163d6eead4f867324539c481b123255712ebac07468971cd9a0dc605b12326db",
    "bytes": 253847,
    "width": 860,
    "height": 1864,
    "mime": "image/png"
  },
  "projections": [
    "visual.json"
  ],
  "addedAt": "2026-10-14T20:00:00.000Z"
}
angles/pause-not-cancel.md
# 角度:法院叫停只是暂停键,十万美元迟早要收

- 视角:移民律师的视角——看程序,不看口号
- 核心问题:法院撤销了执行指引,为什么说这笔钱没有取消、只是推迟?
- 概述:法院撤销的是"机构执行指引",公告本身没被推翻;上诉法院只是不准暂缓,没有裁定公告违法;移民局官网明写"命令解除后仍会收"。三步合起来,这笔钱是推迟,不是取消。
- 展开:2025-09-19 公告把十万美元写进入境限制;2026-06-08 地区法院撤的是 USCIS 落实公告的指引,理由是程序,不是公告权力本身;2026-07-24 上诉法院驳回暂缓,意味着在上诉期间指引无效,但案子还在走。移民局的置顶提示用的是"will comply … while DHS considers next steps""still plans to collect",这是典型的"暂停执行、保留追收"的措辞。对雇主来说,现在不付是合法的,但要为"命令被推翻后补收"留预算。
- 关联:和 2017 年旅行禁令的走法几乎一样——地区法院叫停、上诉法院拒绝暂缓、最后在最高法院翻盘;对企业财务来说,这是一笔或有负债,而不是已经省下的钱。
- 论据:facts/court.md#L3、facts/court.md#L4、facts/payment.md#L3
- 真源:res_163d6eead4f867324539、res_372d6812e4f76f4d353c@l3-99、res_372d6812e4f76f4d353c@l13-16、res_a5228efbbf3921c958d4
- 反驳:最强的反驳是"公告写明 12 个月后自动失效,官司拖过 2026-09-21 就自然作废"——这取决于白宫是否延期,本仓库尚未核实(见 MEMORY.md 待核)。
被拒样例的回执(校验器原话)
{
  "schema": "creatagent.ingest-report/1",
  "contract": "2.0",
  "topicId": "top_20261014-demo-h1b-fee",
  "head": "9f1c2b7e00000000000000000000000000000000",
  "verdict": "rejected",
  "summary": {
    "errors": 8,
    "warnings": 0
  },
  "issues": [
    {
      "code": "C-ANGLE-LINES",
      "severity": "error",
      "rule": "观点文件缺\"视角\"\"概述\"\"反驳\"\"关键画面\"行,或概述超过 400 字",
      "path": "angles/pause-not-cancel.md",
      "field": null,
      "ref": null,
      "expected": "- 关键画面:res_…、res_…@定位",
      "message": "angles/pause-not-cancel.md 缺 \"- 关键画面:\" 行",
      "fix": "观点文件写齐 `- 视角:…`、`- 概述:…`(≤ 400 字)、`- 反驳:…`、`- 关键画面:res_…` 四行"
    },
    {
      "code": "C-RENDITION-MISSING",
      "severity": "error",
      "rule": "视觉资源没有缩略图",
      "path": "resources/screenshot/uscis-h1b-alert-shot-163d6eea.json",
      "field": null,
      "ref": "res_163d6eead4f867324539",
      "expected": null,
      "message": "screenshot 资源缺 renditions.thumb",
      "fix": "生成长边 480 的缩略图传 R2,写进 renditions.thumb"
    },
    {
      "code": "L-GATE-FILE",
      "severity": "error",
      "rule": "外部提交包含入库门写的文件",
      "path": "vectors/manifest.json",
      "field": null,
      "ref": null,
      "expected": null,
      "message": "外部提交不得包含或改动入库门写的文件 vectors/manifest.json",
      "fix": "撤回对 vectors/ 的改动;向量由入库门计算"
    },
    {
      "code": "L-PATH-UNKNOWN",
      "severity": "error",
      "rule": "路径不在 TOPIC_REPO_LAYOUT 表内",
      "path": "notes.txt",
      "field": null,
      "ref": null,
      "expected": null,
      "message": "路径 notes.txt 不在布局表内",
      "fix": "删除该文件,或按 TOPIC_REPO_LAYOUT 改到允许的路径"
    },
    {
      "code": "R-LOCATOR-RANGE",
      "severity": "error",
      "rule": "定位超出原件时长 / 行数",
      "path": "angles/pause-not-cancel.md",
      "field": null,
      "ref": "res_372d6812e4f76f4d353c@l3-99",
      "expected": null,
      "message": "定位 @l3-99 超出 text.md 行数 20",
      "fix": "定位改到原件时长 / 行数之内"
    },
    {
      "code": "R-TAG-UNDEFINED",
      "severity": "error",
      "rule": "标签不在 vocab.json 里",
      "path": "resources/screenshot/uscis-h1b-alert-shot-163d6eea.json",
      "field": "$.tags",
      "ref": "use:b-roll",
      "expected": "vocab.json tags 里已定义的标签之一:sub:court-ruling、sub:payment、ent:uscis、src:official、use:evidence",
      "message": "标签 use:b-roll 不在 vocab.json",
      "fix": "在 vocab.json tags 里定义该标签(label + def),或改用已定义的标签"
    },
    {
      "code": "S-PREVIEW",
      "severity": "error",
      "rule": "preview.json 不合格式,或缺推荐官配音 voice、配音人不是本选题的推荐官",
      "path": "preview.json",
      "field": "$.voice",
      "ref": null,
      "expected": "{ by: \"rec_<slug>\", lang: \"zh-CN\", transcript: [\"[t0.0-3.2] 第一句\", …] }",
      "message": "preview.json 缺 voice:预览视频要由推荐官配音",
      "fix": "preview.json 写 voice:{ by: topic.json recommender.id, lang, transcript: [\"[t0.0-3.2] 第一句\", …] },视频 9:16、30–60 秒、H.264"
    },
    {
      "code": "S-RECOMMENDER",
      "severity": "error",
      "rule": "topic.json 缺推荐官身份或形状不对",
      "path": "topic.json",
      "field": "$.recommender",
      "ref": null,
      "expected": "{ id: \"rec_<slug>\", name, avatar: 图片对象, voice: 音频对象 }",
      "message": "topic.json 缺 recommender(推荐官身份)",
      "fix": "topic.json 加 recommender:{ id: \"rec_<slug>\", name, avatar(长边 ≥ 256 的方图), voice(3–60 秒的 m4a / mp3 声音样本) }"
    }
  ]
}
16

版本与兼容

  • 本标准版本 2.0,写在构建器产物 catalog/manifest.json 的 contract 字段,只此一处;每个 JSON 文件另带自己的 schema 号(creatagent.resource/2、creatagent.timeline/1 …)。
  • 同一大版本内只做加法:新增可选字段、可选文件、新关系名、新标签命名空间是小版本,读者忽略不认识的东西即可,存量数据不动。
  • 必填字段增加、路径或文件名改变、字段含义改变、删字段是大版本:平台会对全部选题开 goal: fix 运行,请推荐官的 Agent 按新版重写;不做长期双格式兼容。
  • 入库门只接受大版本相同、小版本不高于它自身支持的提交。
  • 本页、schema.json、llms.txt 由同一份源生成,三者永远一致;以 schema.json 的 $id 与 x-contract 为准。