dsh-novel-write-engine 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.1
4
+
5
+ - **面板可滚动**:`nwe-root` 改为 `height:100%; overflow-y:auto; overscroll-behavior:contain`,宿主 `overflow:hidden` 不再裁掉下方内容;教程弹框保持 fixed,Esc/遮罩/焦点返回不回归。教程弹框新增「续写下一章」可直接复制给 Agent 的话术:先 `novel_pipeline` 确认状态,缺章卡用全量 `novel_outline`,目标章数满了用 `novel_amend`,再按 P1→P8 推进并在归档前确认 `state_delta`。
6
+ - **指标单一 owner**:`outlineSummary` 接收目标章数与已归档章号,输出规划覆盖、归档覆盖、缺卡数与逐章 `card_coverage`;`novel_status`、`novel_report`、`novel_doctor`、panel、`/novel outline` 全部消费同一结果,40/800 不再显示 100%。剩余字数按实际平均字数估算,并保留最小目标口径。
7
+ - **字数说真话**:`WordMetrics` 新增 `punctuation_chars`;PG-03 失败消息并列汉字/标点/英文词/数字;brief 增加 `word_count_policy` 和 `dialogue_ratio_target`;中文弯引号、破折号、省略号归入中文标点,对话行按四种引号统计。
8
+ - **失败可审计**:通过参数形状校验、进入项目锁后被 gate/delta/state 拒绝的写操作在 journal 写 `status:"aborted"`、`attempt:true` 行,带 `code/reason/hint/blocking`;事务提交失败与崩溃恢复的 aborted 行也带 `code`;锁前纯参数形状错误不写 journal。`AuditRow` 增加 `seq/code/reason/hint/stage/attempt/blocking`;`novel_audit` 支持 chapter/op/status/since/until/cursor。
9
+ - **历史不再只活最后一份**:评审、校验、正文、废弃稿、P2 计划按 pipeline revision 写入 `history/`;`novel_state {kind:"history"}` 全量列出(`total`),按 chapter+正整数 revision 读取;`novel_report` 从历史评审聚合维度样本,`ChapterRecord` 保存 lifetime `rounds`(含 `rollbacks`)/`final_check`/`archived_at`,report 新增 `effort`;`novel_amend` 不能改写这些归档证据。
10
+ - **备份可列可恢复**:事务备份写入 `manifest.json`;P2/P4/P6 在已有旧文件时也建备份,因此计划/评审/校验可从真实事务恢复。`novel_state {kind:"backups"}` 列出 op/chapter/revision/files;新增 `novel_restore`,只恢复活动章且不做 replay(外部再次改动后同一 txid 仍会真正恢复),已归档章先 `novel_reopen`,恢复本身再建备份。`novel_reopen` 的 journal/manifest 现在记录被重开的章节。
11
+ - **计划与摘要分权**:P2 计划文件不再被 P3/P5 写入 summary;活动标题/场景/叙述者/摘要存入 `pipeline.draft`,旧项目回退读 plan.summary;P5 不再改写 P2 证据。归档前校验 `draft.content_hash` 与正文一致,正文被外部改动时拒绝封存(`DRAFT_STALE`/`ENGINE_TXN_ABORTED`)。
12
+ - **修订成本**:`novel_revise` 支持 `patch:{expected_hash,edits}`;hash 不匹配、锚点不唯一/越界/重叠都会零写入拒绝。
13
+ - **简报收据独立**:`state/briefs.yaml` 保存 receipt,pipeline.briefs 仅作旧项目回退;重复 digest 直接 replay,rollback 后不再无条件重签。
14
+ - **伏笔标签与锚点**:`title` 可保留可读短语,新增 `anchor` 作为正文逐字校验证据,且至少 8 个字符(单字锚点不再能绕过);无 anchor 时仍要求 title 出现在正文;P8 brief 给出规则和示例。
15
+ - **质量门禁分层**:`check.machine.violations` 只放 blocker,advisory 放 `machine.advisories`;`acknowledge` 只接受本次 advisory code。新增 `DIALOGUE_RATIO`、`NUMERIC_CONTRADICTION` 与 `NUMERIC_FACT_MISMATCH`;数字矛盾因无法判定主语固定为 advisory,数字事实只匹配“别名+数字+声明单位”的相邻写法;worldbook 支持声明式 `facts`,并进入计数、brief 上下文、搜索与 P6 检查。
16
+ - **初始化与角色**:空 author/description 返回 warning;角色 role 从显式值、P1 计划、worldbook、narrator 推导,不再一律 extra;`insight` 的 cast/维度排序改用稳定 code-unit 比较。
17
+ - **真实模型**:`agnes-2.5-flash` 与 `agnes-3.0-flash` 在临时项目完成 P1→P8、归档、report/doctor/panel、六种导出、`novel_reopen` 与重新归档;P3 366 / 490 字,P2/P3 叙述者分别继承 P1 的林深/林渊;2.5 的 564 字在更早 600 字目标下被 PG-03 真实拒绝,本次 76 字由驱动脚本 300 字下限拦截(未进引擎);详见 `docs/0.2.1-real-model-evidence.md`。
18
+ - **发布前回归收口**:无 target 时 status/stats/panel 的 null 覆盖显示不再伪装 100%;report 对重复评审去重;novel_state pipeline 返回合并后的 briefs、briefs 查询保留 0.2.0 pipeline.briefs 回退;restore review/check 重算 blocking;archive 把 P2 计划纳入事务哈希,reopen 拒绝归档后被改动的计划;doctor 只推荐活动章可恢复备份;amend/rollback 不再用旧 revision 缓存吞掉外部改动;worldbook entries 计入 facts。
19
+ - 版本升 0.2.1;panel payload v3;工具 27 → 28(新增 `novel_restore`),服务操作 31 → 32;文档、教程、任务书与测试同步。
20
+ - 质量:72 个测试文件 / 667 条测试;覆盖率 93.86 / 89.04 / 97.81 / 93.86;per-file 门禁通过。
21
+
22
+ ## 0.2.0
23
+
24
+ - **整书生命周期**:新增 `outline/outline.yaml`(书级蓝图 + 卷 + 章卡)与 `outline/worldbook.yaml`(世界观设定集)。`novel_init` 自动建立两份空文档;旧项目缺少它们时按空规划读取,不报错。
25
+ - 新增 9 个工具 / 9 个操作:`novel_blueprint`、`novel_outline`、`novel_outline_import`、`novel_worldbook`、`novel_search`、`novel_doctor`、`novel_report`、`novel_guide`、`novel_reopen`。工具总数 18 → 27,服务操作 22 → 31;`toolsMode=core` 10 个。
26
+ - 大纲支持 Markdown / YAML / JSON 导入;`novel_outline_import` 可 `dry_run` 预览,关键字段缺失带行号报错。Markdown 模板与导出模板同形。
27
+ - 新增 PG-13 `OUTLINE_ALIGNMENT`:严格模式下 P2/P3 与归档都必须有当前章卡,标题、场景类型、目标字数区间、cast 必须与章卡一致;已归档卡不可改,要改先 `novel_reopen`。非严格模式只校验已存在的章卡。
28
+ - 归档事务同步回写章卡 `archived/archived_at/word_count/score`;非严格模式归档时自动补卡,大纲因此始终是完整进度视图。
29
+ - P1/P2/P3 任务书与上下文包自动带入 `book_plan`、`outline_card` 与相关 `worldbook` 条目;P1 章卡 cast 必须在世界计划中登记。
30
+ - 新增 `novel_reopen`:只允许紧邻的已归档章、活动章尚未开始时,从该章归档事务的备份恢复索引/台账/handoff/正文并把管线重开到 P3;备份缺失即拒绝。
31
+ - P6 语义项从 4 条增至 5 条,新增 `L2-POV`(叙述视角与计划一致),五条证据必须来自不同句子。
32
+ - 新增 `novel_report`(进度/大纲漂移/世界观/质量趋势/节奏/角色/伏笔/时间线/关系/活动)、`novel_doctor`(项目/流水线/状态/journal/正文 hash/孤立正文/大纲覆盖与漂移/当前阶段产物/锁/备份/目标进度/下一步)、`novel_search`(正文/摘要/大纲/世界观/台账)与 `novel_guide`(六态:no-project/new/planning/writing/blocked/finished)。
33
+ - `novel_status` 增加书级摘要;`/novel stats` 与 `/novel-stats` 都输出大纲覆盖、蓝图就绪、世界观条目、严格模式与目标章数。
34
+ - 导出扩展到 6 种:`md` / `txt` / `epub` / `outline` / `worldbook` / `proposal`;导出幂等键纳入大纲与世界观摘要。
35
+ - 面板 payload v2:新增全书规划(进度条、卷列表最多 8 卷并提示剩余卷数)、世界观计数、质量趋势、项目健康、最近活动;旧版本面板提示刷新。面板保持只读。
36
+ - 面板右上角新增「教程」帮助入口:可访问的弹框按开书准备、P1–P8 单章流水线、下一章循环与导出给出完整步骤,并包含面板说明、常见排错、起手话术和完成清单;支持 Esc、遮罩关闭、焦点返回与移动端滚动。
37
+ - 命令新增 `/novel outline|guide|report|doctor|search`,`/novel export` 与 `/novel-export` 支持 6 种 kind;`/novel admin` 暴露全部新增操作。
38
+ - 事件新增 `novel/planned`、`novel/reopened`、`novel/exported`。
39
+ - 修复:非活动章 `planWorld` 读取补 `validateWorldPlanShape`;大纲/世界观损坏进入 `state_errors` 并阻断依赖写操作;init 的“空目录”判定包含 outline/worldbook,避免覆盖只有规划文件的项目;`novel_report` 按章去重角色出场;`runTransaction` 的 committed journal 保留 pre-image hash 以支持 `novel_reopen`。
40
+ - 规划与重开修复:outline/worldbook 读取改走 `narrow`(未知顶层键、schema 版本、book 未知键都拒绝);`novel_amend` 对大纲先做完整语义校验并保护归档卡 cast/target_words/word_count/score/archived_at,worldbook 校验 capacity/必填文本;`novel_reopen` 改为 reason 必填、损坏 outline 拒绝覆盖、旧 journal 无 `before` 时从备份恢复;`novel_outline_import` 不再把已有蓝图/卷的 `strict:false` 强制翻成 true;列表/世界观/统计的 present 以内容为准;doctor 增加大纲覆盖率与当前阶段产物;panel 健康纳入 journal、质量均值只取最近 10 章、进度条改用目标章数;search 覆盖 world abilities/artifacts/factions/rules、locks 与 handoff;P1–P3 的 worldbook context 做硬截断。
41
+ - 规划/归档一致性修复:损坏 outline/worldbook 不再被 blueprint/outline/import/worldbook 覆盖,outline/worldbook 纳入 journal 外部改动检测;chapters 不可读时禁止规划写并保护 amend 归档卡;`novel.yaml` 降低目标章数会校验现有卷/卡;`novel_reopen` 自动补卡、对齐归档 plan、提交前校验 outline;显式 `strict:false` 通过 `strict_explicit` 保留;Markdown 导出/导入保留前提、卷外卡不再被并入末卷、归档元数据给出明确警告;`novel_diff` 支持纯文本模式;`novel_worldbook` 返回逐段 counts;report 质量趋势/角色最后出场、guide 完成态、doctor journal 下一步与 0% 覆盖率口径修正;import 重算 preview 并拒绝过期 revision;panel 显示卷的计划/归档(最多 8 卷 + 剩余提示)与 0.2.0 工具中文标签。
42
+ - 状态与日志恢复修复:replay 缓存按 revision 失效(export 按内容键跨无关 revision 幂等);损坏的 `archive-digests.json` 从 chapter index 重建且不再拖垮 journal;缺失 journal fail-closed;尾部撕裂日志只裁剪最后一个无换行片段;崩溃前 pending 的 staging 目录清理;写临时文件失败清理 `.tmp`;worldbook `updated_at` 稳定;search 包含活动草稿并按 gate 段落口径编号;report/doctor 暴露损坏评审;reopen 拒绝覆盖归档后的 amend;规划写拒绝 projectError;卷迁移自动推导归档卡卷;时间线角色类型校验;文本 diff 可脱离项目;admin plan_chapter 不再注入非法默认值;stats 命令补齐新增字段。
43
+ - 持久化与观测修复:卷范围重排时归档卡按新区间推导卷号;`novel_amend` 保护归档索引的标题/场景/字数/评语/摘要/评分/状态等派生事实;4 位章节文件名纳入孤立正文与归档卡校验;journal 只含 lock-reclaim/空文件时 fail-closed,stale lock 不再隐藏 journal 诊断;备份先写入 staging 再原子移入 backups,崩溃不再留下不可回收目录;PG-09 引用与 check 文档先窄化再落盘;hand-edited outline 可省略 nullable 归档字段;`novel_plan_chapter` 的 target_words 不再硬编码 2000–3000 且工具 schema 补齐必填;`/novel admin` 透传 warnings/replayed;volume-only Markdown 大纲可回导;面板/命令的 next reason 中文化;docs 的 report 字段、PG-13 码、工具计数与 P4 版本同步。
44
+ - 发布前回归修复:`novel_plan_chapter` 的必填字段在工具 schema 与服务端重新对齐;`check:host` 改为先 build,再断言宿主声明全部 27 个工具,并校验预设名与面板空态/结构;README 文档链接改为 GitHub 绝对地址,修正 `toolsMode`、`novel_panel`、六种导出与工具计数等文档漂移;事务 abort 行追加前修复撕裂日志尾;同 pid 但非 live nonce 的锁按 stale 读取,不再伪装成活跃 writer;journal 对账与 `auditHistory` 在读取期间出现 writer 时丢弃半提交误报;lock reclaim 仅在原锁确实被移除时写审计行。
45
+ - 真实模型验证:`agnes-2.5-flash` 与 `agnes-3.0-flash` 在发布前最终构建的临时项目完成单章 P1→P8、归档、report/doctor/search/panel、六种导出、`novel_reopen` 与重新归档;P3 分别 931 字 / 898 字,均通过 P6,重开后无 state_errors。详见 `docs/0.2.0-real-model-evidence.md`。
46
+ - 质量:新增 `tests/book-020.spec.ts`、`tests/book-domain.spec.ts`、`tests/insight-020.spec.ts`、`tests/coverage-020.spec.ts`、`tests/review-probe-020.spec.ts`、`tests/second-review-020.spec.ts` 与 `tests/third-review-020.spec.ts`;当前 71 个测试文件 / 625 条测试;覆盖率 93.94 / 89.16 / 98.02 / 93.94;门禁为全局 statements/lines/functions 90、branches 89,engine 90/85、commands 85、client 85、viewmodel 95,新增 `engine/book.ts`/`engine/insight.ts` 的 lines/statements/functions ≥95、branches ≥93。
47
+
3
48
  ## 0.1.3
4
49
 
5
50
  - 八个权威台账(chapters/characters/world/locks/timeline/foreshadows/relationships/handoff)以及 `novel.yaml` 损坏或丢失时不再拖垮 `novel_status`/panel;`state_errors` 暴露全部错误,`novel_state` 对 ledger、project、review、check 返回损坏文档的 `raw` 文本,`next` 指向 `novel_amend`。