/webnovel-write,但被术语黑话、出错信息、长流程劝退docs/architecture/author-friendly-reporting-plan-2026-06-07.md(codex plan)是工程落地计划(Phase / 文件 / 测试 / 施工顺序)。两份互补、配套使用,非二选一。webnovel-writer 有一条严谨的工程事实链:Story System → 闸门(write-gate) → CHAPTER_COMMIT → 投影(projection),外加 RAG 与长期记忆。这条链保证「写到几百章仍不写崩」的一致性,是产品的核心价值。
问题在于:这条链把工程语言、工程过程、工程错误,原样喷给了写作者。 作者实际接触的不是「设计精良的写作工具」,而是 preflight、write-gate prewrite/precommit/postcommit、projection_status、CHAPTER_COMMIT accepted/rejected、mainline_ready=false 这类面向开发者的输出。
用户在四类痛点上明确表达了改善意愿(四项全选):
| 痛点 | 作者的真实体验 |
|---|---|
| 进度像黑箱 | 写一章时 Claude 刷一屏命令和 JSON,不知道在干嘛、是否正常、还要多久 |
| 出错看不懂没法救 | 报错讲技术原因,不告诉作者「现在该敲哪条命令 / 改哪个文件」 |
| 审查报告不好用 | 每章报告偏技术、偏长,难快速抓住「这章行不行、要不要改、改哪」 |
| 术语劝退 | 合同 / 提交 / 投影 / 闸门 / commit accepted 等工程词贯穿全程,作者无对应心智模型,产生距离感 |
这不是四个独立问题,是同一个缺口的四个切面:
系统缺少一层「作者界面层」 —— 把工程事实翻译成作者语言、把工程过程压缩成作者关心的进度、把工程错误映射成作者能执行的下一步、把审查产物渲染成作者能决策的结论。
| 痛点 | 本质 | 该层补什么 |
|---|---|---|
| 进度像黑箱 | 过程语言没翻译 | 把多步流水线压成作者里程碑 |
| 出错没法救 | 错误没翻译 + 没给出路 | 错误码 → 人话 + 下一步行动;可重跑续跑 |
| 审查报告不好用 | 结果没翻译 + 不可执行 | 一句结论 + 最多 3 条「怎么改」,技术细节按需展开 |
| 术语劝退 | 概念没翻译 | 统一术语对照 |
结论:方案的核心是在工程链与作者之间补一层翻译/呈现,工程事实源一个字不动。工程严谨不牺牲,作者那一侧完全换一张脸。
目标
非目标(YAGNI)
/webnovel-* 命令,不破坏现有用户习惯与既有文档。两条贯穿全程的原则:
关于「Claude Code 能力边界」:本设计不假设宿主有折叠 UI、进度条、后台任务或图形按钮。所有「隐去工程细节」都通过 Skill 约束少输出 + Python helper 渲染精简报告 实现,不是任何界面级折叠。
三层。作者只跟最上层打交道,工程内核退到幕后。作者外壳不是新程序/新界面,而是 Skill 提示规范 + Python helper + 文本输出 + 日志这四样东西的合称。
┌─────────────────────────────────────────────┐
│ 作者外壳 (Author Shell) ← 物理载体:Skill规范+helper+文本+日志 │
│ · 导航尾巴:"接下来你可以…" │
│ · 命令任务化(仅提示语言,不改命令名) │
│ · 可自动处理项:不打扰作者,但最终报告必说明 │
│ · 工程细节默认不展示:作者看里程碑+结论,需要时给路径/命令 │
├─────────────────────────────────────────────┤
│ 呈现/翻译层 (Author Layer) ← 地基,零侵入 │
│ · 进度播报规范 · 错误→行动映射表(catalog) │
│ · 审查作者视图 · 术语对照表 │
├─────────────────────────────────────────────┤
│ 工程内核 (Engine) ← 一个字不动 │
│ Story System · 闸门 · commit · 投影 · RAG │
└─────────────────────────────────────────────┘
七个职责单一、可独立交付的组件,按期归位。每个组件都明确了在 codex plan 里的工程落点。
mainline_ready→这本书的档案是否就绪。references/author_glossary.md 或结构化 author_glossary.json),SKILL prompt 与脚本输出统一引用,禁止各处自造译法。codex plan §5 已给出初始译表,并入本组件。preflight / write-gate / doctor 等产出的错误码或特征。mainline_ready=false → 「这本书还没建档,先运行 /webnovel-init」。error_catalog.py + author_error_catalog.json;未命中条目时降级到「诚实报错 + 指向 /webnovel-doctor」,绝不崩溃或乱翻译。review-pipeline 产出的 review_result(含 blocking_count 等)。review_pipeline.py 报告渲染环节新增作者视图段,不改 reviewer schema、不改判定逻辑。project-status 输出的 phase 与下一步。/webnovel-write 5」。天然寄生在 codex plan 三段式报告的第三段「下一步建议」。project-status。user_report.py 的一部分,被各命令收尾调用,输出统一格式 + 可复制命令。/webnovel-* 原命令名不动,不做真实别名命令。翻译层是只读消费 + 重新渲染,绝不插进工程链的写路径。
工程链照常产出事实产物
(state.json / review_result.json / gate JSON / 错误码 / projection_log.jsonl)
│ (只读消费)
▼
翻译层 查 术语表 / 错误目录 / 审查视图规范 → 渲染成作者语言
│
▼
作者看到人话;他选择的"下一步"最终仍调用原工程命令
事实源永远是工程产物,不是翻译产物。 翻译错了改翻译层即可,底层数据从没动过 —— 这是「隐去但不放松校验」的技术保证,也使翻译层可被独立测试与替换。
错误分三类区别对待,对应 codex plan 的异常分类(已自动处理 / 建议确认 / 必须处理):
missed_nodes 被 rejected)→ 人话说清 + 2-3 个有限选项(接受 / 手改 / 放弃)。/webnovel-doctor。出错恢复 = 重跑即续跑(吸收 codex plan §9)。 作者不需记补跑命令;重跑同一条命令,系统据「可信完成判据」识别已完成步骤,从失败点续,不重写已有成果。首版只覆盖 /webnovel-write。
重跑必须停下问作者的边界(codex §9.5,完全认同):
红线:绝不自动跳过校验、绝不把 rejected 伪装成 accepted、绝不吞掉影响事实正确性的错误、绝不静默修复(修了就要说)。不做自动修复大循环(自愈白名单极易膨胀成新故障点,风险/收益比最差,两边独立评审都否决)。
测行为、不测文案字面(与项目「测试是探针不是约束」取向一致):
| 期 | 范围 | 交付物 | 退出条件 |
|---|---|---|---|
| 一(地基) | 翻译层四件套 | 术语对照表、进度播报规范、错误目录、审查作者视图 | 四件套上线且通过忠实性/覆盖探针;零侵入工程内核 |
| 二(外壳上半) | 导航尾巴 + 命令任务化 | 各命令收尾统一「下一步」提示、任务语言映射 | 每条命令收尾给出正确下一步;原命令名不变 |
| 三(外壳下半) | 可自动处理项说明 + 工程细节默认不展示 + 重跑续跑 | 自动处理项写进报告、默认精简呈现、/webnovel-write 重跑续跑 |
不静默/续跑边界探针全过;默认视图只见里程碑与结论 |
每期独立交付、可随时叫停。该排序与 codex plan 的优先级一致(见 §11)。
更正一处自我推测:本 spec v1 第 11 节曾推测 codex plan「聚焦 reporting、范围更窄」。经读其全文,此推测错误 —— codex plan 范围很广,断点续跑、subagent 返回协议、耗时呈现、脱敏日志均已覆盖,在这些面上比本 spec 更全、更可落地。
双向交叉验证(两份独立产出 + 互审)达成的共识:
合并分工:本 spec 定产品分层(分层 / 组件职责 / 边界 / 红线),codex plan 定工程落地(Phase / 文件 / 测试 / 施工顺序)。本 spec 七组件并入 codex plan 的落点见各组件「落地形态」。
合并后实施优先级(与 codex 评审对齐):
user_report helper