literary-lab

AGENTS.md — literary-lab 工作契约

本文件对本仓库的一切 agent 与人类协作者生效,是唯一权威规范。
冲突时的优先级:AGENTS.md > docs/** > 单张任务卡 > 模型自身的写作习惯。
读完本文件再动手。任何一条铁律被违反,产出即视为未完成,不进入 review。

0. 这个仓库在干什么

为每位入选作家建档案,为每部作品建研究目录,用可核验的文本证据解释它如何运作:结构如何发力、人物何时脱离作者、语言在哪里露馅、幽默的机制是什么、荒诞在哪一步开始自洽。

判断研究是否成立,只看两件事:引文能不能核,论断能不能被反例推翻。

1. 十条铁律

  1. 无出处不引文。 任何加引号(“、「」、《》 内直接引用原文)的句子,必须能在同一作品的 05-excerpts.md 找到带 定位: 的条目。找不到就把引号去掉,改成转述。
  2. 定位分三级,不许装。
      1. L1 page:页码(首选)
        1. L2 section:章节 / 幕 / 场 / 段序(暂无可核页码时使用)
          1. L3 unverified:未核 —— 不得作为原文引用出现,只能转述,且必须在正文写明“转述,未核页码”
        2. 不代作者说话。 作者 / 叙述者 / 人物 / 译者 / 评论者是五个不同位置。写“叙述者在这里撒谎”,不写“卡夫卡认为”。译者的措辞不等于作者的原意。
        3. 每节至少一处文本证据 + 一处自我怀疑。 没有反例、没有“我读不出来”的论断,等于没做研究。
        4. 复述不超过单文件 15%。 本仓库不生产内容简介。01-what.md 的情节骨架允许 30%,其余文件禁止大段复述。
        5. 禁用空词。 “深刻、震撼、细腻、淋漓尽致、引人深思、堪称、无不、令人叹为观止”——除非紧跟着指认到具体某句、某个词、某个标点。make check 会扫这些词并报警。
        6. 版本意识。 译本差异必须点名(“此处文泽尔译作 X,另一译本作 Y”);没有原文语言能力时,明说依据的是译本。
        7. 二手文献只用于定位争议。 评论家的结论不能替代你的阅读;引用时标 [二手] 并写清它反对谁。
        8. 不做 AI 腔。 禁“首先/其次/最后”、禁总分总、禁金句收尾、禁“让我们一起”、禁把每个发现都写成三点。
        9. 状态机唯一。 作品 status 只能按 planned → drafting → verifying → review → done 推进;done 必须 make check 全绿且 rubric ≥ 12/14。

        2. 目录契约

        authors/<author-slug>/author.md
        authors/<author-slug>/works/<work-slug>/
            README.md  01-what.md  02-structure.md  03-characters.md
            04-language.md  05-excerpts.md  06-context.md
        • <author-slug>、<work-slug>:小写英文连字符(wang-xiaobo、golden-age),与 front matter 的 slug 完全一致。
        • 一个作家至少一个作品目录。主推作品写在 author.md 的「作品队列」表里,未建目录的作品标 queued。
        • status: planned 的作品目录只需 README.md;drafting 起六个文件齐全,且满足字数下限(docs/methodology/quality-rubric.md)。

        3. 文件契约(YAML front matter)

        每个 .md 研究文件以 --- 包裹的 front matter 开头,键值扁平,列表用 [a, b] 或 - 缩进块。

        author.md 必备键:

        slug: kafka
        name: 弗兰茨·卡夫卡
        name_en: Franz Kafka
        born: 1883
        died: 1924
        lang: de
        order: 2
        traits: [absurd-narrative, narrator-self-doubt]
        status: done
        updated: 2026-11-01

        works/<work>/README.md 必备键:

        slug: the-trial
        title: 审判
        author: kafka
        year: 1925
        form: 长篇小说(未完成)
        traits: [absurd-narrative, narrator-self-doubt]
        status: drafting
        edition: 待核(候选:文泽尔译)
        updated: 2026-11-01

        traits/<trait>.md 必备键:slug、name、order、definition。特质 slug 是全库唯一枚举,新增特质须先建文件、再改 traits/README.md。

        状态取值的语义:

        • 作品:planned(只有 README)→ drafting(六份文件齐)→ verifying(核定位)→ review(审校)→ done(rubric 达标)
        • 作家:planned(仅建档,无作品开工)→ drafting(有作品在写)→ done(至少一部作品 done)

        必备小节(make check 校验):

        文件必需标题
        author.md## 选择理由 ## 叙事签名 ## 作品队列 ## 研究问题 ## 版本与译本
        README.md## 论点 ## 文件地图 ## 研究问题 ## 状态
        01-what.md## 论点 ## 情节骨架 ## 命题与反命题
        02-structure.md## 时间与顺序 ## 视角装置 ## 结构指纹
        03-characters.md## 人物表 ## 自主性
        04-language.md## 声音 ## 句法与节奏 ## 译文问题
        05-excerpts.md至少 3 个 ### Q-... 引文块
        06-context.md## 版本 ## 位置 ## 影响与争议 ## 出处

        4. 摘录的格式(05-excerpts.md 的唯一合法形状)

        摘录是本仓库的主体,不是附属。每部作品默认 20 条(写在 README.md 的 excerpt_target),按章节配额可扩到 100+;excerpts_status 记阶段:seed → growing → full(full 时 CI 强制达到目标条数)。

        两种条目,不许混用:

        • Q- 逐字引文:真的逐字,措辞有把握。正文里加引号(“…”、「…」)的原文只能来自这里。
        • R- 待核摘录:定位清楚、机制清楚,但措辞没十足把握。用转述,不加引号,并写清缺什么。
        ### Q-KAFKA-TRIAL-002 把"法"定义成一扇门
        
        > 法的门前站着一个守门人。
        
        - 定位:《审判》,第九章「在大教堂里」(L2 section)
        - 原文语言:de
        - 特质:absurd-narrative
        - 核:高
        - 解析:主语是"法",谓语却是"门前站着"……(≥60 字)
        
        ### R-KAFKA-TRIAL-014 布洛克的卷宗
        
        - 定位:《审判》,第八章「商人布洛克」(L2 section)
        - 特质:narrator-self-doubt
        - 内容:布洛克向 K 展示自己多年积下的案情文件,一叠一叠,越翻越多。(转述,不加引号)
        - 机制:文件的增殖把"打官司"变成一种收藏行为……(≥40 字)
        - 缺:原句措辞待核;页码待核。

        规则:

        • 编号全库唯一:Q-<作者大写>-<作品大写>-<三位序号>,R- 同构。
        • Q-:单条引文 ≤ 200 汉字;- 解析: ≥ 60 字;定位只能是 L1 page 或 L2 section,L3 一律拒收。
        • Q- 必须写 - 核:高 或 - 核:中:高 = 措辞有把握,只差页码;中 = 句子主体确定、个别字词待核。没有“低”这一档——连主体都拿不准的,就老实留在 R-。
        • R-:- 内容: ≥ 40 字、- 机制: ≥ 40 字、- 缺: 必填;不得出现 > 引文(出现即为“近似引用”,make check 会拒收)。
        • 每部作品 done 之前至少 3 条 Q-;excerpts_status: full 时条数必须达到 excerpt_target。
        • 升级路径:拿到实体书 → 逐条核措辞 → 把 R- 改写成 Q-(自动分配新序号)+ 补页码(升级为 L1)→ make index。改前缀后,正文里对旧编号的引用要一并改,make check 会抓漏。

        贴原文:把 R- 升级成 Q-(一条命令)

        # 单条
        make promote ARGS="R-WANGXIAOBO-GOLDENAGE-002 --text '原文逐字粘贴在这里' --page 42 --confidence 高"
        
        # 批量:paste.md 里每条以 ### R-xxx 开头,> 后面是原文,可选 - 页:42 / - 核:高
        make promote ARGS="--from-file paste.md"

        先导出待贴清单,填完再批量升级:

        python3 tools/ll.py pending --author wang-xiaobo > paste.md   # 每条给出编号、定位、要核的机制
        # 在 paste.md 里把 `> 原文` 填上,能核页码就填 `- 页:42`,措辞有把握就改 `- 核:高`
        make promote ARGS="--from-file paste.md"

        命令会自动:分配下一个 Q- 序号、拼好 解析(机制 + 语境)、刷新摘录目录与 INDEX.md。剩下的只需跑 make check。

        占位符(“粘贴到这里”)会被拒收——防止把模板当成原文写进库。

        这是本仓库唯一允许“贴原文”的入口——因为原文必须来自你,不能来自模型的记忆。

        • 文件顶部必须有 ` / 双标记,中间的目录表由 make index` 生成,不许手改。

        额度(版权约束,与质量约束分离):

        约束上限
        单条 Q- 引文200 汉字(超出则分段节引,标 (节引))
        单个研究文件引文合计不超过该文件正文的 25%
        单次提交新增引文1500 汉字
        整库以 make stats 输出为准,超过 25% 必须削减

        R- 不计入引文字数,也不构成版权问题(它是转述),但它同样需要机制分析——转述不是偷懒的出口。

        5. 角色与交接

        五个角色,各有卡片:agents/curator.md、agents/close-reader.md、agents/source-verifier.md、agents/style-editor.md、agents/reviewer.md。

        角色管什么不管什么
        curator目录、front matter、队列、INDEX、bibliography不写解读
        close-reader01–05 六份解剖不改书目、不核页码
        source-verifier版本、译本、页码、定位升级 L3→L1不改解读结论
        style-editor去 AI 腔、去书评腔、节奏与长短句不改事实与论点
        reviewer按 rubric 打分、列 P0/P1/P2不直接改稿

        交接一律用任务卡(templates/task-card.md,或 GitHub 的「研究任务卡」issue)。任务卡必须写清:目标路径、本轮 1–3 个问题、已知证据、完成判据。没有完成判据的任务不许开工。

        角色之间不许互相代笔。close-reader 发现引文核不了,标 待核 交给 source-verifier,不自己编页码。

        6. 文体

        • 用“我发现 / 这里有一处 / 如果……那么 / 我不确定的是”推进,不用“首先其次最后”。
        • 每段三块肌肉:证据(哪一句)→ 推理(因此什么)→ 保留(但哪里说不通)。
        • 允许不确定,并且要把不确定写出来;本库的诚实度就是它的信用。
        • 少用形容词,多用动词和名词;引文之后必须先解释句子怎么运作,再谈感受。
        • 禁止用一句漂亮话结束整篇。结尾要么留下未解决的问题,要么指出下一个可查的证据。

        7. 命令

        make check     # 结构 + front matter + 引文 + 死链 + INDEX 同步 + 禁用词
        make index     # 重新生成 INDEX.md 与 traits/MATRIX.md
        make test      # tools 单元测试
        make stats     # 字数与覆盖统计
        make new-author ARGS="slug --name 中文名 --name-en 'Latin Name' --born 1900 --died 1970 --order 11"
        make new-work   ARGS="author-slug work-slug --title 作品名 --year 1900"

        8. 提交与 PR

        • 一次提交只做一件事:一个作品目录、或一个特质、或一次工具改动。
        • 提交信息:<scope>: <做了什么>,scope 用作者/作品 slug,例如 kafka/the-trial: 补第九章引文定位。
        • PR 必须过 .github/pull_request_template.md 的清单;make check 红了不许开 PR。
        • 任何“我觉得”进入正文前,先问:这句话的证据在哪一句?

        9. 已知边界(写在这里,防止后来者高估本库)

        • 除中文原作外,本库多数判断依据中译本,原文层面的论断一律标注依据译本。
        • 页码核校需要实体书或可信扫描件;在核校完成前,相关引文停在 L2 section,这是有意的,不是疏漏。
        • 本库不收录全文,不能替代原书;也不做作家生平年表(需要时给链接,不给转述)。