日期:2026-06-07 状态:草案 v2 · 已对齐
docs/superpowers/specs/2026-06-07-author-friendly-experience-design.md范围:承接 spec 的「作者外壳 / 作者界面层」七组件,统一init / plan / write / review的最终汇报、subagent 返回协议、错误目录、审查作者视图、下一步建议、异常分类、耗时呈现与作者友好术语;先取消 token 统计 核心原则:问题不静默、自动处理要说明、技术细节默认隐藏、最终报告面向作者而不是工程日志;工程内核不动 实施方式:先用 Skill / Agent 契约固定行为,再用 runtime helper 收敛格式,避免只靠提示词导致输出漂移
本计划是 docs/superpowers/specs/2026-06-07-author-friendly-experience-design.md 的工程落地计划,不再另起一套产品口径。
分工如下:
| 文档 | 负责什么 | 不负责什么 |
|---|---|---|
| 产品 spec | 定义「工程内核 + 作者外壳」分层、七个组件、错误恢复红线、分期价值 | 不展开具体文件、测试与施工顺序 |
| 本 plan | 把七组件落到 Skill / Agent / runtime helper / 测试 / 文档 | 不重新定义产品目标,不放宽 spec 红线 |
对齐后的共同边界:
write-gate、chapter-commit、projection、RAG 等工程内核不改语义、不降校验强度。七组件在本计划中的落点:
| spec 组件 | 本 plan 落点 |
|---|---|
| 术语对照表 | §5 单一事实源;Phase 1 先落结构化词表 |
| 进度播报规范 | §8 过程易用性;Phase 5A |
| 错误→行动映射表 | §15 异常分类 + Phase 4 runtime helper;新增 error_catalog.py 与 author_error_catalog.json |
| 审查作者视图 | §16 helper / review_pipeline.py 渲染;Phase 4 优先接 review |
| 导航尾巴 | §4 三段式报告第三段;§20 推荐施工顺序中作为早期交付 |
| 命令任务化 | §4 / §19 / §23 的下一步建议;只改提示语言,不新增别名 |
| 可自动处理项 + 默认不展示工程细节 | §3.2-3.4、§11、§15、§21;第三期前只做说明和日志,不扩白名单 |
本计划把 webnovel-writer 的交付体验从“流程执行完以后由主 agent 自行总结”改成“每次都有稳定、可读、可信的作者回执”。
核心交付:
/webnovel-init、/webnovel-plan、/webnovel-write、/webnovel-review 的最终汇报要求。context-agent、reviewer、data-agent、deconstruction-agent 的状态、问题、自动处理与耗时。project-status、doctor、write-gate、review-pipeline、chapter-commit、projection_log 等结构化输出。当前项目底层流程已经比较完整:
project-status 能判断项目阶段和下一步。doctor 能给阶段感知体检。write-gate 已覆盖写前、提交前、提交后三个边界。review-pipeline 能规范化审查结果、生成报告并落库。chapter-commit 能生成写后事实并驱动 state / index / summary / memory / vector 投影。projection_log 能定位投影状态。问题不在于缺少检查,而在于这些检查结果没有稳定地翻译给作者:
init / plan / write / review 四条主流程的成功标准清楚,但“如何交付给作者”的要求不够清楚。本轮改造不重写写作主链,不新增自动修复大循环;重点补“作者可理解的交付层”。
所有改造必须基于 Claude Code 已有能力和本插件可实现的 runtime 能力,不编造宿主不存在的 UI、后台任务或交互机制。
已可依赖的能力:
SKILL.md 约束流程和最终输出。Agent 工具调用已注册 subagent。AskUserQuestion 做关键裁决,前提是该 Skill frontmatter 已允许并且宿主环境支持。Read / Write / Edit / Bash 等工具读取、写入和运行本插件脚本。.webnovel/、.story-system/、日志和中间产物。不能假设的能力:
因此,本计划中的“过程提示”是主流程在关键节点输出短提示;“交互式裁决”是基于 AskUserQuestion 或普通对话提问的有限选择;“断点续跑”是插件 runtime 的文件与状态检查能力,不是 Claude Code 内置工作流引擎。
默认用作者能理解的中文表达,不直接输出 subagent、artifact、projection、schema、runtime contract 等工程词。
必要时可以在问题详情中保留文件路径和命令,但默认先讲影响:
“保存本章故事事实”失败,会影响后续查询本章发生过什么。
而不是:
data-agent artifact schema_error: extraction_result missing accepted_events
以下情况必须在最终报告中出现:
--minimal 写 no-review artifact。write-gate 任一阶段 failed。chapter-commit rejected。系统自动做过的事要简短说明,包括:
说明不需要讲全部过程,只说明“处理了什么、是否影响结果”。
最终报告优先给结论和影响。只有当用户需要处理时,再给路径、命令或错误类型。
能由 runtime 确认的状态,不靠主 agent 口头判断。
最终报告 helper 优先消费结构化数据:
project-status --format jsondoctor --format jsonwrite-gate --format jsonreview-pipeline payloadchapter-commit payloadprojection_logSkill 文档只规定“必须汇报什么”,不让每个 Skill 自己发明报告格式。
最终报告只能降低“结束后的不确定感”,不能解决执行过程中的焦虑。
长流程必须让作者持续知道四件事:
过程提示应该短、少术语、少打扰。默认由系统继续推进,只有真正影响创作方向、事实一致性或文件安全时才打断用户。
“告诉作者怎么恢复”是底线,“作者重新执行同一个命令即可自动续跑”才是目标。
主流程应逐步做到幂等:
作者默认看不到 JSON、schema、traceback 和完整命令日志。
但系统需要保留本地溯源材料:
普通报告只给一条低干扰提示:
如需反馈故障,可附上 .webnovel/logs/run_last.log。
所有主 Skill 最终输出统一为:
总状态:已完成 / 部分完成 / 需要你处理 / 未完成。
一、产生的文件与完成情况
- ...
二、过程中遇到的问题与异常耗时
- 已自动处理:...
- 建议确认:...
- 必须处理:...
- 耗时异常:...
三、下一步建议
- ...
状态含义:
| 状态 | 含义 |
|---|---|
| 已完成 | 当前阶段产物齐全,关键检查通过,可以进入下一步 |
| 部分完成 | 有主要产物,但存在跳过、降级、未完成项或非阻断问题 |
| 需要你处理 | 当前结果可保存,但必须由用户确认、裁决或补充信息 |
| 未完成 | 关键产物缺失或阻断失败,不能继续下一阶段 |
术语翻译不是每个 Skill 各写一份,而是作为 Author Layer 的单一事实源维护。
首版采用结构化数据,便于 runtime helper 和 prompt integrity 测试复用:
webnovel-writer/references/author_glossary.json
可选补一份面向文档阅读的 Markdown 摘要,但实现与测试只以 JSON 为准。
维护规则:
user_report.py、error_catalog.py、审查作者视图都从同一术语表取作者友好表达。| 工程词 | 作者友好表达 |
|---|---|
| subagent | 写作助手 / 审查助手 / 资料整理助手 / 拆书助手 |
| context-agent | 写前准备 |
| reviewer | 写作检查 |
| data-agent | 保存本章故事事实 |
| deconstruction-agent | 参考作品拆解 |
| artifact | 中间结果文件 |
| review_results | 写作检查结果 |
| fulfillment_result | 本章目标完成情况 |
| disambiguation_result | 待确认的人名/设定歧义 |
| extraction_result | 本章新发生的故事事实 |
| chapter-commit | 提交本章事实 |
| projection | 更新故事资料 |
| state / index / summary / memory / vector | 状态 / 索引 / 摘要 / 长期记忆 / 检索库 |
| blocking issue | 会影响继续写作的问题 |
| fallback | 临时降级读取 |
| runtime contract | 本章写作要求 |
| schema error | 中间结果格式不完整 |
| pending | 等待确认 |
| rejected | 本章事实未通过提交 |
| accepted | 本章事实已通过提交 |
webnovel-writer/skills/webnovel-init/SKILL.mdwebnovel-writer/skills/webnovel-plan/SKILL.mdwebnovel-writer/skills/webnovel-write/SKILL.mdwebnovel-writer/skills/webnovel-review/SKILL.mdwebnovel-writer/agents/context-agent.mdwebnovel-writer/agents/reviewer.mdwebnovel-writer/agents/data-agent.mdwebnovel-writer/agents/deconstruction-agent.md新增:
webnovel-writer/references/author_glossary.jsonwebnovel-writer/references/author_error_catalog.jsonwebnovel-writer/scripts/data_modules/author_glossary.pywebnovel-writer/scripts/data_modules/error_catalog.pywebnovel-writer/scripts/data_modules/review_author_view.pywebnovel-writer/scripts/data_modules/user_report.pywebnovel-writer/scripts/data_modules/run_ledger.pywebnovel-writer/scripts/data_modules/run_logger.pywebnovel-writer/scripts/data_modules/tests/test_author_glossary.pywebnovel-writer/scripts/data_modules/tests/test_error_catalog.pywebnovel-writer/scripts/data_modules/tests/test_review_author_view.pywebnovel-writer/scripts/data_modules/tests/test_user_report.pywebnovel-writer/scripts/data_modules/tests/test_run_ledger.pywebnovel-writer/scripts/data_modules/tests/test_run_logger.py修改:
webnovel-writer/scripts/data_modules/webnovel.pywebnovel-writer/scripts/review_pipeline.pywebnovel-writer/scripts/data_modules/tests/test_webnovel_unified_cli.pywebnovel-writer/skills/webnovel-write/SKILL.md修改或新增:
webnovel-writer/scripts/data_modules/tests/test_prompt_integrity.pywebnovel-writer/evals/fixtures/behavior/fast.json| 易用性目标 | 可用 Claude Code 能力 | 插件需新增 / 修改 | 不依赖 |
|---|---|---|---|
| 过程提示 | 主流程自然语言输出 | Skill 增加关键节点提示要求 | 实时进度条 |
| 开始前预期管理 | 主流程开头输出短说明 | Skill 增加流程概览模板 | 后台任务估时系统 |
| 最终报告 | 主流程最终回复 | user_report.py 渲染 text/json |
Claude Code 自动格式化 |
| subagent 状态汇总 | Agent 调用 + 主流程记录 |
SubagentRun 协议和主流程汇总 |
subagent 自动 telemetry |
| 异常分类 | 主流程读取 runtime JSON | user_report.py 分类逻辑 |
宿主自动错误分类 |
| 耗时记录 | Bash / Python 计时或主流程记录 | run ledger / helper 记录步骤时间 | Claude Code 内置性能面板 |
| 断点续跑 | Bash 运行 Python CLI,读写本地文件 | run_ledger.py、产物可信度检查、gate 复用 |
Claude Code 内置 resume 引擎 |
| 交互式裁决 | AskUserQuestion 或普通对话提问 |
Skill 定义有限选项和处理分支 | 图形化按钮 / 复杂表单 |
| 技术溯源 | Python 写本地日志 | run_logger.py、敏感信息过滤 |
宿主自动日志导出 |
| 下一步命令 | 最终报告文本 | user_report.py 填入建议命令 |
一键按钮 |
实现原则:
让作者在流程运行中不需要理解内部工程链路,也能知道:
过程体验不是把每条命令都打印出来,而是把长流程拆成作者能理解的“当前动作”。
长流程开始前,先给作者一个短概览:
开始写第 13 章。本次会经过:整理依据 -> 起草正文 -> 写作检查 -> 润色 -> 保存本章故事事实 -> 更新资料并备份。
不同 API、模型和网络速度差异很大,本流程不承诺固定耗时;中途只有遇到创作裁决或事实冲突时才会问你。
预期管理必须包含:
过程提示使用短句,不超过两行:
正在整理本章写作依据:会读取章纲、最近剧情和未回收伏笔。
正在保存本章故事事实:这一步会更新摘要、角色状态和后续检索资料。
避免:
Running write-gate --stage precommit and validating artifacts...
| 内部步骤 | 过程提示名称 |
|---|---|
| preflight | 检查项目环境 |
| placeholder-scan | 检查未补齐占位 |
| story-system | 刷新本章写作要求 |
| write-gate prewrite | 写前检查 |
| context-agent | 整理写作依据 |
| draft | 起草正文 |
| reviewer | 写作检查 |
| review-pipeline | 生成检查报告 |
| polish | 润色与排版 |
| data-agent | 保存本章故事事实 |
| write-gate precommit | 提交前检查 |
| chapter-commit | 提交本章事实 |
| write-gate postcommit | 提交后确认 |
| projections retry | 补跑故事资料更新 |
| backup | 备份本章成果 |
默认不打断作者,除非出现以下情况:
| 必须询问 | 原因 |
|---|---|
| init 最终方案确认 | 会写入新书核心设定 |
| 参考作品拆解质量不足但用户想采用 | 可能污染新书创意 |
| plan 发现总纲 / 设定冲突 | 需要创作裁决 |
| write 发现无法定点修复的 blocking issue | 会影响本章继续提交 |
| data-agent 出现低置信度歧义且会影响事实入库 | 后续状态可能写错 |
| commit rejected 后用户仍想继续 | 需要明确风险接受 |
| 文件写入范围异常 | 可能污染其他章节或项目 |
不应询问:
每个主 Skill 建议最多展示 3-6 个过程节点,不展示每个内部命令。
/webnovel-init:
/webnovel-plan:
/webnovel-write:
/webnovel-review:
流程卡住时不要只报错误,要说明三件事:
示例:
卡在“保存本章故事事实”:正文和审查报告已经完成,但本章事实提取结果缺少摘要字段。
我会重跑资料整理助手;如果仍失败,会保留正文和审查报告,不会提交不完整事实。
流程中断或失败后,最终报告和过程反馈都应说明恢复点:
| 卡点 | 恢复建议 |
|---|---|
| context-agent 失败 | 补齐章纲 / 合同后重跑写章 |
| 起草后 review 失败 | 保留正文,重跑写作检查 |
| review 有 blocking | 定点修复或用户裁决后继续润色 |
| data-agent artifact 缺失 | 重跑保存本章故事事实 |
| precommit failed | 修复中间结果后重跑提交前检查 |
| commit rejected | 修复 missed_nodes / pending / blocking 后重新提交 |
| projection failed | 补跑 projections retry |
| backup failed | 手动或重跑 backup,不影响已提交事实 |
后续可增加可选参数:
--quiet 只显示关键确认和最终报告
--verbose 显示过程节点、异常原因和关键命令
首版不强制实现参数,但 Skill 文档应遵循默认“简洁过程提示 + 详细最终报告”的体验。
让作者遇到偶发失败后,不需要理解内部补跑命令。重复执行同一主命令时,系统应自动识别已完成步骤,从最近可信断点继续。
示例:
检测到上一次第 13 章已完成“起草正文”和“写作检查”,但卡在“保存本章故事事实”。
本次将从“保存本章故事事实”继续,不会重写正文。
优先复用现有产物和 gate:
| 步骤 | 可信完成判据 |
|---|---|
| 写前检查 | write-gate prewrite ok=true 或当前重新运行通过 |
| 写作依据 | context-agent 返回任务书且未过期 |
| 正文起草 | 目标章节正文文件存在且非空 |
| 写作检查 | review_results.json 标记目标章节,且 review-pipeline 已生成报告 |
| 润色 | 正文修改时间晚于审查报告,且无 anti-ai 阻断记录 |
| 保存事实 | 三份 data artifacts 存在且 write-gate precommit 通过 |
| 提交事实 | commit 文件存在且 status accepted |
| 更新资料 | write-gate postcommit 通过,projection 五项 done/skipped |
| 备份 | backup 返回成功或存在本章备份记录 |
首版可以不新增复杂状态机,但建议新增轻量运行账本:
.webnovel/runs/write_ch0013.json
.webnovel/logs/run_last.log
write_ch0013.json 保存机器可读进度:
{
"schema_version": "webnovel-run-ledger/v1",
"command": "webnovel-write",
"chapter": 13,
"started_at": "",
"updated_at": "",
"steps": [
{"id": "draft", "label": "起草正文", "status": "done", "outputs": ["正文/第0013章.md"]},
{"id": "data", "label": "保存本章故事事实", "status": "failed", "problem": "API timeout"}
]
}
run_last.log 保存工程细节:
作者报告不直接展开 run_last.log,只在不可恢复故障时提示路径。
重复执行主命令时:
PROJECT_ROOT、章节号和模式参数。| 场景 | 处理 |
|---|---|
| 正文存在但本次用户要求重写 | 询问覆盖 / 另存 / 取消 |
| 章纲更新晚于正文 | 询问沿用旧正文还是重新起草 |
| 审查报告来自旧正文 | 自动重跑审查 |
| commit 已 accepted,但用户再次执行写同章 | 询问是否重写本章或只查看状态 |
| backup 失败但 commit 已完成 | 自动重跑 backup,不重写正文 |
第一阶段只做 /webnovel-write 的断点续跑,因为它步骤最长、失败点最多。
后续再扩展:
/webnovel-plan:批次级续跑,失败批次重做,不覆盖整卷。/webnovel-init:用户确认前问答态不强行续跑;生成阶段可按文件补齐。/webnovel-review:按章节范围跳过已审且正文未变更的章节。遇到必须用户处理的问题时,优先给有限选项,而不是让作者自己理解错误并手改文件。
需要你裁决:本章“沈照”的法宝与大纲冲突。
大纲记录:青锋剑
正文写成:紫金葫芦
请选择处理方式:
1. 坚持大纲:自动把正文相关段落改回“青锋剑”
2. 采用新设定:保留“紫金葫芦”,并把设定变更写入故事资料
3. 我手动处理:暂停流程,修改后继续
| 类型 | 选项 |
|---|---|
| 设定冲突 | 坚持既有设定 / 采用新设定 / 手动处理 |
| 时间线冲突 | 按时间线修正文 / 调整时间线 / 手动处理 |
| 角色 OOC | 按角色卡修正文 / 更新角色变化理由 / 手动处理 |
| 低置信度消歧 | 采用 A / 采用 B / 暂不入库 |
| commit rejected | 修复后重提 / 接受风险但不提交 / 手动处理 |
| 文件写入范围异常 | 取消写入 / 只保留安全文件 / 查看详情 |
在 Claude Code 环境中,优先使用 AskUserQuestion 做关键裁决。
选项必须短,并说明影响:
以下情况不能由系统擅自决定:
作者报告保持清爽,工程排查材料保留完整。
建议:
.webnovel/logs/run_last.log
.webnovel/logs/runs/YYYYMMDD-HHMMSS-{command}.log
日志包含:
user-report --format json。日志不应包含:
.env 原文。只在以下情况展示日志路径:
--verbose。示例:
技术详情已保存:.webnovel/logs/run_last.log。反馈故障时可以附上它。
先确认现有报告、gate 和 agent 输出边界,避免改造后不知道格式漂移来自哪里。
project-status、doctor、write-gate、review-pipeline、chapter-commit 的 JSON 字段。author_error_catalog.json 初始素材。review-pipeline 可用于作者视图的字段:总分、blocking 数、维度问题、建议项、报告路径。author_glossary.json 与 author_error_catalog.json 的首批条目来源清楚,不靠实现时临场猜。先用最小改动让四个主流程在最终回复中遵守统一格式。
/webnovel-init必须汇报:
.webnovel/state.json。设定集/世界观.md、设定集/力量体系.md、设定集/主角卡.md、设定集/反派设计.md。大纲/总纲.md。.webnovel/idea_bank.json。.story-system/MASTER_SETTING.json。工作项:
webnovel-init/SKILL.md 增加“最终报告要求”段。/webnovel-plan必须汇报:
大纲/第{volume_id}卷-节拍表.md。大纲/第{volume_id}卷-时间线.md。大纲/第{volume_id}卷-详细大纲.md。大纲/第{volume_id}卷-总纲写回.json。master-outline-sync 是否完成。update-state 是否完成。工作项:
webnovel-plan/SKILL.md 增加“最终报告要求”段。/webnovel-write必须汇报:
.webnovel/tmp/review_results.json。.webnovel/tmp/fulfillment_result.json。.webnovel/tmp/disambiguation_result.json。.webnovel/tmp/extraction_result.json。.story-system/commits/chapter_{NNN}.commit.json。工作项:
webnovel-write/SKILL.md 增加“最终报告要求”段。--fast 和 --minimal 的跳过项必须说明。chapter-commit rejected 时最终状态不得写“已完成”。/webnovel-review必须汇报:
review_metrics.json。review_metrics 是否落库。工作项:
webnovel-review/SKILL.md 增加“最终报告要求”段。让主流程可以稳定汇总每个 subagent 的完成状态、问题、自动处理内容和耗时。
主流程为每次 subagent 调用记录一份 SubagentRun:
{
"name": "data-agent",
"user_label": "保存本章故事事实",
"status": "completed | partial | failed | skipped",
"problems": [],
"auto_handled": [],
"needs_user_action": false,
"duration_ms": 0,
"outputs": []
}
字段说明:
| 字段 | 含义 |
|---|---|
name |
agent 名称 |
user_label |
作者友好名称 |
status |
完成状态 |
problems |
遇到的问题 |
auto_handled |
自动处理内容 |
needs_user_action |
是否需要用户处理 |
duration_ms |
耗时 |
outputs |
产生或返回的关键产物 |
context-agent:上下文不足、legacy fallback、伏笔数据缺失必须可被主流程记录。reviewer:正文为空、读取状态失败、维度跳过必须写入 summary 或问题字段。data-agent:三份 artifact 写入状态、长时间无进展、pending 消歧必须可被汇总。deconstruction-agent:输入不足、质量不过线、降级 quick mode 必须可被汇总。SubagentRun 供最终报告使用。所有问题归为三类:
| 类型 | 定义 | 示例 |
|---|---|---|
| 已自动处理 | 系统已补跑、降级或完成白名单内定点处理,不需要用户处理 | projection retry 成功、RAG 降级但不影响结果 |
| 建议确认 | 结果可用,但建议用户看一眼 | 参考拆解质量略低、某个角色命名有歧义但已采用 |
| 必须处理 | 不处理会影响继续写作、提交或一致性 | blocking issue、正文缺失、commit rejected、projection failed |
author_error_catalog.json 是错误到作者行动的映射表,供 error_catalog.py 和 user_report.py 共同使用。它不改变错误判定,只负责把已知错误翻译成:
未知错误必须诚实降级:
这里遇到一个系统还没有登记过的问题。当前不会把它当成已完成;请先运行 /webnovel-doctor,或反馈时附上日志。
错误目录只做翻译和分类;自动处理白名单必须单独显式登记,且第三期前不扩大现有自动处理范围。
默认只展示:
不设置固定耗时阈值。不同 API、模型、网络、章节长度和审查复杂度差异过大,固定阈值会误导作者。
过程提示可以使用相对表达:
“保存本章故事事实”已经运行了一段时间,可能是接口响应较慢或本章新增事实较多;当前不会影响已生成正文。
author_error_catalog.json 与 error_catalog.py。mainline_ready=false、write-gate failed、chapter-commit rejected、projection failed / pending、RAG 降级、artifact schema 不完整等场景建立首批条目。/webnovel-doctor + 日志路径”,不得崩溃或乱翻译。data-agent.md 中保留并规范“长时间无进展需说明原因和影响”。新增统一 helper,把结构化运行结果渲染成作者友好报告。
本阶段同时落地 spec 的 Review Author View:在现有审查报告顶部增加作者视图,不改变 reviewer schema、不改变评分和 blocking 判定。
作者视图格式:
本章结论:✅可以继续 / ⚠️建议改 / ⛔必须先改
最值得处理的 1-3 件事:
- ...
生成规则:
blocking_count > 0:结论为“必须先改”,最多列 3 条 blocking 或高风险问题。新增:
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" user-report \
--stage write \
--chapter {chapter_num} \
--format text
支持:
--stage init|plan|write|review
--chapter N
--volume N
--format text|json
user_report.py 内部使用:
{
"schema_version": "webnovel-user-report/v1",
"stage": "write",
"overall_status": "completed | partial | needs_user | failed",
"project_root": "",
"chapter": 0,
"volume": 0,
"files": [],
"issues": {
"auto_handled": [],
"needs_confirmation": [],
"must_handle": []
},
"timing": {
"total_ms": 0,
"steps": []
},
"next_actions": []
}
| 阶段 | 数据来源 |
|---|---|
| init | 文件存在性、project-status、.story-system/MASTER_SETTING.json |
| plan | 规划产物文件、placeholder-scan、master-outline-sync 输出、Story System 合同文件 |
| write | write-gate 三阶段、review artifacts、commit payload、projection log、backup 输出、subagent runs |
| review | review_results.json、review_metrics.json、报告文件、review_metrics 表 |
review_author_view.py,从现有 review payload 渲染一句结论 + 最多 3 条可执行建议。review_pipeline.py 的报告渲染环节插入作者视图段,不改 reviewer schema。user_report.py。webnovel.py user-report 子命令。write 阶段报告,因为它最复杂、收益最大。review 阶段报告,复用审查作者视图。init 和 plan。user-report --stage write --format json 输出稳定 schema。user-report --stage write --format text 输出三段式中文报告。新增或调整断言:
/webnovel-write 的过程节点不超过 6 个作者可理解阶段。/webnovel-write 必须说明重复执行同一命令时可从可信断点继续。.webnovel/logs/run_last.log,不直接污染作者报告。新增:
test_run_ledger_records_write_step_statustest_write_resume_skips_completed_draft_and_reviewtest_write_resume_rechecks_review_when_chapter_file_changedtest_write_resume_retries_backup_after_commit_donetest_run_log_redacts_env_valuestest_user_report_includes_log_path_only_on_failure首版如果暂不实现 run ledger,则这些测试先作为 Phase 5 待实现契约,不并入默认必过集合。
新增:
/webnovel-write 执行过程中能说明当前处于写前检查、起草、审查、保存事实、提交备份中的哪一段。/webnovel-write 时,不重写已可信正文,自动从失败步骤继续。.webnovel/logs/run_last.log。新增或调整断言:
webnovel-write 必须汇报正文、审查、data artifacts、commit、projection、backup。webnovel-review 必须汇报审查报告、metrics 和 blocking 裁决。新增:
test_user_report.py::test_render_write_report_successtest_user_report.py::test_render_write_report_commit_rejectedtest_user_report.py::test_render_write_report_projection_failedtest_user_report.py::test_render_review_report_blockingtest_webnovel_unified_cli.py 覆盖 user-report 注册。在 fast eval 中补:
/webnovel-write --minimal 最终报告必须说明跳过写作检查。python -m pytest webnovel-writer/scripts/data_modules/tests/test_prompt_integrity.py -q --no-cov
python -m pytest webnovel-writer/scripts/data_modules/tests/test_user_report.py -q --no-cov
python -m pytest webnovel-writer/scripts/data_modules/tests/test_webnovel_unified_cli.py -q --no-cov
python -X utf8 webnovel-writer/scripts/run_behavior_evals.py --format json
让用户知道每次命令结束后应该如何理解最终报告。
README.mddocs/guides/commands.mddocs/operations/operations.md.webnovel/logs/run_last.log 的用途和敏感信息规则。author_glossary.json,四个主 Skill 引用同一术语口径。author_error_catalog.json / error_catalog.py,固定异常分类与未知错误降级。review_author_view.py,在审查报告顶部给一句结论 + 最多 3 条建议。user_report.py,先接 /webnovel-write 和 /webnovel-review。/webnovel-write 的 run ledger、日志和断点续跑。原因:
/webnovel-write。| 风险 | 影响 | 控制 |
|---|---|---|
| 只改提示词导致格式漂移 | 不同 Skill 最终报告仍不一致 | Phase 4 增加 runtime helper |
| 报告太长 | 作者不想看 | 默认只给三段式,技术细节只在必须处理时展开 |
| 报告太短 | 问题被隐藏 | 明确不可静默场景 |
| 工程词太多 | 作者读不懂 | 使用术语翻译表 |
| helper 过早侵入主流程 | 引入新故障点 | 先做只读渲染,不改变写作链路 |
| 耗时记录不准 | 误导用户 | 先记录步骤级粗粒度耗时,不做精确性能诊断 |
| subagent 无法直接返回协议字段 | 主流程难汇总 | 主流程包一层 SubagentRun,不强迫 agent 改原始产物格式 |
| token 统计取消后缺少成本感知 | 少一项工程指标 | token 只留内部观察,不做作者最终报告项 |
| 过程提示太频繁 | 打断作者沉浸感 | 每个主流程最多展示 3-6 个过程节点 |
| 该问不问 | 创作方向或事实状态被系统擅自决定 | 少打扰策略中列明必须询问场景 |
| 不该问却问 | 作者被细碎技术问题打断 | 自动处理类问题默认不询问,只在最终报告说明 |
| 卡住时只报错误 | 作者不知道成果是否丢失 | 卡住反馈必须包含已完成内容和恢复点 |
| 断点续跑误判产物可信 | 用旧正文或旧审查继续提交 | 断点恢复必须检查文件更新时间、章节号、模式参数和 gate 状态 |
| 自动续跑覆盖用户手改 | 用户创作被覆盖 | 检测到正文或章纲有新修改时必须询问 |
| 交互式裁决选项过多 | 用户仍然困惑 | 每次只给 2-3 个明确选择 |
| 日志泄露敏感信息 | API key 或私密配置外泄 | 日志写入前过滤 .env、API key、secret 类字段 |
本计划不包含:
/webnovel-write。这些应单独规划。
如果要快速得到收益,建议先做最小版本:
author_glossary.json,把术语翻译收成单一事实源。author_error_catalog.json,至少覆盖 mainline_ready=false、write-gate failed、chapter-commit rejected、projection failed / pending、RAG 降级、artifact schema 不完整;未知错误诚实降级到 /webnovel-doctor。review_pipeline.py 顶部增加审查作者视图:一句结论 + 最多 3 条可执行建议。webnovel-write 的最终报告中强制汇报:
user_report.py,但把 helper 作为下一阶段明确目标。/webnovel-write 增加 6 个作者友好过程节点和卡住恢复说明。/webnovel-write 中说明重复执行同一命令会尽量从失败步骤继续;实际 run ledger 作为下一阶段。最小版本完成后,作者至少能稳定知道:
完成后,作者看到的不是一串命令和 JSON,而是一份稳定交付单:
总状态:已完成,可以继续写第 13 章。
一、产生的文件与完成情况
- 正文/第0012章-风雪夜归人.md:已生成并通过写作检查。
- 审查报告/第12章审查报告.md:已生成,无阻断问题。
- 本章故事事实:已保存,状态、摘要、长期记忆和检索库已更新。
- 备份:已完成。
二、过程中遇到的问题与异常耗时
- 已自动处理:检索库更新较慢,系统已等待完成,不影响结果。
- 建议确认:本章新增角色“沈照”已写入故事资料,建议你看一眼名字是否满意。
- 必须处理:无。
三、下一步建议
- 可以继续执行:
/webnovel-write 13
这份报告的价值不是“更好看”,而是让作者每次都能安心判断:这一轮到底靠不靠谱,下一步能不能继续。