Repository navigation
Releases: ThzxxArt/dsh-novel-write-engine
Release list
v0.2.13
0.2.13
0.2.13 是台账可信度与自评校准版本。仍是 28 工具、13 门控、15 维、5 语义项、6 导出;SCHEMA_VERSION 保持 1,所有新字段可选,旧文档不迁移。
Added
- 计量:
WordMetrics新增dialogue_chars、dialogue_char_ratio、punctuation_breakdown;targets.min_cjk_chars与dialogue_ratio_metric进入novel_init/novel_amend,PG-03 同时判总字数与汉字下限,DIALOGUE_RATIO支持行/字符/两者口径。 - 数字:
check.machine.numeric汇总facts_declared/facts_checked/equations_checked/findings;算式扩展到+ - × ÷,strict 模式 facts 为空时出NUMERIC_FACTS_EMPTYadvisory。 - 锁定:新增
resolveLockBaseline,世界书地点描述优先,人物只认显式appearance(description里的传记不再被误当外貌基准),locks只在没有世界书条目时提供 1–3 条短锚点;无基线的实体不报漂移,doctor 给LOCK_BASELINE_MISSING提示。 - 关系:
type_code枚举与RELATIONSHIP_TYPE_CODES;新建关系必须给type_code,旧关系不猜;RELATION_UNKNOWN只保留归档合并后的唯一 owner,P6 不再先报。 - 伏笔:
planned_resolve、resolved_anchor、kind(plot|motif)、advance_log[].anchor;新 resolve 必须有正文证据;新增FORESHADOW_OVERDUE/FORESHADOW_DUPLICATE_TITLEadvisory;report 增加 planned/unplanned/overdue/resolved_without_evidence/duplicate_titles/motifs。 - 时间线:稳定
event_key(E{chapter}-{index+1}-{hash}),P8 支持下标或 event_key;旧条目读取时计算,不重写。 - brief:收据增加
id/current/superseded_at/superseded_by;同章同阶段同 digest replay 不写盘,旧 digest 可重新提升为 current;novel_state {kind:"briefs", current_only:true}。 - 告警:
Violation.id,acknowledge接受 code 或实例 id,acknowledge_reasons强制理由,CheckDocument.machine.acknowledged_findings(兼容读旧顶层位置);DUPLICATE_PARAGRAPH给出章/段与 40 字重合片段。 - 分页:
novel_state新增limit/cursor/status/include_history/current_only,返回统一page;cursor 绑定 section+filters;foreshadows 默认 50 条且只给advance_count;novel_amend拒绝把截断/过滤页当完整文档。 - 自评:P3/P4 写死 1–5 与 low/mid/high 锚点;
BookReport.pacing.calibration与 doctorQUALITY_SELF_SCORE_FLAT;题材 profile 支持pleasure_keywords、motif_min_dormancy、foreshadow_dormant_after,并校验类型/正整数。 - 返工:
StatusReport.previous_chapter_effort与 P1 brief 字段,归档后仍能看到上一章 review/revise/check/rollbacks。
Fixed
- advisory id 改为
sha256(detail).slice(0,12),不再用 48 位 SimHash 截断;同码不同详情不再并成一条。 - 旧 timeline 的
event_key以章节记录的summary.events为准,不再用被覆盖的description;真实 209 条只读校验 0 个 key 不一致。 - 角色 worldbook 行存在但无
appearance时不再回退首现段落,避免第 21 章 3 条锁定误报;locks只在 worldbook 无该实体时提供短锚点。 - legacy brief 收据只追加/晋升受影响行,不再在第一次新 digest 时物化全部旧行;旧行保持原顺序与字段。loader 与
novel_state共用 current 派生:提升较旧的无 current 行后,PG-01 与 current 视图不会再分别相信不同 digest。 planned_resolve/kind在 advance/resolve delta 上真正落账;P3 PG-05 先拒绝非法 planned_resolve/kind/anchor;advance_log的 advance/update anchor 与 resolve 一样必须逐字出现在正文,条目校验 chapter/note/new_info/anchor。- 普通动作段不再因为只提到实体名就被判
LOCKED_DETAIL_DRIFT;只有带外貌/布局/改写线索的低覆盖段才进入漂移比较,world anchors 单独存在的实体也纳入检查。 - 旧 timeline 的稀疏行从
summary.events下标派生事件键;显式event_key按章+数字事件序排序,不再按字符串把 10 排在 2 前。 - integrity-only check 的
numeric汇总不再保留未执行的 content 计数;foreshadows 的 advance/update anchor 也做逐字正文校验;novel_amend带 anchor 的新增/变更 resolved 行同样按章正文校验,无 anchor 的旧行保留迁移入口。 - 超过单页上限的 world/characters/locks 台账去掉
page后仍不能静默删行;错误提示明确要求合并所有 cursor 页。
Compatibility
english_punct、types、acknowledged、timeline 数字下标、旧briefs.yaml都保留;旧记录不自动改写。SCHEMA_VERSION仍为 1;REMOTE_VERSION仍为 6;PANEL_VERSION升到 0.2.13。- 安装与产物校验见 GitHub Release 的 tarball 与
SHA256SUMS.txt;npm 版本为dsh-novel-write-engine@0.2.13。
Tests
- 98 个测试文件 / 1071 项全绿;覆盖率 94.01 / 89.02 / 96.88 / 94.01,逐文件与
src/rules分支门禁通过。 - 新增 0.2.13 回归覆盖:纯 SHA-256 向量、分页/过滤页写回拒绝、旧 timeline 键规范化与稀疏派生、数字序排序、同码 advisory 实例 id、确认实例不替同码其他实例背书、收据 current 与 PG-01 一致性、旧行不物化、legacy 页脚、archive motif/题材阈值、PG-05 非法 planned_resolve、关系 type_code 与 resolved_anchor 迁移守卫、advance/update anchor 逐字校验、普通叙事不误报锁定漂移、world anchors 单独基线。
v0.2.12 — 工作台滚动与角色标签
dsh-novel-write-engine v0.2.12
0.2.12 是工作台滚动与角色标签修复版本,不新增或改变阶段、工具、操作、门控、语义项、导出、schema 或配置键。升级不需要迁移项目文件。
亮点
- 页面滚动恢复:撤销 0.2.11 的固定顶栏与内容区独立滚动,改为宿主固定高度裁切盒内的整页滚动;顶栏、下一步卡与栏目导航随内容移动,根滚动条隐藏,滚轮、触控和键盘都能滚到底。
- 局部滚动归位:人物、时间线、线索、设定、全书资料、章节表与卷列表改为有界局部滚动;列表滚到边界后继续滚页面,不再形成滚轮陷阱。
- 展开卡片通栏:设定与线索分组中任意卡片展开时,整个分组跨两栏、卡片通栏显示,不再被锁在左半栏或右半栏。
- 全书资料标题修复:删除
summary::before的+/−伪元素,避免展开时多出第四个子项把标题和副标题挤进 14px 箭头列、贴到最右侧;标题行在打开和关闭状态都保持三列。 - 角色标签补全:
antagonist映射为「反派」,人物卡不再裸出英文规范值;未知角色仍按原值兜底。 - 版本同步:
PANEL_VERSION从 0.2.11 升到 0.2.12,面板协议payload_version保持 7;旧标签页刷新即可。
验证
- GitHub Actions CI 41282707796:10/10 job 全部 success(static、coverage、host-gate、build-and-package、Linux 当前版/最低版、Windows、macOS、Windows/macOS platform-build)。
- 95 个测试文件 / 1011 项测试全绿;覆盖率 94.00 / 89.20 / 96.86 / 94.00,逐文件门禁通过。
- 本地
typecheck、lint、build、check:pack(27 files)、check:artifacts、check:install通过。 - client bundle 239.97 KB(react-dom 外置);host 与 client 入口可从 tarball 安装并加载。
- 新增根滚动、宿主裁切盒、局部列表滚动、展开卡片跨整行、全书资料标题三列与
antagonist中文标签回归。
安装
dsh plugin --profile web add dsh-novel-write-engine@0.2.12或安装本页附件的 tarball:
dsh plugin --profile web add /absolute/path/to/dsh-novel-write-engine-0.2.12.tgz附件
dsh-novel-write-engine-0.2.12.tgz:npm 发布包,27 个文件,360.7 kB。SHA256SUMS.txt:tarball 的 SHA-256 校验文件。
已知边界
- 本轮没有重跑真实模型写路径;0.2.12 未改引擎写路径、阶段、门控或导出。
- 面板修复由 client 与 responsive 测试锁定;未做触屏真机与屏幕阅读器验收。
- 升级后请刷新页面或新开会话;旧标签页显示“需要刷新”时刷新即可。
v0.2.11 — 工作台内容层与命令教程
dsh-novel-write-engine v0.2.11
0.2.11 是工作台内容层与命令教程版本,不新增或改变阶段、工具、操作、门控、语义项、导出、schema 或配置键。升级不需要迁移项目文件。
亮点
- 工作台内容层重做:七栏内容区固定在面板高度内独立滚动,顶栏、下一步卡与栏目导航不再随长内容移动。所有折叠详情、资料卡、章节/质量详情与章节表改为有界滚动,章节表固定表头;长内容不再把整页无限向下拉长。
- 全部命令教程:面板「? 教程」新增「全部命令」,覆盖 5 个入口、
/novel的 25 种带名写法、6 种导出、25 个 admin 操作与 5 组常用组合;标注--prune --yes、--register、adminJSON 对象等边界。 - 单一命令参考:命令参考数据集中在
src/command-reference.ts,教程与/novel admin帮助共用,并由测试逐项校验,避免文档与实现漂移。 - 版本同步:
PANEL_VERSION从 0.2.10 升到 0.2.11,面板协议payload_version保持 7;旧标签页刷新即可。
验证
- GitHub Actions CI 41274759256:10/10 job 全部 success(static、coverage、host-gate、build-and-package、Linux 当前版/最低版、Windows、macOS、Windows/macOS platform-build)。
- 95 个测试文件 / 1009 项测试全绿;覆盖率 93.99 / 89.21 / 96.86 / 93.99,逐文件门禁通过。
- 本地
build、validate:rulepack、check:pack(27 files)、check:artifacts、check:install通过。 - client bundle 238.90 KB(react-dom 外置);host 与 client 入口可从 tarball 安装并加载。
- 新增命令参考测试校验 5 个入口、25 种带名写法与 25 个 admin 操作无重复,并与实际 admin 操作表一一对应;client 教程测试逐项断言所有命令与操作名已渲染。
安装
dsh plugin --profile web add dsh-novel-write-engine@0.2.11或安装本页附件的 tarball:
dsh plugin --profile web add /absolute/path/to/dsh-novel-write-engine-0.2.11.tgz附件
dsh-novel-write-engine-0.2.11.tgz:npm 发布包,27 个文件。SHA256SUMS.txt:tarball 的 SHA-256 校验文件。
已知边界
- 本轮没有重跑真实模型写路径;0.2.11 未改引擎写路径、阶段、门控或导出。
- 面板交互由客户端测试与静态 Chromium 截图核验;未做有项目态真实宿主、触屏真机与屏幕阅读器验收。
- 升级后请刷新页面或新开会话;旧标签页显示“需要刷新”时刷新即可。
v0.2.10
网文工坊 0.2.10
工作台呈现层版本:让面板真正像工作台,而不是一列挤在左侧的折叠列表。
这版做了什么
- 七栏全宽:概览、章节、人物、线索、世界设定、质量、健康不再被主栏宽度限制。
- 人物 / 线索 / 设定卡片墙:图标、标题、摘要、状态标签和可展开详情,替代普通
details列表。 - 章节移动端卡片:桌面保留表格行,窄屏切换为双行章节卡,不再横向裁切。
- 概览图表:最近 10 章评分趋势折线与最近 8 章字数柱状图;空态、单点态和
aria-label都已覆盖。 - 质量 / 健康页重排:全书 KPI、维度卡、节奏卡、返工投入、PASS / CHECK 状态卡。
- 版本与文档同步:
PANEL_VERSION升到 0.2.10;README 徽章、升级说明和验证数字同步;删除已完成使命的历史方案文档,避免仓库继续携带过期记录。
兼容性
- 没有工具、阶段、门控、语义项、导出格式、schema 或配置键变化。
- 面板协议
payload_version保持 7。 - Node
>=24.9.0;DSH>=0.2.1-rc.2 <0.3.0-0。 - 现有项目数据不需要迁移。
安装
dsh plugin --profile web add dsh-novel-write-engine@0.2.10验证
corepack pnpm test:coverage:94 个测试文件 / 1003 项全部通过- 覆盖率:语句 93.76% / 分支 89.17% / 函数 96.75% / 行 93.76%,逐文件门禁通过
typecheck、lint、build:通过check:pack:26 files;check:artifacts:host + client 入口加载通过check:install:tarball 在干净 consumer 中安装并加载双入口check:preset:13 个预设包从真实 DSH bundle root 解析通过check:host:临时 DSH profile 安装、面板 401 到 200、预设可见、novel_init可执行、卸载后层消失- GitHub Actions:10 / 10 job 成功(run 41268387877)
发布产物
dsh-novel-write-engine-0.2.10.tgzSHA256SUMS.txt- SHA-256:
006b6aaf8cae0483d98abdaf6788768a1ac26fc2a914c19e6c06496c96b3fe3a
说明
面板截图与验收覆盖 1440 静态 Chromium 与 390 CDP 视口;有项目态真实宿主、触屏真机和屏幕阅读器未验收。0.2.10 未改引擎写路径,因此本轮没有重新跑真实模型链路。
完整变更:CHANGELOG.md · 提交:f0384f1
网文工坊 v0.2.9
网文工坊 v0.2.9
0.2.9 是可信工作台与工具契约版本:把长篇小说连载需要的状态、门禁、规则和账本,继续从提示词搬进可验证的代码。
本版重点
- 归档卡证据链:归档时把受保护的章卡字段写入
archive_card与 digest;novel_amend优先使用归档卡证据,无法证明时 fail closed,不再从候选章卡伪造旧卡。 - 工具契约:26 个自由 JSON 入参收敛为类型化 schema;
summary、review/check、archive/handoff、worldbook 等输入定形;新增 2,000 字引号/换行压力用例和 32KB 参数预算。 - 面板 v7:overview / chapters / characters / foreshadows / timeline / relationships / worldbook / quality / health 分栏;
total/returned/truncated/next_cursor、section 与 bundle ETag/304、64KB 字节预算、章节/质量按需详情、人物/线索/设定搜索与 240/400 字自由文本上限。 - 读模型修复:health 要求文件可读且无 error;无目标书进度为
null;草稿未评审不显示 0/150;quality 维度带 max;listHistory默认不读正文;stats 损坏时返回state_errors/partial。 - 规则包:修复角色短名子串、数值单位、资源符号/角色绑定/证据词;LOCKED_DETAIL_DRIFT 改为检查所有描述段、取最高覆盖,仅全部低于阈值才报告;新增可选 genre profile(advisory)。
- 稳定卷 id:卷 upsert 支持改名保留 id,拒绝重复 id/title/区间;Markdown 导入不再悄悄扩展声明范围。
安装
corepack prepare pnpm@11.28.9 --activate
dsh plugin --profile web add dsh-novel-write-engine@0.2.9需要 DSH >=0.2.1-rc.2 <0.3.0-0、Node >=24.9.0、pnpm 11.x。安装后刷新页面、新开会话。
验证结果
- 测试:94 个文件 / 1000 项通过
- 覆盖率:语句 93.47% / 分支 89.01% / 函数 96.82% / 行 93.47%
- typecheck、lint、build、pack(26 files)、artifacts、install(26 packages)、preset(13 packages)、host、crash、hygiene(160 files / 0 ignore)、isolated(63 源文件)、rulepack(default@1.1.0)通过
- 真实模型:
agnes-2.5-flash在临时环境跑通 20 章完整 P1→P8→archive,20/20score=150、stage=done,正文合计 15,374 字;P1/P2/P4/P6 为确定性夹具,P3 正文为模型生成并按发布验收记录做了确定性规范化 - CI:本 tag 对应提交的 GitHub Actions 全部 job 成功(见 Release 页面 Checks)
附件
dsh-novel-write-engine-0.2.9.tgz:npm 包 tarballSHA256SUMS.txt:tarball 的 SHA-256,下载后请核对
SHA-256:794f1904401636302ecedfb5eac989ded2dddc7677b4dcdd2a82f0842fd5423a(以 SHA256SUMS.txt 为准)
已知边界
- 真实宿主只验收了临时 profile 空态;有项目态真实宿主、触屏真机、屏幕阅读器仍未验收。
- 真实模型 P1/P2/P4/P6 仍是确定性夹具,不等同于模型自主完成全流程。
- 全量
panelBundle()对带大量历史 review 的旧项目仍会读取质量数据;客户端默认走 lean bundle。 - 触屏、屏幕阅读器与真实宿主有项目态是后续版本继续补齐的范围。
升级
0.2.9 没有破坏性 schema、阶段、门控、导出或配置键变更;ChapterRecord.archive_card 是可选新字段,旧项目缺它时只读回退。升级命令:
dsh plugin --profile web add dsh-novel-write-engine@0.2.9完整变更与验证证据见仓库 CHANGELOG.md、docs/0.2.9-acceptance.md 和本 Release 的 CI。
v0.2.8
0.2.8 边界与可信性
0.2.8 是边界与可信性版本,不改工具、阶段、门控、schema、导出或配置键。
Fixed
- 章节边界读模型:归档第 N 章后
pipeline.chapter指向 N+1、stage仍为done,旧读面把它拼成“当前第 N+1 章,阶段 done”。新增ChapterProgress单一投影,/novel status、/novel resume、novel_status、novel_pipeline、novel_guide、novel_doctor、面板摘要与复制续写指令统一显示“第 N 章已归档;下一章第 N+1 章从 P1 开始”。全书达到目标后finished=true,引擎续写文本返回null;/novel resume改为显示“全书已完成”,不再把它当成故障态。 - 备份路径安全:
backups/改用FsStore.ensureDir+safePath创建和解析,符号链接目录返回ENGINE_PATH_ESCAPE,项目外零写入;备份 staging 写入前重复检查项目根,避免删除根后被mkdir重建;备份列表/retention 跳过backups/下的符号链接子项,不再因一个用户文件整体失败。 - 叙述者别名:新增
src/domain/narrator.ts,PG-05、state_delta的存在性与 locks 取证共用isNarratorAlias;narrator: "林砚(第一人称)"不再因为正文只写“我”而卡在 PG-05 或归档;只接受第一人称“我”,排除第三人称与无关括号引号,locks 优先非对白段落。 - 面板健康缓存:
panelCacheKey纳入 journal 行数、末尾行与journalBlocking摘要,外部 ledger 改动或 journal 追加后不再返回旧health.ok/旧 activity。 - 归档卡字段:归档卡的
goal/conflict/hook/notes与title/scene_type/target_words/cast一样不可改写;省略字段仍保留原值。novel_amend在chapters.yaml不可读时也以旧大纲卡为证据,不能借损坏窗口改写。 - created growth:
state_delta的created角色不再丢弃已声明的growth,按当前章写入 ledger。
Changed
stats()与/novel stats的totalWords统一为“归档 + 活动草稿”,并新增archivedWords/draftWords拆分;面板同步新增archivedWords/draftWords,头部总字数与命令口径一致。- 面板九阶段名称改为与 README/DESIGN 一致:P7 状态同步、P8 终审、P9 归档;教程注明首次章卡提交默认 strict、纯文本
novel_word_count/novel_diff不绑定会话。
Tests
- 91 个测试文件 / 923 项测试全绿;覆盖率 93.55 / 89.23 / 98.14 / 93.55,逐文件门禁通过。新增归档边界、完结续写与命令文案、P8 brief 回归、面板缓存、字数拆分、备份符号链接、第一人称归档、created growth、归档字段保护、损坏 chapters 下的 amend 保护、空 legacy 卡重交、locks 对白取证、提交叙述者优先级回归。
Migration
progress、archivedWords、draftWords均为 additive 字段;REMOTE_VERSION保持 6,旧标签页刷新即可。- 无 schema、工具、阶段、门控、导出或配置键变更;项目文件不需要迁移。
安装与升级
npm install dsh-novel-write-engine@0.2.8- 无 schema、工具、阶段、门控、导出或配置键变更;升级不需要迁移项目文件。
- 面板 v6 新增字段为 additive,旧标签页刷新即可。
发布产物
dsh-novel-write-engine-0.2.8.tgz(26 files)SHA256SUMS.txt
SHA-256:652fb9093ae61642442bd977d10ccf4257120a2a56fd7834381f546a297158e6
验证
- 91 个测试文件 / 923 项测试全绿;覆盖率 93.55 / 89.23 / 98.14 / 93.55。
- 同一提交 CI 41185429492 10/10 job 成功。
v0.2.7
0.2.7 · 通用性与发布边界
这是一个不改变运行时契约的维护版本:工具、阶段、门控、schema、导出格式和规则阈值均未变化。
主要变更
- README 全量重写:围绕当前项目全貌重组为安装、快速开始、核心机制、工具手册、配置、数据与安全、升级、排障、开发验证九个部分,补充 npm / CI / release / Node / DSH / License 徽章,移除历史版本堆叠与失效链接。
- 文档收口:当前分支只保留
docs/tools.md、docs/states.md、docs/rulepack.md三份维护文档;历史版本方案与验收稿留在对应发布 tag,不再复制进main。 - 产品面去具体项目化:
novel_brief P8示例、state_delta错误提示、规则注释和历史验收段落不再引用具体书稿的人物、地点、货币或道具,统一改为中性占位。 - 测试夹具中立化:单元与集成测试改用合成人物、地点、资源,不再依赖某一本书的专有名词。
新增验证
- 三题材归档矩阵:玄幻修仙、都市现代、西方奇幻三组互不相关的原创文本各跑一遍
init → P1 → P2 → P3 → P4 → P6 → P8 → archive,验证同一流水线不依赖单一题材词汇。 - 发布面隐私守卫:扫描
src / briefs / skills / presets / rulepacks / docs与根文档,阻止真实项目名、人物名和宿主绝对路径进入随包内容;同时断言扫描目标存在,避免目录缺失时空跑通过。
质量门禁
- 91 个测试文件 / 910 项测试全绿;
- 覆盖率:语句 93.51% / 分支 89.13% / 函数 98.12% / 行 93.51%;
- typecheck、lint、build 通过;
validate:rulepack、check:pack、check:artifacts、check:install、check:preset、check:host、check:crash、check:hygiene、test:isolated全过。
升级
无 schema、工具、阶段、门控、导出或配置键变更,不需要迁移项目文件。升级后刷新页面、新开会话即可。
完整变更见 CHANGELOG.md。
产物
- npm:
dsh-novel-write-engine@0.2.7 - Release 附件:
dsh-novel-write-engine-0.2.7.tgz与SHA256SUMS.txt
v0.2.6
dsh-novel-write-engine 0.2.6
0.2.6 的主题是让证据、台账锚点和书籍数据都能被解释。本版不新增工具、命令或阶段,工具 28、操作 32、语义项 5、门控 13、导出 6 不变。
新增
- 语义证据配对:
novel_check失败项新增conflicts,区分duplicate/same_sentence/interval_overlap,带配对 id、重叠原文/字数/比例、段落和句子;submission 错误汇总最多五条配对,aborted journal 写紧凑审计。 - world 实体锚点:
summary.new_element_anchors支持name + anchors;PG-05 与归档共用entity-anchors.ts,新实体持久化 anchors,旧数据无 anchors 继续按 name 回退。 - panel v6:
summary.bookData增加书脊/蓝图、当前章卡、世界/人物/关系/伏笔/时间线、15 维质量、节奏、逐章 effort、outline drift、state_errors/pending/damaged;quality明确分开全书average与last_ten_average。 - pipeline 恢复:
novel_restore { paths: ["state/pipeline.yaml"], txid }可从有效备份恢复损坏 pipeline;status/doctor 报PIPELINE_UNREADABLE,恢复前普通写入 fail-closed。 - 恢复与不变量:summary-only 的 PG-01 旁路只对紧接的 P6 check 生效;outline restore 复用归档卷守卫;PG-05 null row 不崩溃;PG-09 重复句按引用段落的最近出现匹配。
修复
resources:null不再被当成空对象;summary-only 不再静默吞掉issues/proof;rulepack 递归 unknown-key 覆盖reader_intrusion/god_view、genres.*、water_words.scene_thresholds。- 面板 pending 不再丢失,活跃章详情改读
pipeline.draft.summary,revisionLabel 用本章 revise 轮次,samples/attempts 不倒挂,章节行补 dialogue ratio 与 archived_at。 - 测试与 docs 移除真实项目正文,新增 docs/tests 正文片段隐私扫描;工具数固定 28 并断言全集;R7 识别
skipIf;panel v6 从真实 engine 快照集成验证。
验证
- 90 个测试文件 / 906 项通过;覆盖率 93.51% / 89.14% / 98.12% / 93.51%。
- typecheck、lint、build、pack 26 files、artifacts、install、preset 13 packages、host、crash、hygiene、isolated、rulepack 全部通过。
- 另对一个真实项目只读验证:stage=done、blocking=0、state_errors=0(项目名不公开)。
agnes-2.5-flash临时项目实时 P1/P2/P3→P8 成功,stage=done,score=145。agnes-3.0-flash实时请求被供应商连续 HTTP 429;按作者确认,使用 0.2.5 的真实 3.0 正文在当前 0.2.6 引擎离线重放作为 3.0 证据,未伪造成实时成功。
安装
GitHub Release 附件:dsh-novel-write-engine-0.2.6.tgz(与 npm 发布一致)和 SHA256SUMS.txt。
npm install dsh-novel-write-engine@0.2.6DSH:
dsh plugin --profile web add dsh-novel-write-engine@0.2.6迁移
- check/world/summary 新字段均为 additive;旧文档可读,不自动迁移 anchors。
- panel v6 与 v5 不混用;旧标签页显示刷新。
- 旧项目已消耗的 rounds 不回滚。
提交:e562fa1;标签:v0.2.6。验收与证据见 docs/0.2.6-acceptance.md。
v0.2.5
dsh-novel-write-engine 0.2.5
发布前全量回归 review 完成:M1–M7、S1–S8 与 P2/P3 清理全部收口,真实模型 agnes-2.5/3.0 已在临时项目跑通完整链路。
Fixed
- 语义证据跨句/跨段:
novel_check的引文不再要求落在同一句;支持句末收尾引号、跨段证据,逐条返回pass|fail|missing|invalid|not_found|too_short|duplicate|overlap|same_sentence,并在失败时给出nearest/conflict_with。同一段被两条证据复用、或同一句不同子串仍按overlap/same_sentence拒绝;真实 r0076 的四段双句引文全部通过,r0075 的编造 POV 引文只报not_found。 - check submission/content 分流:形状、缺项、引文不存在等提交错误改为
ENGINE_CHECK_SUBMISSION_INVALID,不写 check、不增加 blocking、不消耗rounds.check;只有正文/机器门真正的 content failure 才写 check 并counted:true。工具错误行会回传逐条items。 - world delta 双真源仲裁:
summary.new_elements只作为意图声明;state/world.yaml的存在性为真源。已有实体写created归一化为updated,新实体写updated/no_change在 kind/正文可判定时归一化为created;kind/detail 冲突仍拒绝。archiveChapter返回delta_warnings与normalized_world,warning 不再静默。 - pending 只读诊断:
inspectPending分类none|complete|untouched|partial;status/doctor/audit/panel 对 complete/untouched 给 warning、partial 给ENGINE_PENDING_PARTIAL,不再误报 hash mismatch。novel_init会先恢复/拒绝崩溃 init,partial 不被 PROJECT_EXISTS 掩盖。 - outline 归档不变量统一:
novel_blueprint、novel_outline_import(含 dry-run)、novel_amend(outline)与novel_outline共用assertArchivedCardVolumes/assertArchivedCardsInVolumes和 active 卡保护;即使旧卡缺失或卷重排,归档章也必须由最终卡指向覆盖它的卷。reindexed/would_reindex显式回显,omitted 归档卡不再伪造archived_at。 - summary-only 修复:
novel_revise可只传summary:正文 hash、章文件和历史不变,不消耗 revise 轮次,保持/推进到 P6;不要求 P4/P6 proof,接下来可直接 check/archive。summary-only 明确拒绝issues/proof,避免静默吞掉评审/证明。P8 与工具文档已改为先 summary-only、只有正文需要改才走 P5。 - PG-05 前置:P3/P5 即检查
summary.new_elements名字在正文出现、已在 world ledger 时报“remove/use updated”,并校验characters_appeared正文/叙述者别名,避免错误留到 P8。 - 资源余额:
current_state.resources与旧余额深合并,保留兄弟资源;created/updated 都校验有限非负整数,负值/字符串/null/数组拒绝;P8 示例与错误提示改为非负。
Hardened
- brief digest 绑定完整 project/outline/worldbook/plan/worldPlan,而不只是裁剪后的 context。
- characters/world 重复实体名在 load 与 amend 均拒绝;
strict_explicit只允许内部 provenance,公共 outline 写入拒绝该字段。 - FsStore 将 EACCES/EPERM/EROFS 包装为
ENGINE_IO_PERMISSION;rulepack 对每个 section/nested object 递归 knownKeys,包括reader_intrusion/god_view、genres.*与water_words.scene_thresholds。 - worldbook 导出补
数值事实;duplicate paragraph 指回原章真实段落号;time regression 指向正文段落;timeline.characters 必须是已声明角色;export 在 artifact 缺失时使 replay 失效并重写。 - migration 备份
backups/migrations/不参与 retention prune;无硬链接文件系统(FAT/SMB/WSL)用受控 rename fallback 回收 stale lock;面板选择中配置 projectRoot 优先于单行 registry;commands 错误行与 tools 一样保留 blocking/items。
Migration
- check 文档 schema_version 不变;新增字段可选,旧 check 可读。旧项目已消耗的 rounds 不回滚。
- archive 遇到旧
summary.new_elements与 ledger 冲突时按新规则成功并给 warning;不会回写旧 ledger。 - summary-only 是新增调用模式,旧 content/patch 修订语义不变。
strict_explicit若曾被外部写入,仍可被读取;新的公共写入必须改用strict。- 详细验收与真实项目/模型证据见
docs/0.2.5-acceptance.md、docs/0.2.5-real-model-evidence.md。
安装
npm install dsh-novel-write-engine@0.2.5验证
- 81 个测试文件 / 875 项测试通过
- 覆盖率 93.51% statements / 89.07% branches / 98.05% functions / 93.51% lines
- typecheck、lint、build、pack、artifacts、install、preset、host、crash、hygiene、isolated、rulepack 全绿
- 真实项目《1971从偷渡港岛开始》只读回归:stage=done,blocking=0
完整证据:https://github.com/ThzxxArt/dsh-novel-write-engine/blob/main/docs/0.2.5-acceptance.md
v0.2.4
dsh-novel-write-engine 0.2.4
0.2.4 是一次数据安全语义修正:根治 novel_outline 的“省略即删除”,把章卡/卷从“提交集合就是全集”改为按标识 upsert,并补上删除显式化、写前预演、变更回显、回退副本与 outline 级恢复路径。
核心变更
- BREAKING:
novel_outline改为按标识 upsertchapters按num、volumes按title合并;未提交的计划卡逐字节保持,不再被静默删除。- 删除只能通过
remove: number[]/remove_volumes: string[]表达;活动章、归档章、不存在章、已完成卷、包含归档章的卷都会被拒绝。 novel_outline {remove:[2]}可以直接只删卡;chapters可省略。- 空
{}/chapters:[]/volumes:[]/book:{}是真正的 no-op,不写盘、不推进 revision、不偷改 strict。
- 可解释写入
dry_run:true返回would_add / would_update / would_remove,零写盘、零 journal。- 成功返回
added / updated / removed与volumes_added / volumes_updated / volumes_removed。 novel_outline正常写入保留outline/outline.deprecated.yaml。novel_restore支持paths:["outline/outline.yaml"],不要求chapter;恢复结果必须与当前章索引一致,预归档 outline 需先novel_reopen。
- 卷与工具契约
novel_blueprint.volumes仍是整体 replace,但删卷必须confirm_remove:true。- 持久集合的数组参数声明 upsert/replace/remove 语义;DSH 的强制 JSON Schema 子集不接受未知
x-*关键字,因此语义落在参数描述 +src/tools/semantics.ts契约表,并由tests/tool-contract.spec.ts对漏声明、缺 remove/confirm 和未登记 untyped JSON 参数强制报错。 - 同名卷新写入拒绝;旧项目只读加载兼容,提交卷前需用
novel_amend改名。
- 数据不变量与恢复
- 归档卡不可改;计划卡的部分更新会保留省略的
cast/notes(null也视为省略)。 - 删卷后新增卷不会复用已存在的 volume id。
- 恢复 outline 不允许把归档章变成 planned、把缺失卡补成缺失,或把已 reopen 章恢复成 archived。
- 归档卡不可改;计划卡的部分更新会保留省略的
验证
- 测试:80 个测试文件 / 848 项全绿。
- 覆盖率:语句 93.97% / 分支 89.14% / 函数 98.00% / 行 93.97%,逐文件门禁通过。
- 发布门禁:
typecheck、lint、build、check:pack(25 files)、check:artifacts、check:install(26 packages)、check:preset(13 packages)、check:host、check:crash、check:hygiene(143 files,0 v8 ignore)、test:isolated(60 源文件)、validate:rulepack全过。 - 真实模型:
agnes-2.5-flash完成 P1→P8(382 字 / 7 段),agnes-3.0-flash完成 P1→P8(341 字 / 8 段);两者归档、report/doctor/panel v5、六种导出、novel_reopen与重新归档均成功。P1/P2/P3 为真实模型输出,P4/P6 为确定性夹具。 - 发布提交:
9a23ed9;标签:v0.2.4。 - GitHub Actions:CI 10/10 success。
安装与升级
npm install dsh-novel-write-engine@0.2.4或安装 GitHub Release 附件:
npm install -g /path/to/dsh-novel-write-engine-0.2.4.tgz旧项目不需要迁移 outline.yaml。老的“全量提交”在 upsert 下等价;老的“部分提交”以前会删掉未提交卡,现在只改提交的卡——这正是本次修正。想清空计划卡必须显式 remove,空数组是 no-op。若旧项目存在同名卷,只读加载仍兼容,但提交 volumes/remove_volumes 前需先用 novel_amend 改名。
产物
- npm:
dsh-novel-write-engine@0.2.4 - GitHub Release 附件:
dsh-novel-write-engine-0.2.4.tgz- size:303,261 B
- sha256:
ae3c38b818a61a69377ab3510f4000592320fd5aa6d1e45d433057cbd376e0a8
边界
- 这是一次有意的 BREAKING 语义修正:从“提交集合就是全集”变成“提交的是要改的对象”。
- P4/P6 不是模型评分;P4 的十五维评分与 P6 的五条语义证据由确定性夹具生成。
- DSH 宿主不接受
x-semantics关键字,语义以参数描述 + 本地契约表 + 测试强制承载。 - 详细设计与验收见仓库
docs/0.2.4-plan.md、docs/0.2.4-acceptance.md、docs/0.2.4-real-model-evidence.md。