2.3 KiB
2.3 KiB
conventions.md — Agent 操作手册
本库供 agent(脚本/人类)规范操作。读完本文 + 根 INDEX.json 即可正确新增内容。
新增一个 source(L1)
- 在
sources/{china|exams|internal}/下选/建对应域 YAML。 - 加一条
source,必填id(kebab-case 唯一)、title、publisher、type、license、status。 license必须是LICENSES.md枚举值;不确定就先标unknown,但 30 天内须核查。- 还没下载的条目
status: planned,不要先写oss_key。 - 下载后:
status: fetched,fetched_at: YYYY-MM-DD,在items[]登记每个文件。
上传原始文件到 OSS(L2)
- 路径约定:
edu-raw/{k9|exams|internal}/{学科或考试}/{类目}/{source-id}/{filename} - 文件名保持原始名(便于法务比对原件);清洗发生在 structured 层。
- 运行
python tools/oss_sync.py:上传sources/里标记待传的文件,自动回填oss_key/sha256/size/fetch_date。
写结构化数据(L3)
- 落在
structured/对应学科/考试目录。 - JSONL 记录必须带
source.source_id(指向sources/的 source id)+schema版本号。 - 记录级/字段级 license 标注沿用 vocab 的成功模式(见
schemas/vocab-1.1.md)。 - 每条 L3 记录的
license= 其引用 source 的最严格许可(lint 会重算并校验)。
衍生数据(L4)
- 不在此仓库。去
edu-derived:生成资产 + 在manifest/assets.jsonl登记inputs[](指向本库 source_id 或具体文件路径)。 - 红线:L4 的
inputs不得含restricted/internal-only/unknown,否则edu-derived的 lint 直接失败。
命名
- source id / item id / 目录名:kebab-case。
- L3 记录 id:
{考试缩写}-{来源缩写}-{序号4位},如a2k-cepoc-0001、b1-official-0012。 - OSS key 与 git 路径同构:
structured/exams/ket/vocab/↔edu-raw/exams/ket/vocab/。
校验与提交
python tools/lint_sources.py # source 登记合规
python tools/lint_structured.py # 血缘 + license 继承
python tools/index_build.py # 重新生成 INDEX.json
git add -A && git commit -m "..."
CI(Gitea Actions)会在 push 时自动跑上述 lint,失败则标红。不要绕过 lint 提交。