Skip to content

Releases: zenstory-ai/oh-story-claudecode

v0.7.7 — 记忆与收口

Choose a tag to compare

@worldwonderer worldwonderer released this 27 Aug 06:37
feb30aa

补丁号不传达这一点,故在此明说:缺少合法「字数目标」现在会停止,不再回退到 3000;欠字不自动加戏,超字最多压缩一次。

主要变化

  • 长篇安全收口storyctl.py 统一字数与 blocking quality 检查,提交追踪后才进入下一章。
  • 跨会话作者记忆。确认过的稳定偏好可复用,并与单本剧情追踪隔离。
  • Codex 封面生成。优先使用内置 ImageGen,无需另配图片 API Key。
  • 部署与兼容。修复 story-setup 递归复制,并兼容 macOS Python 3.9。
  • 反馈入口。新 Issue 按 Bug、输出质量 Case、功能请求分别收集行动所需信息。

升级提示

先更新技能包:

npx skills add zenstory-ai/oh-story-claudecode -y -g

然后在写作项目根重跑 /story-setup 并新开会话;本版 agents_version 为 26。

完整变更见 CHANGELOG

v0.7.6 — 正文 agent 规则修复 · 细纲照搬检测

Choose a tag to compare

@worldwonderer worldwonderer released this 13 Aug 14:00
0a34c69

这版的重点在正文那一段。写正文的专业 agent 有三条规则一直在空转:它被要求「写完必须立即统计字数」,可它的工具白名单里根本没有 Bash,那条命令跑不了,而同一句话又禁掉了唯一的替代手段——于是整个「字数达标是硬性要求」小节挂在一条无法执行的命令上;被要求「返回前报出句长分布」,同样无从计算,只能编,而主会话正拿这个数做质量校验。第三条更隐蔽:模板里「正文逐项展开细纲」是最高优先级的明令,而「可自由编排、合并穿插情节点」写在主 skill 里、从不进 spawn 提示词,子代理也不读主 skill——它只看见限制的半边,就按一个情节点一段平推成流水账。三条都已修好。同时新增细纲照搬检测:细纲把情节点写成成品散文句时,正文只剩誊抄,全章最好的几句其实在写细纲那一步就写完了,此前没有任何检测。本版 agents_version 为 25(v0.7.5 是 24),已部署的项目要重新跑 /story-setup 并新开会话。

升级须知(本版必读)

npx skills add zenstory-ai/oh-story-claudecode -y -g

然后在写作项目根目录重跑 /story-setup,并新开一个会话(专业 agent 只在会话启动时注册,正文 agent 这次改了工具白名单,不新开会话拿不到)。完整说明见 skills/story-setup/UPGRADING.md

修复

  • 正文 agent 的字数硬门槛终于能真的执行(#355narrative-writer 的工具白名单是 [Read, Glob, Grep, Write, Edit],没有 Bash。而它的规则写着「写完每章后必须立即统计字数」,给的是一条 Python 命令,还明令禁止模型估算——两头都堵死,「未达标的章节视为未完成」这句话背后没有任何可执行的判据。同一处的「返回前报出句长分布」也一样,数值只能是编的,而主会话拿它当质量校验的输入。现在给这个 agent 加上 Bash(同项目的 story-researcher 本来就有),字数和句长都报实测值,探测不到 Python 就明说「未完成机器字数验证」交主会话复核,不许声称已统计。实跑一章的对比:走子代理时首次落盘 2321 字就进了 2300–2530 的验收区间,全程没低于下限;不走子代理的对照组首次落盘 1663 字,不到下限的 73%,靠 26 次小幅增补才爬到 2350。

  • 正文不再照着细纲的形状一项一段平推(#355。模板里「正文逐项展开本章细纲」挂在「最高优先级」标题下无条件生效,而放宽的那半边——可自由编排、合并穿插情节点——只写在主 skill 里,从来不进 spawn 提示词,子代理又不读主 skill。子代理只看得见限制,于是照着细纲的条目顺序一条一段推下去。现在拆成两条并列:内容层管「每项都要独立落地,不许漏、不许两项并一句」,形状层管「落地位置、顺序、断段由你定,可打散重排、把相邻几项缝进同一个连续动作,不要一项一段平推」,形状这半边同步写进 spawn 清单。实跑 1.81 句每段(原文基线 1.36),对照组 2.41。

  • check-outline-copy.js 一次传多章不再静默漏检。两处调用点写的都是通配 正文/第XXX章_*.md,日更一批多章时会展开成多个正文路径,而脚本把第二个位置参数当成细纲——于是第 2 个正文被当作第 1 个正文的细纲,其余文件根本不检。两份正文之间几乎不可能有 16 字连续重合,脚本安静地退出,读起来就是「本批干净」。现在位置参数一律按正文处理,与同目录 check-ai-patterns.js 的口径一致,指定细纲改走 --outline

  • Claude Code 上用 Bash 写正文也会被守卫拦下(#316。写正文前的大纲和追踪检查此前只挂在 Write / Edit 上,绕开它只需要一条重定向。现在常见的重定向、teetouchcpmvinstall 写入正文时会复用同一份共享判定,只读命令里的引号示例和 heredoc 里提到正文不拦,相对路径按 hook 的工作目录解析。这一面是静态识别,不是 shell 沙箱:环境变量拼出来的路径、运行时生成的命令、没列出的任意写文件程序都判不了,这类写入请改用 Write / Edit。

  • 书目录发现不再无界扫描(#319。会话起点和结束时的自动发现会把整个项目翻一遍,深目录项目每次都要等。现在统一限制到项目下 4 层,并跳过隐藏目录和 node_modules,四端范围一致。.active-book 也不能再经目录符号链接指到项目外。

  • 七猫大热榜的榜单周期不再混在一起(#340。日榜、月榜、总榜此前共用一套抓取,跑出来分不清是哪一档。现在 --period day|month|all 会写进文件头和文件名,改为按 URL 直达并校验页面上实际选中的那一档;分页器上的文字也不再被当成书名收进来。

  • 起点采集补齐四个缺失字段(#339。字数、总推荐、签约状态、收费模式此前直接不采,页面上没有时现在明确写 [待补],不留空让下游误以为是零。

  • 拆文的章节摘要不再被模板自己教出格式漂移(#349。输出模板里写的是 类型{转折点/行动/…},小模型照着抄就输出成 类型{行动};多标签怎么分隔、空字段怎么写,模板从来没说。现在讲明 {} 是占位标记不是要输出的字符,补了一个完整正确样例,并把三处约定写死:字段名后不加冒号括号、主题标签只填一个值、空字段统一写「无」。同一份要求还内联进了 Stage 2 的 spawn 提示词,老项目不重新部署也能拿到。已经落盘的摘要不因此作废,不用重新生成。

改进

  • 细纲照搬检测(#355。细纲的情节点一旦写成成品散文句,正文就退化成誊抄——实测正文与细纲连续重合最高 13.5%、单段最长 40 字,且重合的多是叙述而非台词,等于全章最好的那几句在写细纲那一步就定死了,此前没有任何检测。新增 check-outline-copy.js:正文与同章细纲连续重合超过 15 字即报出位置和原片段,子代理落盘后自查、主会话收尾复扫,两边同一份实现。它只提供证据不自动改写——系统面板、誓词、案卷原话、固定专名本就该逐字一致。为此细纲的「情节细化」下新增复沓锚句字段:必须原样进正文的原话逐行列出并注明落在第几个情节点,既强制这些内容逐字落地,也让它们不被判成誊抄。存量细纲没有这个字段的按「无锚句」处理,行为和此前一样,不用回头补。

  • 每次会话固定加载的文本又少掉两成(#352。日更路径下 story-long-write 的 SKILL.md 和 workflow-daily.md 会同时进上下文,后者用近 2000 字复述前者已经写全的规则(写前资料清单、题材卡召回、文风判据、字数验证、元信息扫描),文件结尾还自陈「完整逻辑见 SKILL.md」。删掉重复的那一份,权威留在 SKILL.md。同时把只有写正文才用得上的单章流程和质量检查下沉到 workflow-chapter.md,开书和回炉这两条根本不写正文的路径不再为它付费。各场景实际加载:开书 −30.3%、回炉 −40.9%、日更 −4.4%。正文手艺规则(细纲边界、爽点铺垫、去 AI 味 Gate)一条没动——PR #228 的盲评实测过,删那些会退步。

  • 超长篇拆文有了一条能跑通的路(#350。此前「块」这个字同时指两件事:在哪里按叙事弧切,和一次读多少受上下文限制。同一段里既写着「每块 50-200 章」又写着「6-8K token 每块」,差三十到一百倍,于是 500 章以上的书三条路都无解,执行的人只会以为是自己操作错了。现在两轴拆开:语义分块只管叙事弧划分,处理批次给出子代理并行(10-20 章每批,降维回传,按批记进度可续跑)和主线程串行两条路。批次尺寸按实测反推——中文章节摘要约 5-7K token 每章,914 章按 15 章每批约 61 批可覆盖。500 章以下的既有路径没变。

  • 拆文 Stage 6 不再二次切片(#333,只读 _progress.md 里已经定好的章节边界表。

  • /story-review 分批审查的结果不再丢(#343。新增 .story-review/state.md,上一批没解决的 findings 会继承到下一批。

  • 正文里的普通名词不再被加引号强调(#315narrative-writer 的 Gate B 补了这一条;合法对话、直接引用、书名代号、故事内系统界面的原文照常保留。

维护

  • 新增 scripts/check-doc-budget.shdoc-budget.json:给每个「每次会话或每章都要进上下文」的文件、以及三条路径的合计设了字数上限,进 CI 卡死。超了要么删等量旧文本,要么显式调高上限并在 PR 里写清为什么这段值得每个用户每次会话都付——让文档膨胀变成一次显式决定,而不是无声累积。
  • 细纲照搬检测器接回归测试(12 例,覆盖锚句在片段头/尾/中间、片段整体等于锚句、锚句字段写「无」、存量细纲无该字段、一次传多章各自比对),三份跨 skill 副本锁字节一致,三个平台的 CI 都跑。
  • story-review 版本号 1.1.0 → 1.1.1。

v0.7.5 — 追踪状态检查对齐四端 · 减开销

Choose a tag to compare

@worldwonderer worldwonderer released this 07 Aug 18:08
0d7bb9c

这版没有新功能,都是修问题和减开销。最要紧的一条:Claude Code 上写正文一直不检查追踪状态,而另外三端从 v0.7.3 起就检查,于是同一个工程在 Claude Code 上能一路写出没有追踪的章节。本版把这道检查补上,代价是旧追踪的长篇项目在 Claude Code 上会开始被拦,必须先迁移 追踪/ 才能继续写,处置方式见下方升级须知。另外长篇写作每次触发都要整份加载的那份 SKILL.md 从 699 行降到 455 行,只有开书才用得上的三个阶段移成按需读取;正文规则里还有一条把普通的「他说」判成违规,与其余 11 处口径冲突,也一并改掉。本版 agents_version 为 24(v0.7.4 是 23),已部署的项目要重新跑 /story-setup 并新开会话。

升级须知(本版必读)

npx skills add zenstory-ai/oh-story-claudecode -y -g

然后在写作项目根目录重跑 /story-setup,并新开一个会话(专业 agent 只在会话启动时注册)。完整说明见 skills/story-setup/UPGRADING.md

旧追踪的长篇项目在 Claude Code 上会开始被拦。 追踪/ 下没有 _tracking-state.json 的项目停在 v0.7.2 及更早的追踪结构上,从 v0.7.3 起就该迁移;此前在 Claude Code 上还能照常写下去,本版起会在写入前被拦住。拦截提示里带了迁移办法:走 /story-import 的「旧追踪项目迁移」,只重建 追踪/不必重跑全书拆解,正文、设定/大纲/ 都不受影响。

修复

  • Claude Code 上写正文补回追踪检查(#305。同一本书、同一次写正文,在 OpenCode、ZCode、Codex 上会被拦下并告诉你怎么修,在 Claude Code 上却直接写了进去——追踪状态缺失、状态卡与实际进度对不上、跳着章号写,一概不拦。用户往往一路写出好几章没有追踪的正文,直到会话起点提醒或批末校验才发现,那时只能重新导入补救。原因是 v0.7.3 加的那四道追踪检查只进了共享 JS 核与 Codex 的 Python 实现,而 Claude Code 挂的是另一份纯 bash 守卫,四条一条都没有。现在 bash 守卫改调同一份共享核,四端判定一致、提示一致,续写和改稿也一并纳入判定。这道检查要解析 JSON、只能靠 node,机器上没有 node 时它不生效,细纲那道门则仍是纯 bash,任何情况下都拦得住。

  • 正文里的普通「他说」不再被判违规(#312story-format.md 把「他说」「她道」列为绝对禁止,是全仓唯一把普通「说」判成违规的地方,与 format-and-structure.md 等 11 处「普通说可保留」的写法冲突,而它的加载路径正好是 正文/,写正文时必定生效。现在改为「避免对话标签机械化」:高频和公式化的标签用动作或上下文替代,普通「说」低频使用可以保留。

  • 删掉命中不到正文的「禁止 AI 腔」红线块(#312story-narrative.md 里这一块只在 拆文库/对标/设定/ 下加载,正文目录根本不命中;那五条规则也已由 narrative-writer 的 7 Gate、禁止事项和确定性检测脚本覆盖。

  • 去 AI 味的自然文本基准不再教电报体(#312。story-deslop 的这张基准表停在三个月前的口径,仍写着「段落 1-3 句为主」,比语料校准早,等于去 AI 味的 skill 自己在把文字往电报体推。已按语料校准改写,并补了一行句内节奏。

改进

  • 长篇写作每次触发的固定加载少掉三分之一(#269story-long-write 的 SKILL.md 是这个 skill 唯一无条件整份进上下文的文件,references/ 下那几十个文件都走「参考资料索引」按需读取。它上一版 699 行,其中开书三阶段(确认选题方向、核心设定、大纲搭建)占了 244 行——这三段每本书只跑一次,日更续写和单章写作都用不上,却每次触发都要加载。现在移进 references/workflow-setup.md,要开书时才读,SKILL.md 降到 455 行。留下的是每章都要用的部分:场景判断与停靠规则、单章写作流程、质量检查、参考资料索引。移动前后按字节比对过,单章写作与质量检查两节逐字未动。

  • narrative-writer 模板精简约两成(#312。每章 spawn 一次、整份常驻的正文 agent 模板从 36506 字节降到 29506 字节。删的是与 7 Gate、禁止事项重复的审查清单(/story-review spawn 它时本来就会内联完整评分标准),正文阶段的「具体字数表达校验」(移到审查侧),以及省略号、破折号、段间空行、章节元信息这几处的重复叮嘱——它们每章由归一化脚本自动处理。写作口径没有放宽,Gate A-G 与禁止事项不变。

维护

  • 写正文守卫的 bash 那一面纳入跨端一致性断言。此前只锁 Codex 的 Python 与 JS 核,bash 侧没有任何断言,上面那处四端不一致正是从这个缺口漏过去的。新增断言按「同一个工程、同一次写入,两边拦不拦必须一致」比对十组工程状态,并逐个写明该拦还是该放行。

v0.7.4 — 对标目录与参考资料包修复

Choose a tag to compare

@worldwonderer worldwonderer released this 07 Aug 01:44
0ca649b

这版全是修问题,没有新功能。最影响使用的是三件事:导入自己的书以后,「对标」目录里装的是自己的设定;多端部署的项目每次开会话都被告知参考资料包缺了;拆文跑到文风统计那一步,Windows 上直接报错退出。另外把 spawn 的版本检查从硬门禁改成提示,版本对不上不再整体退回单线程。本版 agents_version 为 23(v0.7.3 是 22),已部署的项目要重新跑 /story-setup 并新开会话。

修复

  • 导入的书不再被登记成自己的对标(#294story-import 早先把「导入的书」和「对标的书」都写作 {书名},本书的拆文结果就跟着被复制进 对标/,用户看到的就是「对标内容和自己设定一模一样」。现在两者彻底分开:本书拆文只用来重建正文、设定、大纲和追踪;只有明确指定的外部作品才进 对标/,没指定就不建这个目录。写作和跨书召回也会跳过历史上误建的 对标/{当前书名}/,老项目不会继续被污染。短篇里的本书分析改叫「本书续写基线」。

  • 版本对不上只提示,不再阻断多 agent(#294。以前 agents_version 与当前包不一致,就整体退回 solo。但 bump 往往是别的部署物变了、agent 模板根本没动,为此牺牲并行不划算。现在照常 spawn,只在报告里提一句版本不匹配、建议重跑 /story-setup。真正退回 solo 的只剩两种情况:agent 文件确实缺失,或运行时不支持自定义 agent。

  • 长篇字数只认细纲目标(#295。此前静态下限表(2000/3000 字每章)和 hook 的「细纲目标 × 90%」并存,是两套标准。删掉静态表,只留细纲目标这一条;细纲没写字数目标时按 3000 字每章兜底,同时提示补纲。

  • browser-cdp 不再教你批量关 Chrome(#295。原来的清理命令按可执行文件名杀进程,会把用户自己开着的浏览器一起关掉。改成先查出确属调试 profile 的 PID 再结束,macOS/Linux 和 Windows 各给了一条可以直接跑的命令。

  • 黑岩扫榜同日不同频道不再互相覆盖(#295。male、female、all 三个频道当天共用一个文件名,跑完第二个就把第一个盖掉。文件名加上频道,非法的 --channel 直接报错退出。

  • 重新部署不再认错平台(#297。story-setup 判断 OpenClaw 的依据之一是 skill 带没带 metadata.openclaw,可 13 个 skill 全都带,而 OpenClaw、Reasonix、通用三条路径部署出来的 skills/ 长得一模一样。等于拿自己部署的东西当判据,把 Reasonix 和通用项目统统认成 OpenClaw。Reasonix 那头恰好相反:判据找的几个文件,它的部署压根不生成,已经装好的项目反而认不出来。现在三端各按自己 AGENTS.md 的标题行区分,这是唯一互不重叠的标记;已部署的项目还会优先读 .story-deployed 里记着的 target_cli,不再每次重新猜。

  • 多端部署不再每次开会话喊缺文件(#299。多端的 references_dir 是用逗号连起来的几条路径,会话起点却当成一条路径去找,于是装得好好的项目每次都被告知资料包缺失,真缺了哪条反而看不出来。改成逐条查,只报确实缺的那条。

  • Windows 上文风统计不再必挂(#300。这一步会先找可用的 Python,找到的可能是 Windows 原生版本,而样本路径写的是 /tmp/...。原生 Python 把它当成 C:\tmp\...,和 Git Bash 写文件的地方不是一处,自然就找不到。改成项目内的相对路径。同一处原先要求全程追加写,重跑时上一轮的样本会留在文件里,统计出来的是两轮混在一起的结果;现在第一段覆盖写。

  • 目录不再被当成章节(#301。不少原文开头带一份目录,里面的「第N章」和正文里的一样顶格,建章节边界表时每一章会被数两遍。这张表是后面几个阶段唯一的切分依据,错一次会一路错下去。现在按行距把开头的目录整块剔掉:目录里相邻两条只隔一两行,正文章节之间隔着整章的篇幅。落表前还会检查章号连不连得上。多卷书每卷都从第一章重起是正常写法,这种重复不会被自动合并。

  • 审查的两份评分标准重新对齐(#307。story-review 有一份内置标准,读不到文件时用;另有一份 quality-rubric.md。两边各自长歪了:文件那份多「任务卡点」,内置那份多「标点节奏」和「具体字数表达校验」,还有三个维度叫法不一样。方向也别扭,读得到文件时用的反而是少两条的旧版。现在补齐成同样 18 项,并加了断言,再分叉会被 CI 拦下。

维护

  • 补上 tracking_commit.pycontext 字段说明:init 收六项,commit 只收四项,recent_chaptersnext_chapter_commitments 提交时由工具自己算。以前只能从示例里猜,照 init 的样子写 commit 会被直接拒掉(#306)。
  • OpenCode 的 agent 模型要在覆盖前先缓存,这句话原本写在后面的小节里,照顺序执行就晚了。在覆盖那一步就地加了提示(#298)。
  • format-and-structure.md 标题写「5 条绝对禁止」,底下列了 8 条,三份副本一起改(#306)。

v0.7.3 — 长篇追踪改单一权威事务模型

Choose a tag to compare

@worldwonderer worldwonderer released this 06 Aug 02:33
0d81366

长篇追踪改单一权威事务模型:追踪/_tracking-state.json 是唯一结构化状态,所有追踪写入走 tracking_commit.py,续写状态卡与伏笔/时间线/角色快照都是工具整份生成的派生视图,日更每章必读从五个文件收缩到三项。Dashboard 目录树改按需加载;章节概要改叙事化、原文引用改精选。v0.7.2 及更早的长篇项目必须先迁移 追踪/ 才能继续写,见下方升级须知。本版 agents_version 为 22(v0.7.2 发的是 21),已部署项目需重新运行 /story-setup 并新开会话。

升级须知(长篇在写项目必读)

重跑 /story-setup 后,检查每本书是否有 追踪/_tracking-state.json。没有就是旧追踪结构:日更会停下,OpenCode / ZCode / Codex 上写正文会被 hook 拦。

迁移不需要重跑全书拆解,正文、设定/大纲/拆文库/ 都不受影响,只重建 追踪/:走 /story-import 的「旧追踪项目迁移」——数出最后完整章号 N,从旧追踪文件与最近几章正文反推当前状态,构造 last_chapter=N 的初始化事务跑一次 init。旧结构会被按原样整体移入 追踪/_旧追踪存档/,不删除、不参与解析。完整说明见 skills/story-setup/UPGRADING.md

新增

  • Dashboard 按需加载目录树(#273:目录树改为展开时才拉取子节点,大工程首屏不再一次性扫全树;顺带修短篇标准工程识别与懒加载回归,搜索读取失败改为显式标记而不是静默吞掉。

修复

  • 长篇追踪改单一权威事务模型(#269 #290 #289追踪/上下文.md 成为固定 7 栏、硬上限 12288 字节的续写状态卡,每章由工具整份重建;全书历史移到 追踪/逐章记录/第NNN章.md(日更不读);伏笔、时间线双视图、角色快照降为派生视图,检索走 story-explorer 按需查询。日更每章必读从五个文件收缩为三项,读取成本 O(N²)→O(N)。narrative-writer 不再写 追踪//story-review 新增追踪文件维护;SessionStart 加状态卡体积告警,四端同步。旧结构与 _tracking-meta.json时间线/事件库.json 一并退役,不提供兼容层。
  • 修上条留下的主流程断链(发版前主流程审查,逐条实测复现):
    • 回炉备份被守卫打死——守卫把「文件不存在」当成「首建新章」,于是 workflow-revision 规定的 正文/第X章_..._原稿_{日期}.md 备份必然撞上顺序校验,报「首建第5章前必须先提交第4章事务」,而回炉章号恒小于已提交章号,无解。章号已在追踪范围内时跳过顺序校验,跳章写作仍拦。
    • 旧项目没有迁移路径——日更让去 story-importstory-import 看到 .active-book 就答「别重跑、回去日更」,用户在两条命令之间来回弹。判据改用 _tracking-state.json 是否存在,并给出只重建 追踪/ 的迁移步骤;UPGRADING.md 此前全文没提过本次追踪变更,补了完整一节。
    • 恢复指令不收敛——「任何失败都重跑同一 commit」只对写入失败成立;校验失败重跑结果不变,派生视图被改后重跑会撞 stale 而工具无 rebuild 子命令。按失败类型分开写,补上 mode=revision 整份重建这条实测可行的出路。check 失败时只往 stderr 打 ERROR、不输出 JSON,所以当前修订号改为直接读 _tracking-state.jsonstate_revision
    • story-explorerconsistency-checker 被要求运行 tracking_commit.py check,但这两个只读 agent 按设计禁 Bash。改为消费调用方在主会话跑 check 后传入的值,权限边界不动,也不把随章数增长的完整 state 读进 prompt。
    • 部署的 story-narrative 规则教 agent 手写 逐章记录/上下文.md 与伏笔「真实答案」,与同目录 story-consistency 规则正面冲突,且改设定就会触发;伏笔.md 是派生视图、没有该列,手写即让 check 报不一致。改成登记进事务。
    • Claude Code 的 bash 守卫与 JS 核在 拆文库/ 豁免上漂移,同步收紧;欠账门取「上一章」用 readdir 原始顺序,回炉备份放行后会在哈希序文件系统上挑中未清洗的备份,四端统一排除并排序。
    • 五份平台 AGENTS 模板与三份 narrative-writer 仍把 追踪/ 描述成含「时间线事件库」,而该文件是工具退役黑名单,建出来会让 commit/check 永久失败。
    • 守卫层:只读 agent 的 Bash 检测式只认「执行 `cmd`」,「运行 / 跑」完全绕过——上条的越权指令正是这样溜过全套 CI 的;正则补齐并按行豁免委派句式。一条断言禁止 story-import 描述旧追踪迁移,与本版行为相反,改为钉「迁移必须走存档重建」。回炉放行分支补了 parity 回归用例。
  • 章节概要改叙事化、原文引用改精选(#275 #276:概要不再要求用「因为…所以…」串联,改为按时序讲清事件、原因、结果,优先保留改变走向的动作与结果、反常信息、跨章伏笔线索。原文引用只留关键转折、关键台词、写法样本,每章至多 8 条——实测引用占章节摘要 45.5%,而下游 Stage 3 事实溯源回原文、Stage 6 文风锚点从原文切片,均不消费逐节点引用。并行 chapter-extractor 与串行两条路径的要求收敛到一份模板。
  • Dashboard 隔离项目与拆文库节点预算(#268:两类目录不再共用同一份节点预算。此前超大项目先扫描耗尽预算后,拆文库即使真实存在也返回空数组,界面把「预算被另一类耗尽」显示成「拆文库为空」。现在各自持有扫描状态与预算,任一类触顶只截断自身。
  • 短篇导入与篇幅分流(#285 #286 #287 #288:story-import 调用短篇拆解管道时不再声称对方「无停靠点」——它的 Phase 1 有字数路由和续跑三选一两个提问点,现改为四个 Step 逐条给导入场景取值,题材识别照跑(genre_detected 是阻断级必填)。篇幅分流补字数上界,此前「无章节分隔即短篇」不看字数,十万字裸文本会被建成单文件短篇工程。选题决策.md 补自动发现(写作与拆文此前都只看项目根,回填功能长期空转)。story-setup 加参考目录自检,检出 Windows 下 npx skills add 偶发的部分安装。

维护

  • 参考资料解析顺序补 .agents/skills(Codex / Reasonix 实际扫描的 skill root),末层改写成「当前运行时加载本 skill 的目录」;story-setup Phase 2 写明部署幂等(#282)。
  • README / README_EN 补方式一的升级说明与 Windows 部分安装的表现和修复方式。

v0.7.2 — agents_version 21 修复重新部署

Choose a tag to compare

@worldwonderer worldwonderer released this 28 Jul 14:50
06ee854

升级须知(本版必读)

本版把 agents_version 发到 21。 v0.7.1 发出去的是 20,因此 v0.7.1 的正文改动与本版的 hook 修复,都要通过这次升级 + 重新部署才会真正生效。

npx skills add zenstory-ai/oh-story-claudecode -y -g

然后在写作项目根目录重跑 /story-setup,并新开一个会话(专业 agent 只在会话启动时注册)。三步缺一,项目里跑的仍是旧模板。

如果你此前是直接跟 main 安装的,.story-deployed 里可能已经是 agents_version: 21。这种情况下会话起点不会提示你重新部署,请手动重跑一次 /story-setup


新增

本地写作工作台 /story dashboard(Codex 为 $story dashboard

从当前工作区启动一个零生产依赖的本地 Web UI,分开展示 拆文库/ 与长短篇写作项目的文件树,支持文件名搜索、Markdown 安全预览、白名单文本轻量编辑、快捷保存、确认删除和 mtime 冲突保护。服务只绑定 127.0.0.1,小说内容不上传;路径规范化、真实路径校验与 2 MiB 上限防止越界读写。

真实 demo 驱动的浏览器测试

拆文与写作 demo 资产整理到 demo/拆文库/{书名}/demo/长篇/{书名}/;Node API 回归与 Playwright 桌面/移动 E2E 都复制这批真实产物执行,不再另造与实际产物脱节的 fixture。

修复

治细纲形状被正文照抄导致的生硬与章尾总结体(#255

细纲每个字段都是摘要原语,弱模型 1:1 渲染成一句一段,就是电报体和逐拍交代的来源。本次给 writing-craft 补「从细纲到正文」护栏——细纲是「要发生什么」的内容规格,不规定正文形状,正文可以合并、穿插、重排情节点,把每个点演成场景而不是照抄概括语;开头补 anti-fingerprint;story-review 加同质化判断。

细纲模板的「结尾 / 结尾设定」也从「收束到什么状态」改问「最后落在谁的什么动作、画面或台词上」。依据是真人语料实测:长篇章末句里对话收尾约 29%、动作或画面约 26%,明确的状态总结只占约 1%——真实章节大多停在一个具体动作上,并不做收束。部署 hook 的毒句式欠账门同步新增 trailer-summary 规则(文末 600 字窗口,四端同步)。

仓库质量门禁不再掩盖破坏性失败(#265

修 Dashboard、hook、adapter 与 contract 校验链路上的 fail-open 守卫、丢写竞态、扫榜部分失败上报不全与测试盲区。Dashboard 保存由 mtime 乐观并发改为版本校验并收进串行化写队列(同秒并发写会互相覆盖已接受的稿件);扫榜单平台失败不再中止整轮,保留可用的部分结果并如实标注采集质量。

会话起点两处长期误报(#173

  • 拆文库/ 的「未完成拆文」提醒改按 _progress.md 的「最终状态」取值过滤,completed / completed_with_errors 不再计入。原实现裸数文件,拆完的书每次会话都被报一次。取值只认冒号后的状态本身,模板占位符与「pending(上次 completed 后重跑)」这类括注一律按未完成处理,宁可多报不漏报。
  • 被动版本更新提醒改为按 24h 节流提示本身。原实现只节流网络请求,缓存里有版本号时同一个版本每开一次会话就提醒一次。取不到 GitHub 时写入负缓存,网络受限的环境不再每次会话空等 5 秒。
  • /story 路由表补上 story-review——此前 13 个 skill 里唯独审查没有路由行,「一个口子进」对审查不成立。

维护

  • README / README_EN 聚焦当前用户路径,修正知乎盐言的英文拼写(#264#266)。

完整变更见 CHANGELOG.md

v0.7.1 — 电报体治理 · 命名护栏 · Reasonix 适配

Choose a tag to compare

@worldwonderer worldwonderer released this 24 Jul 16:18
e8c523f

正文「电报体」彻底治理——写入端做减法 + story-deslop 去抵抗 + 全套短句崇拜清扫(语料 + 五题材实测双证);补同人 / 既有世界观命名护栏;Reasonix skills-only 适配 + 开书对标发现。

修复

  • 正文电报体彻底修(#256,续 #254#254 立了逗号流水句基线仍不彻底——报告人指出跑 /story-deslop 时模型把连续短句当「刻意节奏」而抗拒去电报体。本次三层做减法:
    • 写入端:删「短句=果决热血 / 情绪密度高」奖励、开头事件密度的电报体范例(改逗号流水);narrative-writer「心理外化 / Gate C / 情绪词默认外化」由绝对化改为设上限(模板 + opencode/codex 经 sync 脚本重生成,短篇题材包例外原样保留)。
    • story-deslop 去抵抗:anti-ai-writing 规则 3 删掉「连续短句只在三场合连用」的许可,只留「默认逗号长句 + 短句是偶尔的孤立重拍」;模式 9 峰值保护保留;修 story-review 评分表 / style-craft / style-profile 等下游镜像里矛盾的「连用短句」「句长拆短」残留。
    • 全套短句崇拜清扫:39 文件普查、逐处判定,清「短句为主 / 多采用短句 / 短句占比 >70% / 见长就拆」等残留;示例句 after 由电报体改逗号长句,黑岩「一句一段」模板换成真实黑岩语料,短篇加整句上限修「盐言被拉成 130 字流水句」的过矫。
    • 证据:mongo 爆款语料实测叙述逗句比 1.2–1.74、连续短句 run 仅占 1.7–4.3%;codewhale + DeepSeek-V4-Pro 五题材实测旧规则全崩电报体、新规则全流畅 0 电报 run,且战斗峰值 / 情感克制 / 沙雕 deadpan 不退步。

新增

  • 同人 / 既有世界观命名护栏(#257:character-basics 主角 / 配角卡、genre-catalog 同人流派、plot-special-topics 同人写作要点补命名一致性约束——原著角色沿用官方本名 / 译名,新角色贴合原著对应地域 / 文化的命名与译名风格,同一地域不混语系,不套用与设定不符的现代化 / 政治化名字(设定相对,现代设定同人不受限)。低成本兜底降低时代错位取名概率,非确定性修复。
  • Reasonix skills-only 适配 + 开书对标发现(#253,Closes #252:新增 target_cli=reasonix(复制 skills + .agents/skills symlink + Reasonix AGENTS.md,无 hooks/agents 走 solo/direct);开书阶段新增「对标发现」主动扫 拆文库/ 按题材推荐对标书(长篇 Phase 1 / 短篇 Phase 2)+ 卷纲提醒。

内部 / 语料治理

  • 正文句长基线(#254:anti-ai-writing 规则 3 重写为「句长基线(短是工具,不是底色)」+ 语料校准注(qimao 125 本×前 8 章:逗号间 8.8–9.6 字、整句 22–24 字、逗号流水占叙述 74–80%);banned-words 缓缓 / 微微 / 轻轻 / 淡淡 降为二级密度控制;清除各处「见长就拆 / 机械长短交替」配方。agents_version 升至 20

升级

  • 已部署项目重跑 /story-setup 刷新 references / agents 并新开会话agents_version 20 已含 #254 + #256 的写作规则变更。

v0.7.0 — 六端 parity · 剧情单元统一 · 去 AI 味机器化

Choose a tag to compare

@worldwonderer worldwonderer released this 16 Jul 16:36
964d6bf

v0.7.0

多端适配再扩两家(ZCode / Reasonix)· hook 核统一到共享 node 核 + 六端 parity 锁 · 长篇「剧情单元」概念统一并接入拆书产物 · 去 AI 味闸口机器化 · 契约体检与脚本加固。

从 v0.6.22 升级:重新运行一次 /story-setup(Codex 用 $story-setup)并新开会话即到位。

新增

  • ZCode 3.3.4 原生适配(#234,closes #211:仓库可作 marketplace/plugin 安装,暴露 13 个 Skills、13 个 Commands 与严格 JSON Hooks;story-setup 支持 target_cli=zcode,安全合并 .zcode/config.json 与根 AGENTS.md。无第三方依赖的 Node hook runner 覆盖上下文/连续性恢复、大纲守卫、commit advisory、正文轻量确定性网。ZCode 不执行项目/plugin custom agents,涉及专业 Agent 的流程明确降级 solo/direct。
  • Reasonix 原生支持 Phase 1(#238,closes #204:根 reasonix-plugin.json plugin manifest(version 钉住 skills/story/VERSION)+ README 安装说明;扫描 .agents/skills 发现 13 个 skill。项目级部署与 hooks 留待后续。
  • 短篇题材风格包按平台语料重建(#231:题材风格包 4 → 10 个(新增世情打脸、民俗怪谈、悬疑、甜宠、双男主、沙雕脑洞),按七猫/知乎/黑岩/点众四平台真实语料重建,修正世情题材误路由。

改进

  • 长篇「剧情单元」概念统一并接入拆书产物(#246:五个混用叫法统一为「剧情单元」,拆书剧情单元接入卷纲/细纲(对标剧情参照、一批=一个剧情单元、剧情单元清单索引);旧版卷纲/细纲/拆文库不阻塞、按结构回退读取。
  • 读者契约 + 终局储备推进模型(#237:替代原「成长预算」,放开单章爽感,治长篇后期无可写;Σ 字数预算契约不变。
  • 去 AI 味闸口机器化(无状态,#246:写后正文网自动扫描确定性毒句式(「不是 A 而是 B」全家族、声线反差、否定排比、预告收尾)并推回命中;写下一章前新增「毒句式欠账门」(判据现算自文件、不落状态、node 缺失放行,可用 <!-- 去味:跳过 --> 显式豁免)。四端共享判定,js↔py 逐字 parity。

重构

  • hook 核统一到共享 node 核 + parity 锁(#239 / #243:OpenCode/ZCode/Claude 收敛到同一份 story_hook_core.js,Codex 保留 python 实现由逐字 parity 锁钉住;补 node 缺失/损坏 fail-open 回归。
  • 技能契约体检 + fail-fast(#242:版本锚点/Phase/schema/主产物路径/细纲必填项固化成 CI 契约,agents_version 成为运行时过期判定唯一权威;对标主产物缺失改 fail-fast。
  • 仓库脚本加固(#233:同步检查改只读+写安全,适配器生成器原子发布+回滚,新增四端真实 CLI 安装兼容 workflow。

修复

  • Codex hook 空白 .active-book 首行当仓库根(#235:对齐 bash oracle。

其他

  • 去掉部署检查的文档措辞门禁(#240:保留 agents_version 阈值等行为锚点。

部署提示:本版含 hooks / agent 模板 / 项目规则模板行为变更。.story-deployedagents_version 本周期从 17 连续升到 19,已部署项目重新运行 /story-setup 并新开会话即到位。

v0.6.22 — 长篇题材提示卡 · 短篇投稿层 · 文档瘦身

Choose a tag to compare

@worldwonderer worldwonderer released this 10 Jul 14:21
464074f

长篇题材正文提示卡 + 短篇投稿层 + 全套件文档瘦身(#226 / #227 / #228

新增

  • 题材正文提示卡(#226,合并 #222/#223/#224story-long-write 新增 genre-prose-cards/ 32 张番茄题材腔调卡 + 索引召回规范;写作时按 设定/题材定位.md 匹配召回单卡进写手,anti-leak 硬约束保证卡名/题材标签/置信度/条目/合规自评一律不进正文;narrative-writer 三端模板同步接入召回与按题材细化的文风指纹/Gate G 规则,chapter-extractor 模板新增 chapter_formula 逐章写法公式产物。
  • 短篇投稿层(#227story-short-write 新增 submission-craft.md——知乎盐选/小程序/番茄三路平台基调矩阵(视角、矛盾演进、章末钩子、结局质感)、导语门面单独打磨(四维骨架+黄金三角,150-220 字)、付费点卡脖子断点与反推法排细纲;story-short-analyze 拆解时顺带记录投稿层进拆文报告。合并前盲评 A/B 四维全胜(register +0.55、structure +0.58)。
  • deslop 任务卡点与比喻密度(#218:任务卡点只在改变信息/情绪/关系/代价/选择压力/伏笔/钩子承接时使用;新增 metaphor-density-tic advisory(像/仿佛/如同高密度堆叠检测);朱雀定位为辅助信号,去 AI 味不越剧情边界。
  • generic Web AI 部署(#216:story-setup 新增 target_cli=generic 文件模式(复制 skills/ + 通用 AGENTS.md,不声明平台原生 hooks/custom agents);story-long-write 补通用环境 solo/direct fallback。

改进

  • 长篇工作流防失控(#225:裸调用 story-long-write 不再自动进入正文/日更模式;开书流程默认停在大纲;日更批量有界;narrative-writer 只扩写细纲计划内情节点,不足时返回 outline_underfilled 欠账报告交主会话补纲;理顺 setup → import → long-write 的续写工程顺序。
  • 全套件文档瘦身(#228:13 个 skill 系统审计后删除可证行为不变的冗余——逐字/同义重复、过期目录、失效行号锚、维护性注释、跨体裁死段、悬空指针,53 文件净 −32.9KB;同名副本组全部字节同步;Σ 字数预算契约、anti-leak、hook 锚点零触碰。
  • deslop 防检测器博弈(#220 / #221:吸收社区反 AI 思路但不做讨好检测器的硬规则;新增 action-list-tic advisory(监控镜头式动作链);外部检测器明确为自检参考、不替代人工通读;恢复朱雀 AIGC 检测 CLI 致谢。

发布准备

  • 版本号升级到 0.6.22.claude-plugin/marketplace.json + skills/story/VERSION)。.story-deployedagents_version 升级到 17setup_skill_version 升级到 1.2.6;本版含 narrative-writer / chapter-extractor 部署模板更新(题材卡召回 + anti-leak + 大纲边界与 chapter_formula),已部署项目需重新运行 /story-setup 并新开会话获取。UPGRADING.md 新增 v17 条目,README / README_EN 版本说明收敛为最近 3 版(更早见 CHANGELOG)。

v0.6.21 — 短篇专属参考栈

Choose a tag to compare

@worldwonderer worldwonderer released this 29 Jun 02:18
e3cb892

短篇写作参考栈瘦身:删掉长篇继承残留,建立短篇专属 format/craft/deslop/题材包体系(#206

改进

  • 短篇写作 references 清理(#206story-short-write 删除 13 个长篇继承残留参考(角色、长篇结构、通用题材读者、开篇、状态追踪等),避免短篇写作继续被长篇规则误导。新增短篇专属基础层:short-format.md(硬格式/段落/标点/正文契约)、short-craft.md(短篇叙事姿态、情绪直给+体感焊接、三维度揉进、密度控制)、short-deslop.md(短篇去 AI 味,只杀真 AI 腔,不杀情绪烈度)。
  • 题材包接管短篇风格(#206:新增 genre-styles/追妻火葬场.md复仇打脸.md总裁豪门.md宅斗宫斗.md 四个短篇题材包,把开头模式、爽点密度、对话风格、情绪模式、结尾模式收束到题材本地;冷门题材仍可降级读取 genre-writing-formulas.md
  • 短篇/拆文 AI 规则边界显式化(#206:共享 output-contract.md 明确拆文报告质量门仍走 story-short-analyze/references/anti-ai-writing.md,短篇成稿去 AI 味走 story-short-write/references/short-deslop.md,避免两套规则继续靠“本地 AI 腔规则文件”这种隐式短语耦合。
  • 部署模板同步短篇例外(#206story-setup 的 narrative-writer Claude/OpenCode/Codex 模板同步短篇题材包例外:短篇需要“情绪词 + 体感/动作焊住”时不强制改成纯动作外化,只清理空泛无体感的 AI 情绪总结。

发布准备

  • 版本号升级到 0.6.21.claude-plugin/marketplace.json + skills/story/VERSION)。.story-deployedagents_version 升级到 16setup_skill_version 升级到 1.2.5;本版含 deployed narrative-writer 模板与 reference bundle 更新,已部署项目需重新运行 /story-setup 并新开会话获取。UPGRADING.md 新增 v16 条目,README / README_EN 更新 v0.6.21 版本说明。