Bläddra i källkod

Merge pull request #112 from lingfengQAQ/docs/v7-discussion-feedback

docs: v7 设计讨论纪要 + 对 Story Repo 规格 0.4 的差异意见
聆风 1 vecka sedan
förälder
incheckning
16f4f3dc02

+ 4 - 1
docs/README.md

@@ -7,9 +7,12 @@
 ### 架构
 
 - [`architecture/overview.md`](./architecture/overview.md):系统架构、Agent 分工、Story System 设计
+- [`architecture/story-repo-spec-2026-06-10.md`](./architecture/story-repo-spec-2026-06-10.md):v7 story repo 格式规格(法律文本,0.5 冻结)
+- [`architecture/v7-design-discussion-notes-2026-06-11.md`](./architecture/v7-design-discussion-notes-2026-06-11.md):v7 设计讨论纪要(v6 病根诊断、问题空间、多平台调研)
+- [`architecture/story-repo-spec-feedback-2026-06-11.md`](./architecture/story-repo-spec-feedback-2026-06-11.md):另一线对 story repo spec 0.4 的差异意见(已在 0.5 吸收)
 - [`architecture/plugin-runtime-hardening-spec-2026-06-04.md`](./architecture/plugin-runtime-hardening-spec-2026-06-04.md):基于优秀 Claude Code 插件调研的运行时可靠性重构 spec
 - [`architecture/plugin-runtime-hardening-plan-2026-06-04.md`](./architecture/plugin-runtime-hardening-plan-2026-06-04.md):运行时可靠性重构实施计划、修改范围与影响分析
-- [`architecture/multi-agent-adaptation-spec-2026-06-05.md`](./architecture/multi-agent-adaptation-spec-2026-06-05.md):基于 v6.1.0 现状的多宿主与多智能体适配 spec
+- [`architecture/multi-agent-adaptation-spec-2026-06-05.md`](./architecture/multi-agent-adaptation-spec-2026-06-05.md):多宿主与多智能体适配 spec(v3,已反转到 v7 story repo 基线)
 - [`architecture/context-minimal-writing-flow-plan-2026-06-05.md`](./architecture/context-minimal-writing-flow-plan-2026-06-05.md):Skills / Agents / References 上下文减负、读取方式与 token 优化重构计划(v3)
 - [`archive/architecture/current-system-diagnosis.md`](./archive/architecture/current-system-diagnosis.md):历史系统状态诊断
 

+ 158 - 699
docs/architecture/multi-agent-adaptation-spec-2026-06-05.md

@@ -1,121 +1,56 @@
 # Webnovel Writer 多宿主与多智能体适配 Spec
 
-> 日期:2026-06-05
-> 状态:草案 v2
-> 基线:`master` 当前插件形态,`.claude-plugin/plugin.json` 与 marketplace 版本为 `6.1.0`
-> 来源:基于 PR #110 的 review 结论重写,修正过期的 7 Skill / hooks / doctor / runtime 状态描述
-> 定位:把 Webnovel Writer 在不破坏 Claude Code 现有体验的前提下,演进为可验证、可生成、可降级的多宿主写作插件
+> 日期:2026-06-05(v3 修订:2026-06-11;v3.1:同日,hook 语义 deny → ask,依据 #113,见 §5.5)
+> 状态:草案 v3.1
+> 基线:**v7 story repo**(`story-repo-spec-2026-06-10.md` 0.5 冻结稿)。v2 的基线是 v6.1.0 Python runtime,该架构已被 v7 推翻;本版继承 v2 的元层纪律,重写全部基座层。
+> 来源:v2(基于 PR #110 review 重写)+ 2026-06 多平台调研核验 + `story-repo-spec-feedback-2026-06-11.md` §二.3
+> 定位:把 v7 的格式层(story repo)原封不动地暴露给多个 agent 宿主——格式平台无关,本 spec 只管入口怎么落、角色怎么生成、安装怎么零门槛、支持等级怎么诚实。
 
 ---
 
-## 1. 背景
+## 1. 相对 v2 的处置(审计表)
 
-PR #110 的方向是对的:Webnovel Writer 不应该永远只被 Claude Code 的表达方式绑定。它已经有完整的写作运行时、Story System、RAG、Dashboard、Agent 分工和发布校验,下一步可以考虑多宿主适配。
-
-但 PR #110 的原始 spec 使用了旧基线:
-
-- 只列出 7 个 Skill,漏掉 `/webnovel-doctor`。
-- 把 hooks 描述为“当前未形成 bootstrap”,但当前主干已经有 `hooks/hooks.json`、`session_start.py` 和 `guard_runtime_write.py`。
-- 没有把 `project-status`、`doctor`、`write-gate`、`projections retry/replay`、`.webnovel/projection_log.jsonl` 纳入最终形态。
-- 新增文档放在 `docs/superpowers/specs/`,但当前 `superpowers` 已归档到 `docs/archive/superpowers/`。
-
-因此,本 spec 以当前 `v6.1.0` 运行时为基线重新定义多宿主适配方案。
+| v2 内容 | 处置 | 说明 |
+|---|---|---|
+| §5.4 不相信手写矩阵 / `support.md` 纪律 | **继承** | 官方链接 + 核验日期 + smoke 命令,原样保留(§7) |
+| §12.1 adapter registry 分级 | **继承并具体化** | 分级标准定为:一级亲测 / 二级社区反馈 / 三级理论可用(§7.1) |
+| §12.3 生成器 + §13.3 drift check | **继承** | 单源生成多宿主壳,提交物必须过 drift check(§6.3、§9) |
+| §9.3 降级诚实条款 | **继承** | 不允许声称调用了不存在的 subagent(§5.4) |
+| §5.5 UTF-8 First | **继承,换 Node 口径** | 脚本统一 Node,默认 UTF-8;CI 保留 Windows 中文路径全链路(§5.6) |
+| §5.1 "Runtime 是唯一业务真源" | **反转** | 真源是 story repo(markdown + git),脚本只是确定性工具层(§5.1) |
+| §8.3 写章硬要求(write-gate/chapter-commit/projection) | **删除** | 随 v6 架构作废;v7 的跨宿主硬要求只剩一条:事实变更必须经事务 commit(§5.1) |
+| §2 当前基线(8 Skill / 4 Agent / hooks / runtime CLI / doctor / Dashboard) | **删除** | 全部是 v6 形态;v7 是单入口状态机 + Node 脚本 |
+| §11 doctor / project-status 双状态入口 | **删除** | v7 状态入口 = 盘面状态机(story repo spec §10),解析失败走修复卡,不需要平行的 doctor 体系 |
 
 ---
 
-## 2. 当前真实基线
+## 2. 当前真实基线(2026-06 核验)
 
-### 2.1 Claude Code 插件结构
+### 2.1 SKILL.md 已是开放标准
 
-当前插件根为 `webnovel-writer/`,符合官方 `plugin-dev` 对 Claude Code 插件结构的要求:
+Anthropic 2025-12 开放 SKILL.md 规范后,Codex、Gemini CLI、Cursor、Copilot、Windsurf 等 30+ 工具支持,发现路径为 `.claude|.codex|.cursor|.gemini/skills/`。**skills 层零适配,拷目录即用**。
 
-```text
-webnovel-writer/
-├── .claude-plugin/
-│   └── plugin.json
-├── agents/
-│   ├── context-agent.md
-│   ├── data-agent.md
-│   ├── deconstruction-agent.md
-│   └── reviewer.md
-├── skills/
-│   ├── webnovel-init/
-│   ├── webnovel-plan/
-│   ├── webnovel-write/
-│   ├── webnovel-review/
-│   ├── webnovel-query/
-│   ├── webnovel-learn/
-│   ├── webnovel-dashboard/
-│   └── webnovel-doctor/
-├── hooks/
-│   ├── hooks.json
-│   ├── session_start.py
-│   └── guard_runtime_write.py
-├── scripts/
-├── references/
-├── templates/
-├── genres/
-└── dashboard/
-```
+约束:Codex 对 skill 列表有约 8k 字符预算,`description` 必须精简。
 
-### 2.2 当前 8 个 Skill
+### 2.2 Subagent 三大平台都有,但无标准
 
-| Skill | 当前职责 | 多宿主适配时的地位 |
+| 平台 | 格式 | 状态 |
 |---|---|---|
-| `/webnovel-init` | 初始化新书项目 | 保留为项目创建入口 |
-| `/webnovel-plan` | 规划卷纲、章纲、运行时合同 | 保留为规划入口 |
-| `/webnovel-write` | 写章主链,调用 gate、agent、commit、projection | 多宿主适配的最高优先级主流程 |
-| `/webnovel-review` | 审查章节范围 | 保留为可独立调用的质量入口 |
-| `/webnovel-query` | 只读查询项目状态、设定和记忆 | 保留为跨宿主只读查询入口 |
-| `/webnovel-learn` | 追加项目经验记忆 | 保留为受控写入入口 |
-| `/webnovel-dashboard` | 启动只读 Dashboard | 保留 Claude Code 主路径,其他宿主可降级为 CLI 提示 |
-| `/webnovel-doctor` | 阶段感知体检目录、文件、DB、RAG、依赖 | 必须纳入所有宿主的安装后自检路径 |
-
-### 2.3 当前 4 个 Agent
-
-| 当前文件 | 当前职责 | 目标规范名 |
-|---|---|---|
-| `context-agent.md` | 写前上下文与任务书组装 | `webnovel-context-agent` |
-| `reviewer.md` | 多维审查与 blocking issue 输出 | `webnovel-reviewer` |
-| `data-agent.md` | 提取 commit artifacts,不直接写 projection | `webnovel-data-agent` |
-| `deconstruction-agent.md` | 拆解参考书和结构学习 | `webnovel-deconstruction-agent` |
-
-当前文件名不能直接删除或重命名,因为现有 Skill 文案和用户习惯可能仍引用旧名。目标规范名必须通过兼容迁移引入。
-
-### 2.4 当前 Runtime CLI
+| Claude Code | markdown + frontmatter(`agents/`) | 稳定 |
+| Gemini CLI | markdown + frontmatter(路径不同) | 可用 |
+| Codex | TOML | experimental |
 
-所有确定性动作已经统一从 `scripts/webnovel.py` 进入。多宿主适配必须复用这些 runtime 命令,不为每个宿主重写一套业务逻辑。
-
-关键命令:
-
-| 命令 | 作用 |
-|---|---|
-| `preflight` | 快速环境与项目根检查 |
-| `project-status` | 机器可读短状态、phase、下一步 |
-| `doctor` | 阶段感知项目体检与修复建议 |
-| `write-gate` | 写前、提交前、提交后三个自然边界校验 |
-| `story-system` | Story System 合同与运行时数据 |
-| `chapter-commit` | 章节事实提交,驱动 projection |
-| `projections retry/replay` | 基于已有 commit 补跑或重放投影 |
-| `status` | 旧宏观创作健康报告,保持原语义 |
+结论:角色定义**单源 markdown,构建时生成三平台壳**;格式三家三样,手维护必漂移。
 
-### 2.5 当前 Hook
+### 2.3 Hook 只有 Claude Code 完整
 
-当前已经存在 Claude Code 插件级 hooks:
+核心流程必须显式调脚本;hook 只能是 Claude Code 上的自动兜底,不能承载任何关键能力。
 
-- `SessionStart`:只运行 `project-status --format summary`,给新会话提供短状态。
-- `PreToolUse`:对直接写 `.story-system/commits/`、`.webnovel/state.json`、`index.db`、`vectors.db`、`memory_scratchpad.json`、`projection_log.jsonl` 等危险路径做兜底阻断。
+### 2.4 弱模型现实
 
-hook 是轻量守卫,不是业务状态机
+Codex 跑 GPT、Cursor 什么模型都有。"流程薄 + 脚本确定性"不是优雅偏好,是跨宿主正确性的必需——能数的绝不让模型估(story repo spec 不变量 6 在弱模型下更硬)。
 
-### 2.6 当前验证能力
-
-当前已有两类基础验证:
-
-- `scripts/validate_plugin_package.py`:按官方 `plugin-dev` 思路检查 manifest、Skill / Agent frontmatter、hooks wrapper、README 版本、路径可移植性。
-- `scripts/run_behavior_evals.py` + `evals/fixtures/behavior/fast.json`:检查 8 个 Skill 的关键行为契约、Agent 边界、commit/projection、Dashboard 只读语义。
-
-多宿主适配必须扩展这两类验证,而不是新造一套互不相干的检查。
+以上每条在实现对应宿主前必须按 §7.2 重新核验,本节不是免检通行证。
 
 ---
 
@@ -123,686 +58,210 @@ hook 是轻量守卫,不是业务状态机。
 
 ### 3.1 一句话目标
 
-把 Webnovel Writer 从“Claude Code 单宿主插件”升级为:
-
-> 以现有 Python runtime 和 Story System 为唯一业务核心,向多个宿主生成轻量 adapter 的长篇写作插件。
+> 以 story repo(markdown + git)为唯一真源,向多个宿主分发同一套 SKILL.md 入口、生成各平台角色壳、用 npx 一键安装的长篇写作系统。
 
 ### 3.2 具体目标
 
-1. 保留 Claude Code 现有安装、Skill、Agent、hook 和 CLI 体验。
-2. 让 Codex、Cursor、Gemini CLI、OpenCode、GitHub Copilot CLI 等宿主可以通过 adapter 消费同一套写作能力。
-3. 所有宿主都复用 `scripts/webnovel.py` 和 `data_modules`,不复制 Story System、commit、projection、doctor、gate 逻辑。
-4. 每个宿主的支持状态必须可验证,有 manifest 校验、smoke 测试和行为 eval。
-5. 当宿主不支持 subagent 或 hook 时,有明确降级模式,不假装已经调用了不存在的能力。
-6. 所有新增插件组件继续符合官方 `plugin-dev` 的结构、frontmatter、hooks、路径和验证要求。
-
----
+1. 状态机单入口落成标准 SKILL.md,在所有支持 SKILL.md 的宿主上可发现、可执行。
+2. 角色(三镜头评审等)单源定义,构建时生成 Claude / Gemini / Codex 三平台壳。
+3. 所有宿主复用同一套 Node 脚本(机检、settle、盘面、体检),零业务逻辑复制。
+4. `npx` 安装器一条命令完成环境检测与 skills 分发(根治 v6 #90/#103/#69 安装类 issue)。
+5. 每个宿主的支持状态可验证:support.md + smoke + 分级 registry,不承诺未核验的能力。
+6. 宿主不支持 subagent / hook 时有明确降级模式,输出如实声明。
 
 ## 4. 非目标
 
-本 spec 不做这些事:
-
-- 不重写 Story System 主链。
-- 不拆掉现有 8 个 Skill。
-- 不改变 `webnovel.py status` 的旧健康报告语义。
-- 不把 `doctor`、`project-status`、`write-gate`、`projection_log` 重新设计成另一套平行系统。
-- 不把 hooks 变成隐藏业务流程。
-- 不自动启动 Docker、Dashboard、RAG 服务或外部依赖。
-- 不把 `docs/superpowers/` 重新作为活跃文档区;活跃架构 spec 进入 `docs/architecture/`。
-- 不承诺未经官方文档和本地验证的外部宿主能力。
+- 不为任何宿主复制或改写章事务八阶段逻辑。
+- 不把格式层(story repo spec)的任何内容绑定到宿主能力上。
+- 不维护手写的"宿主能力矩阵"。
+- 不承诺未经官方文档核验和本地 smoke 的宿主支持。
+- 不做常驻服务、不自动安装依赖(npx 安装器只拷文件 + 报告,不装运行时)。
+- 不把 hook 变成隐藏业务流程。
 
 ---
 
 ## 5. 设计原则
 
-### 5.1 Runtime 是唯一业务真源
+### 5.1 Story repo 是唯一真源(反转 v2 §5.1)
 
-Skill、Agent、hook、adapter 都只是入口或调度层。真正能修改项目事实的动作必须进入 runtime
+Skill、agent、hook、安装器全部只是入口或调度层。真正修改项目事实的路径只有一条
 
 ```text
-Skill / host command
-    ↓
-webnovel.py
+任意宿主入口(SKILL.md / 命令 / 对话)
-data_modules
+盘面状态机(story repo spec §10)
-.story-system commit
+章事务八阶段(story repo spec §8)
-projection read-models
+settle / retcon / fix 原子 commit → story repo
 ```
 
-任何宿主 adapter 都不能直接写 `.story-system/commits/` 或 `.webnovel/*` read-model。
-
-### 5.2 Claude Code 是第一支持宿主
-
-Claude Code 当前体验必须保持稳定:
-
-- `.claude-plugin/plugin.json` 保持官方位置。
-- `skills/`、`agents/`、`hooks/` 保持插件根层级。
-- Claude hooks 继续使用 `${CLAUDE_PLUGIN_ROOT}`,符合官方 `plugin-dev`。
-- `/webnovel-*` Skill 名称继续有效。
-
-### 5.3 Adapter 尽量薄
+**跨宿主唯一硬要求**:事实变更必须经事务 commit 入 git,任何宿主不得绕过 settle 直写 `定稿/` 与 `大纲/承诺/`。v2 §8.3 的 write-gate/chapter-commit/projection 硬要求随 v6 架构作废,不替换、不变形保留。
 
-各宿主 adapter 只负责:
+### 5.2 Claude Code 是第一宿主
 
-- manifest / metadata
-- tool name mapping
-- agent frontmatter 转换
-- command 暴露方式
-- hook 能力降级
-- smoke/eval 启动方式
+`.claude-plugin/plugin.json`、`skills/`、`agents/`、`hooks/` 保持官方 plugin-dev 结构;Claude Code 的安装与使用体验是其他宿主的对照基准。
 
-adapter 不负责:
+### 5.3 Skills 层零适配,靠精简而不是靠转换
 
-- 改写写作流程
-- 解释 Story System
-- 校验 chapter artifacts
-- 执行 projection
-- 自己维护项目状态
+- SKILL.md 是开放标准,分发 = 拷目录,不做格式转换。
+- `description` 按 Codex 8k 预算写:触发条件 + 一句话职责,不塞流程。
+- Skill 主体只写状态机入口和阶段流程,题材知识、宿主差异、工具映射下沉 `references/`。
 
-### 5.4 不相信手写矩阵
+### 5.4 Subagent 只做增强,不做依赖
 
-外部宿主能力变化很快。spec 不把“某宿主现在支持什么”写成不可验证的口头事实。
+- 三镜头评审(story repo spec §8 第 6 步)在支持 subagent 的宿主上用独立 subagent 保证"各自新鲜上下文"。
+- 不支持的宿主降级:主 agent 按同一份镜头任务书顺序执行三镜头,输出必须明确声明"未调用 subagent,使用兼容模式"。
+- **降级诚实条款(继承 v2)**:不允许声称调用了不存在的能力;机检与 settle 是脚本,不参与降级。
 
-每个宿主 adapter 必须有自己的 `support.md` 或等价记录,包含:
+### 5.5 Hook 只是 Claude Code 上的自动兜底
 
-- 官方文档链接
-- 核验日期
-- 支持的 manifest 字段
-- 支持的 skill / command / agent / hook / MCP 能力
-- 不支持能力的降级规则
-- 本仓库对应的 smoke 测试命令
+- SessionStart 自动报盘面、PreToolUse 提醒直写 `定稿/`——都只是把显式脚本调用自动化。
+- **Hook 语义是 ask,不是 deny**:PreToolUse 检测到直写 `定稿/` 或 `大纲/承诺/` 时提醒"这是定稿区,确认直写还是走事务?",确认后放行;事后由手改检测(story repo spec §9)提议 fix 结转兜底。deny 式 hook 无法区分"绕过 settle 破坏一致性"和"替作者批量修数据",被拦的往往是后者——v6 的 state.json guard 即此教训(#113,已于 73447d7 放开)。这与 story repo spec 不变量 1("检测手改并提议结转,永不报错拒绝")和"可靠性来自自愈,不来自门禁"原则自洽。
+- 任何关键能力不得只存在于 hook 中;无 hook 宿主由状态机入口(每次启动先跑盘面与手改检测)补足,行为等价。
 
-### 5.5 UTF-8 First
+### 5.6 零依赖与 UTF-8 First(Node 口径)
 
-所有新增脚本和 adapter 生成器必须显式 UTF-8:
+- 脚本统一 Node:装任何 agent CLI 的用户必有 Node;无 Python、无 pip、无 .env。
+- 一切文件 IO 显式 UTF-8 无 BOM,`.gitattributes` 锁 LF;不用 .bat/.sh。
+- CI 保留 Windows 中文路径全链路测试(建库→写章→结转→重建缓存,story repo spec §2.1)。
 
-- Python 文件头保留 UTF-8。
-- 文本读写使用 `encoding="utf-8"`。
-- Windows 子进程优先使用 `python -X utf8`。
-- 不依赖系统默认 GBK 编码。
+### 5.7 不相信手写矩阵(继承 v2 §5.4)
 
-### 5.6 渐进迁移
-
-多宿主适配必须逐步引入:
-
-1. 先锁定现状和验证。
-2. 再补 adapter 目录与生成器。
-3. 再迁移 Agent 规范名和 Skill 文案。
-4. 最后接入跨宿主 smoke/eval。
-
-不能一次性重命名 Agent 或大改 Skill,避免破坏 Claude Code 现有用户。
+宿主能力变化快,spec 不记"某宿主现在支持什么"的口头事实;一切支持声明由 `support.md` + smoke 支撑(§7)。
 
 ---
 
 ## 6. 目标架构
 
-### 6.1 目标结构
-
-最终结构建议如下:
+### 6.1 仓库结构(宿主适配相关部分)
 
 ```text
 webnovel-writer/
-├── .claude-plugin/
-│   └── plugin.json
-├── skills/
-│   ├── webnovel-init/
-│   ├── webnovel-plan/
-│   ├── webnovel-write/
-│   ├── webnovel-review/
-│   ├── webnovel-query/
-│   ├── webnovel-learn/
-│   ├── webnovel-dashboard/
-│   ├── webnovel-doctor/
-│   └── using-webnovel-writer/        # 可选,跨宿主使用说明与工具映射
-├── agents/
-│   ├── context-agent.md              # 旧名兼容
-│   ├── reviewer.md                   # 旧名兼容
-│   ├── data-agent.md                 # 旧名兼容
-│   ├── deconstruction-agent.md       # 旧名兼容
-│   └── aliases.json                  # 可选,声明旧名到规范名的映射
-├── hooks/
-│   ├── hooks.json                    # Claude Code 源 hook
-│   ├── session_start.py
-│   └── guard_runtime_write.py
+├── .claude-plugin/plugin.json     # Claude Code 第一宿主 manifest
+├── skills/                        # 单源 SKILL.md,开放标准,拷贝即分发
+│   └── <v7 实现阶段定名>/          # 状态机单入口 + /migrate;清单由 v7 实现定,本 spec 只定承载方式
+├── roles/                         # 角色单源定义(markdown + frontmatter)
+│   ├── 读者镜头.md
+│   ├── 编辑镜头.md
+│   └── 事实镜头.md
+├── agents/                        # 生成物:Claude Code 壳(提交,过 drift check)
 ├── adapters/
-│   ├── README.md
-│   ├── registry.json                 # 宿主 adapter 注册表
-│   ├── claude/
-│   ├── codex/
-│   ├── cursor/
-│   ├── gemini/
-│   ├── opencode/
-│   └── copilot/
-├── scripts/
-│   ├── webnovel.py
-│   ├── validate_plugin_package.py
-│   ├── run_behavior_evals.py
-│   └── generate_host_artifacts.py    # 新增,生成非 Claude adapter 产物
-├── evals/
-│   └── fixtures/
-├── references/
-├── templates/
-├── genres/
-└── dashboard/
+│   ├── registry.json              # 宿主注册表 + 支持分级(§7.1)
+│   └── <host>/support.md          # 每宿主核验记录(§7.2)
+├── scripts/                       # Node,确定性工具层:机检/settle/盘面/体检/生成器
+│   └── build-host-shells.mjs      # roles/ + skills/ → 各平台产物;--check 即 drift check
+├── installer/                     # npx 安装器源码(§8)
+└── dist/<host>/                   # 非 Claude 生成包,不提交
 ```
 
-说明:
+### 6.2 真源与生成物
 
-- `adapters/` 是 adapter 源码和模板,不是生成产物。
-- `dist/` 用于生成后的宿主包,默认不提交。
-- 只有小型、稳定、必须被宿主直接发现的 manifest 可以提交;提交前必须通过 drift check。
-
-### 6.2 业务源与生成产物
-
-| 类型 | 路径 | 是否事实源 | 是否提交 |
+| 类型 | 路径 | 真源 | 提交 |
 |---|---|---:|---:|
-| Claude 插件 manifest | `.claude-plugin/plugin.json` | 是 | 是 |
-| Skill 源文件 | `skills/*/SKILL.md` | 是 | 是 |
-| Agent 源文件 | `agents/*.md` | 是 | 是 |
-| Claude hook 源文件 | `hooks/hooks.json`、`hooks/*.py` | 是 | 是 |
-| Runtime | `scripts/`、`data_modules/` | 是 | 是 |
-| Adapter 模板 | `adapters/<host>/` | 是 | 是 |
-| 生成器 | `scripts/generate_host_artifacts.py` | 是 | 是 |
-| 非 Claude 生成包 | `dist/<host>/webnovel-writer/` | 否 | 否 |
-| 小型宿主 manifest 快照 | `.codex-plugin/plugin.json` 等 | 视宿主而定 | 需 drift check |
+| Skill 源 | `skills/*/SKILL.md` | 是 | 是 |
+| 角色源 | `roles/*.md` | 是 | 是 |
+| Node 脚本与生成器 | `scripts/` | 是 | 是 |
+| 宿主注册表与核验记录 | `adapters/` | 是 | 是 |
+| Claude Code 壳 | `agents/`、`hooks/` | 否(生成物) | 是,过 drift check |
+| 其他宿主壳 | `dist/<host>/` | 否 | 否 |
 
----
-
-## 7. 环境变量与路径策略
-
-### 7.1 Claude Code 路径保持不变
-
-在 Claude Code 插件组件里继续使用:
-
-```text
-${CLAUDE_PLUGIN_ROOT}
-```
-
-这是官方 `plugin-dev` 推荐方式,不能为了跨宿主把 Claude hook 或 Claude Skill 里的路径粗暴替换掉。
-
-### 7.2 Runtime 可增加兼容解析
-
-Python runtime 可以支持更通用的插件根解析顺序:
-
-1. 显式 CLI 参数。
-2. `WEBNOVEL_PLUGIN_ROOT`。
-3. `CLAUDE_PLUGIN_ROOT`。
-4. 当前脚本路径向上推导。
-
-但这属于 runtime 兼容层,不代表 Claude 插件文档主变量要改名。
-
-### 7.3 Skill 文案中的路径写法
-
-Claude Code Skill 里的可执行示例继续用:
+### 6.3 生成器
 
 ```bash
-python -X utf8 "${CLAUDE_PLUGIN_ROOT}/scripts/webnovel.py" ...
-```
-
-跨宿主说明放到 `using-webnovel-writer` 或 `skills/*/references/host-tools.md`,不要把所有宿主变量塞进每个 Skill 主体。
-
----
-
-## 8. Skill 适配规范
-
-### 8.1 保留当前 8 个业务 Skill
-
-多宿主适配不能删减当前 8 个 Skill,也不能让 `/webnovel-doctor` 成为 Claude-only 的遗漏项。
-
-每个 Skill 必须满足:
-
-- `SKILL.md` 有 `name` 和具体触发型 `description`。
-- 主体只写流程、边界和必要命令。
-- 详细工具映射、宿主差异、参考规则放进 `references/`。
-- 确定性校验交给 runtime 命令,不靠自然语言提醒。
-
-### 8.2 新增可选总入口 Skill
-
-可以新增:
-
-```text
-skills/using-webnovel-writer/SKILL.md
-```
-
-用途:
-
-- 给非 Claude 宿主提供统一使用说明。
-- 解释当前宿主下的工具名映射。
-- 引导先运行 `project-status`,必要时运行 `doctor`。
-- 说明不支持 subagent/hook 的降级模式。
-
-限制:
-
-- 不替代 8 个业务 Skill。
-- 不复制每个 Skill 的完整流程。
-- 不承载题材知识和 Story System schema。
-
-### 8.3 写章 Skill 的硬要求
-
-`webnovel-write` 是多宿主适配的核心验收对象。任何宿主的写章流程都必须保留:
-
-1. 写前调用 `write-gate --stage prewrite`。
-2. 提交前调用 `write-gate --stage precommit`。
-3. 提交事实只能走 `chapter-commit`。
-4. 提交后调用 `write-gate --stage postcommit`。
-5. projection 失败时提示 `projections retry --chapter N`。
-6. 不能直接手写 read-model。
-
----
-
-## 9. Agent 适配规范
-
-### 9.1 规范名与旧名兼容
-
-目标规范名使用 `webnovel-` 前缀:
-
-| 旧名 | 规范名 |
-|---|---|
-| `context-agent` | `webnovel-context-agent` |
-| `reviewer` | `webnovel-reviewer` |
-| `data-agent` | `webnovel-data-agent` |
-| `deconstruction-agent` | `webnovel-deconstruction-agent` |
-
-迁移方式:
-
-1. 先在文档和 adapter registry 中声明映射。
-2. 再让生成器为不同宿主输出规范名。
-3. 最后逐步修改 Skill 正文使用规范名。
-4. 旧名至少保留一个小版本周期,避免破坏现有调用。
-
-### 9.2 Agent 边界
-
-所有宿主都必须遵守现有边界:
-
-- `context-agent` 只负责写前上下文和任务书。
-- `reviewer` 只负责审查和 blocking 输出。
-- `data-agent` 只产出 commit artifacts,不直接写 projection。
-- `deconstruction-agent` 只负责参考拆解和经验沉淀。
-
-### 9.3 无 subagent 宿主的降级模式
-
-如果宿主不能稳定调用 subagent:
-
-- 进入 compatibility mode。
-- 主 agent 按同一份任务书和 artifact schema 执行。
-- 输出必须明确说明“未调用 subagent,使用兼容模式”。
-- 仍然必须通过 `artifact_validator`、`write-gate` 和行为 eval。
-- 不允许声称已经调用了不存在的 subagent。
-
----
-
-## 10. Hook 适配规范
-
-### 10.1 Claude Code hook 保持现状
-
-当前 Claude Code hook 是有效基线:
-
-```text
-hooks/hooks.json
-hooks/session_start.py
-hooks/guard_runtime_write.py
+node scripts/build-host-shells.mjs --target all
+node scripts/build-host-shells.mjs --target codex
+node scripts/build-host-shells.mjs --check     # drift check,CI 必跑
 ```
 
-必须继续满足官方 `plugin-dev`:
-
-- `hooks/hooks.json` 使用 wrapper 格式:外层包含 `description` 与 `hooks`。
-- command hook 使用 `${CLAUDE_PLUGIN_ROOT}`。
-- hook 脚本只做轻量、确定性、可快速退出的检查。
-
-### 10.2 其他宿主 hook 可选
-
-其他宿主是否支持 hook,由对应 adapter 的 `support.md` 和 smoke test 决定。
-
-若宿主不支持 hook:
-
-- 不影响核心写作流程。
-- 通过 `project-status` / `doctor` / `write-gate` 显式命令补足。
-- 不能让某个关键能力只存在于 hook 中。
-
-### 10.3 hook 禁止做的事
-
-hook 不允许:
-
-- 自动写 commit。
-- 自动改正文。
-- 自动改设定。
-- 自动安装依赖。
-- 自动启动长驻服务。
-- 写入章节流程状态。
+生成器只读 `roles/`、`skills/`、`adapters/registry.json`,产出各平台 agent 壳与 manifest;不改业务源、不联网、不运行写作流程。
 
 ---
 
-## 11. Doctor 与状态入口
-
-### 11.1 所有宿主共享同一状态入口
+## 7. 支持分级与核验纪律
 
-多宿主适配必须统一使用:
-
-```bash
-python -X utf8 "<PLUGIN_ROOT>/scripts/webnovel.py" --project-root "<PROJECT_ROOT>" project-status --format summary
-```
-
-当短状态显示异常时,再运行:
-
-```bash
-python -X utf8 "<PLUGIN_ROOT>/scripts/webnovel.py" --project-root "<PROJECT_ROOT>" doctor --format text
-```
-
-### 11.2 不新增第二套 status
-
-`status` 继续保留宏观创作健康报告语义。
-
-短状态只用 `project-status`。
-
-深度体检只用 `doctor`。
-
-### 11.3 doctor 的跨宿主价值
-
-`doctor` 是多宿主适配的安装后第一检查入口,必须能回答:
-
-- 项目根是否解析正确。
-- 当前 phase 是什么。
-- 当前 phase 应该有哪些文件。
-- 目录、JSON、SQLite 是否完整。
-- RAG 配置是否存在。
-- Python 依赖是否安装。
-- Dashboard 产物是否存在。
-- projection 是否失败。
-- 缺失项怎么修。
-
----
-
-## 12. Adapter 设计
-
-### 12.1 Adapter registry
-
-新增:
-
-```text
-adapters/registry.json
-```
-
-建议结构:
+### 7.1 Registry 分级
 
 ```json
 {
-  "schema_version": "webnovel-host-adapter-registry/v1",
+  "schema_version": "webnovel-host-registry/v2",
   "hosts": {
-    "claude": {
-      "tier": "primary",
-      "source": ".claude-plugin/plugin.json",
-      "supports": ["skills", "agents", "hooks"],
-      "smoke": "python -X utf8 scripts/validate_plugin_package.py --format json"
-    },
-    "codex": {
-      "tier": "adapter",
-      "source": "adapters/codex/",
-      "supports": [],
-      "smoke": ""
-    }
+    "claude-code": { "tier": 1, "verified": "亲测", "smoke": "node scripts/smoke.mjs --host claude-code" },
+    "codex":       { "tier": 1, "verified": "亲测", "smoke": "node scripts/smoke.mjs --host codex" },
+    "gemini-cli":  { "tier": 2, "verified": "社区反馈" },
+    "cursor":      { "tier": 2, "verified": "社区反馈" },
+    "_default":    { "tier": 3, "verified": "标准 SKILL.md 理论可用" }
   }
 }
 ```
 
-`supports` 不能手写猜测,必须由该宿主 `support.md` 和 smoke test 支撑。
-
-### 12.2 每个宿主目录
-
-每个宿主 adapter 至少包含:
-
-```text
-adapters/<host>/
-├── support.md              # 官方文档核验记录
-├── manifest.template.*     # 需要时才有
-├── tool-mapping.md         # 工具名与降级规则
-├── agent-mapping.json      # 规范 agent 名与宿主表达
-└── smoke.md                # 本地验证命令
-```
-
-### 12.3 生成器
-
-新增生成器:
+- **一级**(Claude Code + Codex):维护者亲测,发布前必须过 smoke。
+- **二级**(Gemini CLI / Cursor):社区反馈确认,README 如实标注。
+- **三级**:凡支持标准 SKILL.md 的宿主理论可用,不单独承诺。
 
-```bash
-python -X utf8 scripts/generate_host_artifacts.py --target all
-python -X utf8 scripts/generate_host_artifacts.py --target codex
-python -X utf8 scripts/generate_host_artifacts.py --check
-```
+`supports` 类字段不允许手写猜测,必须由对应 `support.md` 支撑。
 
-生成器负责:
+### 7.2 support.md(继承 v2,逐宿主必备)
 
-- 读取 adapter registry。
-- 读取 Skill / Agent / hook 源文件。
-- 生成宿主 manifest。
-- 生成宿主 agent 配置。
-- 生成宿主 command / skill 入口。
-- 生成 drift manifest。
-
-生成器不负责:
-
-- 修改业务源文件。
-- 联网下载依赖。
-- 改写 Story System schema。
-- 运行写作流程。
+实现某宿主适配前必须重新核验官方文档,结果写入 `adapters/<host>/support.md`,至少包含:官方文档链接、核验日期、skill/subagent/hook 支持情况、本仓库降级策略、smoke 命令。无 support.md 的宿主不得进入 registry 一二级。
 
 ---
 
-## 13. 验证与 CI
-
-### 13.1 Package validator 扩展
+## 8. 安装与分发
 
-当前 `validate_plugin_package.py` 继续作为基础。后续扩展检查
+`npx` 安装器(解决 v6 #90/#103/#69):
 
-- `adapters/registry.json` schema。
-- 每个 adapter 是否有 `support.md`。
-- 每个 adapter 是否声明 smoke 命令。
-- 生成产物是否含本机绝对路径。
-- 小型提交 manifest 是否与生成器输出一致。
-- `docs/README.md` 是否索引活跃 spec。
+1. 检测环境:识别已安装的 agent CLI(按 registry 顺序探测 `.claude|.codex|.cursor|.gemini` 等目录与命令)。
+2. 拷贝 skills 到对应宿主的 skills 路径;一级宿主同时生成 agent 壳。
+3. 输出报告:装到了哪、该宿主支持等级、降级说明、下一步(打开 agent CLI 说"开始写书")。
 
-### 13.2 Behavior eval 扩展
-
-当前 fast eval 已覆盖 8 个 Skill。后续增加:
-
-- 每个宿主至少一个 install / discover smoke。
-- 每个宿主至少一个 `project-status` smoke。
-- `webnovel-doctor` 在每个宿主都有可执行说明。
-- `webnovel-write` 在至少一个非 Claude 宿主完成兼容模式验收。
-- 无 subagent 宿主不得声称调用 subagent。
-
-### 13.3 Drift check
-
-如果提交了任何生成 manifest 或 generated adapter 文件,CI 必须运行:
-
-```bash
-python -X utf8 scripts/generate_host_artifacts.py --check
-```
-
-失败时说明:
-
-- 哪个源文件变化导致 drift。
-- 应该重新运行哪个生成命令。
-- 哪些生成文件需要提交。
-
-### 13.4 外部能力核验
-
-每次实现某个宿主 adapter 前,必须重新核验官方文档。
-
-核验结果写入:
-
-```text
-adapters/<host>/support.md
-```
-
-`support.md` 至少包含:
-
-- 核验日期。
-- 官方链接。
-- 支持能力。
-- 不支持能力。
-- 本仓库采用的降级策略。
+安装器不装 Node 之外的任何运行时、不改用户全局配置、不联网下载业务逻辑。
 
 ---
 
-## 14. 迁移计划
-
-### Phase 0:锁定现状
+## 9. 验证与 CI
 
-目标:让 spec 和当前主干一致。
-
-改动:
-
-- 新增本 spec 到 `docs/architecture/`。
-- 更新 `docs/README.md` 索引。
-- 不新增 `docs/superpowers/` 活跃目录。
-
-验收:
-
-- 文档列出 8 个 Skill。
-- 文档列出当前 hooks。
-- 文档列出 doctor、project-status、write-gate、projections、projection_log。
-- `git diff --check` 通过。
-
-### Phase 1:Adapter 研究记录与注册表
-
-目标:先验证外部宿主能力,不写大规模生成器。
-
-改动:
-
-- 新增 `adapters/README.md`。
-- 新增 `adapters/registry.json`。
-- 为每个目标宿主新增 `support.md`。
-- 每个 `support.md` 只记录官方文档核验结果和本项目降级策略。
-
-影响:
-
-- 不影响现有 Claude Code 用户。
-- 不影响 runtime。
-
-### Phase 2:Agent 规范名与兼容映射
-
-目标:引入 `webnovel-*` 规范 Agent 名,但不破坏旧名。
-
-改动:
-
-- 新增 `agents/aliases.json` 或等价映射。
-- 更新 adapter registry 使用规范名。
-- 更新 behavior eval,确保旧名与规范名不会互相漂移。
-
-影响:
-
-- Claude Code 现有 Skill 仍可调用旧名。
-- 后续宿主生成优先使用规范名。
-
-### Phase 3:Skill 瘦身与宿主工具映射
-
-目标:减少 Skill 主体中的 Claude-only 工具表达。
-
-改动:
-
-- 新增 `skills/using-webnovel-writer/`。
-- 把跨宿主工具映射放到 references。
-- 保留 Claude Code 示例中的 `${CLAUDE_PLUGIN_ROOT}`。
-- 不把每个宿主的完整说明复制进 8 个业务 Skill。
-
-影响:
-
-- Skill 更短,更容易被不同宿主消费。
-- 当前 Claude Code 命令不变。
-
-### Phase 4:生成器与 drift check
-
-目标:让非 Claude adapter 可生成、可检查。
-
-改动:
-
-- 新增 `scripts/generate_host_artifacts.py`。
-- 生成 `dist/<host>/webnovel-writer/`。
-- 扩展 `validate_plugin_package.py` 检查 adapter。
-- CI 增加 drift check。
-
-影响:
-
-- 新增开发工具,不改变用户项目数据。
-- 生成文件默认不提交。
-
-### Phase 5:跨宿主 smoke 与行为 eval
-
-目标:证明“能发现、能体检、能执行核心流程或明确降级”。
-
-改动:
-
-- 扩展 `run_behavior_evals.py`。
-- 每个宿主至少有 discover / project-status / doctor smoke。
-- 至少一个非 Claude 宿主完成 `webnovel-write` 兼容模式验收。
-
-影响:
-
-- 发布前检查时间增加。
-- 适配声明更可信。
-
-### Phase 6:发布文档与版本治理
-
-目标:用户知道哪个宿主支持到什么程度。
-
-改动:
-
-- README 增加多宿主支持表。
-- `docs/guides/commands.md` 增加非 Claude 使用口径。
-- `docs/operations/plugin-release.md` 增加 adapter 发布检查。
-- release note 明确每个宿主支持等级。
-
-影响:
-
-- 避免用户误以为所有宿主都已完整支持。
-- 降低 issue 中的环境误解。
-
----
-
-## 15. 风险与控制
-
-| 风险 | 影响 | 控制 |
-|---|---|---|
-| 外部宿主能力描述过期 | spec 很快失真 | 每个 adapter 用 `support.md` 记录官方核验日期和链接 |
-| 为每个宿主复制业务流程 | 逻辑漂移 | adapter 只调 `webnovel.py`,不复制 runtime |
-| 重命名 Agent 破坏旧流程 | 现有用户调用失败 | 旧名兼容一个小版本周期以上 |
-| hook 被误当业务流程 | 隐藏副作用 | hook 只做状态提示和危险写入兜底 |
-| Skill 主体继续膨胀 | token 消耗高 | 详细内容下沉 references,确定性动作下沉 scripts |
-| 生成产物漂移 | 发布包和源不一致 | `generate_host_artifacts.py --check` |
-| Windows 中文路径失败 | 用户无法运行 | 所有新增 Python I/O 使用 UTF-8,命令用 `python -X utf8` |
+- **drift check**:`build-host-shells.mjs --check`,提交的生成物(`agents/` 等)与源不一致即红。
+- **package validator**:registry schema、逐宿主 support.md 存在性、smoke 命令声明、生成物无本机绝对路径、skill description 长度(Codex 8k 预算)。
+- **行为 smoke**(每个一级宿主):discover(skill 可发现)→ 建库 → 盘面 → 写一章全事务 → 删 `.cache/` 重建。Windows 中文路径全链路必测。
+- **降级验收**:至少一个无 subagent 环境跑通三镜头兼容模式,且输出含兼容模式声明。
 
 ---
 
-## 16. 验收清单
-
-最终完成时必须满足:
-
-- [ ] Claude Code 原安装流程不破坏。
-- [ ] 8 个现有 Skill 仍可发现。
-- [ ] `/webnovel-doctor` 保留并进入多宿主自检路径。
-- [ ] 当前 hooks 保持 plugin-dev wrapper 格式。
-- [ ] `project-status`、`doctor`、`write-gate`、`projections` 都是跨宿主共享 runtime 入口。
-- [ ] `status` 仍保留旧宏观健康报告语义。
-- [ ] Agent 规范名有 `webnovel-` 前缀,旧名有兼容映射。
-- [ ] 每个 adapter 都有 `support.md`,包含官方文档核验日期和链接。
-- [ ] 每个 adapter 都有 smoke 命令或明确阻断原因。
-- [ ] 生成器可生成非 Claude 宿主产物。
-- [ ] drift check 能发现生成产物不一致。
-- [ ] package validator 覆盖 adapter registry、support.md 和 manifest 漂移。
-- [ ] behavior eval 覆盖 8 个 Skill 和至少一个非 Claude 兼容写作流程。
-- [ ] README 和 release note 明确每个宿主的支持等级。
-
----
+## 10. 迁移计划
 
-## 17. 简短结论
+随 v7 绞杀式收敛推进,不单独立项:
 
-这次多宿主适配的核心不是“再写一套插件”,而是:
+| Phase | 内容 | 依赖 |
+|---|---|---|
+| A | 本 spec v3 定稿入册;registry + Claude Code / Codex 两份 support.md(核验 + smoke 定义) | 无 |
+| B | 状态机入口 SKILL.md 与 `roles/` 单源落地(随 v7 Phase 1-2 实现) | v7 数据面 |
+| C | `build-host-shells.mjs` 生成器 + drift check 进 CI | B |
+| D | npx 安装器 | B |
+| E | Codex 亲测过 smoke,升一级;Gemini/Cursor 收集社区反馈 | C、D |
+| F | README 多宿主支持表 + release note 分级口径 | E |
 
-- 保住当前 `v6.1.0` 已经做好的 runtime 基线。
-- 把 Claude Code 作为第一宿主继续维护。
-- 用 adapter 和生成器把同一套能力暴露给其他宿主。
-- 用 doctor、project-status、write-gate、projection log 和 eval 证明它真的能用。
+## 11. 风险与控制
 
-这样改,后续扩展宿主时不会把项目重新打散,也不会让用户在多个看起来相似、实际语义不同的入口里迷路。
+| 风险 | 控制 |
+|---|---|
+| 宿主能力描述过期 | support.md 核验日期纪律;无核验不进一二级 |
+| 角色壳三平台漂移 | 单源 `roles/` + 生成器,禁止手改生成物,drift check 兜底 |
+| 弱模型宿主上流程失守 | 机检与 settle 全是脚本;模型只做渲染与镜头评审 |
+| Codex skill 预算超限 | validator 检查 description 长度 |
+| 降级模式被冒充 | 降级诚实条款进行为 smoke 验收 |
+| Windows 中文路径 | Node 默认 UTF-8 + CI 全链路测试 |
+
+## 12. 验收清单
+
+- [ ] story repo 是唯一真源:任何宿主无绕过 settle 的写路径。
+- [ ] 状态机入口 SKILL.md 在 Claude Code 与 Codex 上可发现、可执行。
+- [ ] `roles/` 单源,三平台壳全部由生成器产出,drift check 进 CI。
+- [ ] npx 安装器在 Windows 中文环境一条命令完成分发。
+- [ ] registry 三级分级,一级宿主有 support.md + 过 smoke。
+- [ ] 无 subagent 宿主跑通兼容模式且如实声明。
+- [ ] hook 缺席的宿主核心流程行为等价。
+
+## 13. 简短结论
+
+v2 答对的是"怎么诚实地适配多宿主"(support.md、registry、生成器、降级诚实),答错的是"适配什么"——它适配的 v6 runtime 已被 v7 推翻。v3 保住前者,把基座换成 story repo:格式平台无关,入口是开放标准 SKILL.md,角色单源生成,安装一条 npx。宿主越弱,越证明"流程薄 + 脚本确定性"是对的。

+ 40 - 8
docs/architecture/story-repo-spec-2026-06-10.md

@@ -1,8 +1,9 @@
-# Story Repo 格式规格(v7 草案 0.4 · 已冻结)
+# Story Repo 格式规格(v7 草案 0.5 · 已冻结)
 
-> 状态:0.4。相对 0.3 的变更:伞目录「定稿/」改名「定稿/」(作者拍板,贴作者心智:草稿在工作区,验收后入定稿)。相对 0.2 的变更:废除大一统 YAML 数据文件,承诺与信息差改为"每条一个 Markdown + 平铺 front matter"(§4.3、§5);新增防呆方言(§2.2)、修复卡(§10 第 0 态)、"对话即编辑器"不变量(§1.9)。决策记录见 §14。
-> 来源:2026-06-10「最正确架构」讨论 + 绞杀式收敛计划 Phase 0。
+> 状态:0.5。相对 0.4 的变更(吸收另一线差异意见,见 `story-repo-spec-feedback-2026-06-11.md`):连写/自动模式入规(§8.1,撤销原 §13 对全自动的禁令);脚本运行时定为 Node(§2.1);机检扩充两项零 token 检查(§8 第 5 步);反和解规则入风格宪法(§6.1)。相对 0.3 的变更:伞目录「正典/」改名「定稿/」(作者拍板,贴作者心智:草稿在工作区,验收后入定稿)。相对 0.2 的变更:废除大一统 YAML 数据文件,承诺与信息差改为"每条一个 Markdown + 平铺 front matter"(§4.3、§5);新增防呆方言(§2.2)、修复卡(§10 第 0 态)、"对话即编辑器"不变量(§1.9)。决策记录见 §14。
+> 来源:2026-06-10「最正确架构」讨论 + 绞杀式收敛计划 Phase 0 + 2026-06-11 另一线差异意见对齐
 > 地位:本规格是 v7 的法律文本。代码是格式的派生物——任何实现与本规格冲突时,改实现或改规格,不允许"代码里悄悄多存一份"。
+> 范围:本规格只管**格式层**(story repo 里有什么、长什么样、怎么变更),平台无关。宿主适配(SKILL.md 入口、subagent 壳、安装器)由 `multi-agent-adaptation-spec-2026-06-05.md`(v3,已反转到 v7 基线)承接。
 
 ---
 
@@ -67,7 +68,7 @@
 
 中文路径的编码税通过以下硬约束消化,不靠运气:
 
-- 一切文件 IO 显式 `encoding='utf-8'`;脚本与子进程入口统一注入 `PYTHONUTF8=1`;禁止依赖系统 locale。
+- **脚本运行时统一 Node**(零依赖:装任何 agent CLI 的用户必有 Node;无 Python、无 pip、无 .env,根治 v6 安装类 issue #90/#103/#69)。一切文件 IO 显式 UTF-8(Node 默认即是),禁止依赖系统 locale。
 - 仓库初始化时设置 `git config core.quotepath false`(git log 里中文路径可读)。
 - 文件排序一律靠零填充数字前缀(`0152-`、`第05卷`、`P-031`),不依赖中文字典序。
 - 实体引用一律用**正名**(中文),别名经名册(§4.5)解析;不引入 ASCII 实体 id。
@@ -98,6 +99,9 @@ spec_version: "7.0"
 高承诺最大搁置章数: 10     # 超过亮"节奏债"
 连续弱钩上限: 3
 关键章稿数: 3              # 卷首/转折/高潮章 best-of-N
+自动拍板: false            # true 时决策卡默认采纳提案,跳过停顿点 2(§8.1)
+自动验收: false            # true 时机检+镜头评审过线即 settle,验收卡攒批事后审(§8.1)
+连写体检周期: 8            # 自动模式下的体检加密周期;手动模式仍为每 50 章(§9)
 ```
 
 ## 4. 定稿/
@@ -248,6 +252,8 @@ append-only 的 Markdown 表,settle 时追加一行。**在场列可空**:
 ---
 ## 铁律
+## 反和解(按题材配浓度)
+反派恶意落到实处、冲突升级到底、禁说教式和解、禁主角圣母——AI 对齐训练的和解倾向对爽文是毒药,事后审查修不了,只能随上下文包前置反制(§8 第 3 步)。初始化时按题材模板写入,作者可调浓度。
 ## 节奏偏好
 ## 来自否决的规则
@@ -291,9 +297,9 @@ B 方案:本章纯感情线过渡,P-031 推到下章(代价:节奏债 +1
 |---|------|--------|----------|
 | 1 | brief | 脚本读盘面 | 生成 `工作区/决策卡.md` |
 | 2 | 拍板 | **作者** | 决策卡的合同段固化 |
-| 3 | pack | 脚本 | 组装 `工作区/上下文包.md`:盘面+合同+事实切片+信息差边界+近章结尾+反复读清单+风格锚点 |
+| 3 | pack | 脚本 | 组装 `工作区/上下文包.md`:盘面+合同+事实切片+信息差边界+近章结尾+反复读清单+风格锚点+反和解规则(§6.1) |
 | 4 | 渲染 | 模型(干净上下文) | `工作区/草稿-*.md`;关键章 best-of-N |
-| 5 | 机检 | 脚本 | 合同断言比对、泄密扫描(信息差)、禁词/复读、新专名比对名册、字数。**不过关直接打回第 4 步,不打扰作者** |
+| 5 | 机检 | 脚本 | 合同断言比对、泄密扫描(信息差)、禁词/复读、新专名比对名册、字数、跨章高频意象统计("空气仿佛凝固"全书 47 次这类)、句式体检(句长方差/段落长度分布/高频句式开头)。**不过关直接打回第 4 步,不打扰作者** |
 | 6 | 镜头评审 | 模型 ×3(各自新鲜上下文) | 读者镜头(爽不爽/哪段想划走)、编辑镜头(结构与商业性)、事实镜头(只解释机检结果)→ `工作区/评审报告/` |
 | 7 | 验收 | **作者** | 验收卡 = 草稿 + 三句话评审 + 待确认新专名 + **章摘要(扫一眼,可改)**。动作:接受 / 改完接受 / 打回 |
 | 8 | settle | 脚本,**原子** | 见下 |
@@ -309,10 +315,24 @@ ch(152): 北境的雪
 设定: 林晚.位置=北境雪原; 信息差+S-021
 ```
 
+### 8.1 自动模式(连写)
+
+**全自动 ≠ 无控制,是控制上移到大纲层**:作者逐卷拍板卷纲,一次确认管几十章。状态机(§10)与八阶段零改动,仅两个作者停顿点变为可跳过开关(存 `book.yaml`):
+
+- `自动拍板: true` → 第 2 步默认采纳决策卡提案。**承诺结转豁免在自动模式下不可用**——豁免是作者品味决策(§5),模型不能自行豁免,需要豁免的章必须人工拍板。
+- `自动验收: true` → 第 7 步机检与镜头评审过线即 settle;验收卡(含章摘要)攒批留档,作者事后批量补审,发现问题走 retcon(§9)。
+
+**质量漂移防线**(无人值守下错误自我强化,必须加密体检):
+
+- 连写中体检周期从 50 章加密到 `连写体检周期`(默认 8 章)。
+- **停止条件**(命中即停,转人工):写满指定章数 / 体检不过线 / 卷纲耗尽。**绝不让模型裸奔编纲**——卷纲是自动模式的控制边界,耗尽即停等作者复盘。
+
+交互式与全自动是同一根滑杆的两端,一套实现:两个开关全关 = 0.4 的逐章交互流程,行为完全不变。
+
 ## 9. 中环、外环与例外事务
 
 - **卷复盘** `vol(05): 复盘与下卷规划`:承诺审计(本卷开/收/过期清单)→ `记忆/卷摘要/` → 与作者对谈产出 `大纲/卷纲/第06卷.md` → 顺手做伏笔机会扫描(模型提 3-5 个"本卷可埋、N 卷后响"候选,必须引用总纲的具体远期节点,作者勾选后生成承诺文件)。
-- **体检**(每 50 章自动):文体指纹 vs 文体基线区间的漂移报告 + 承诺坏账 + 时间线孤儿 → 报告进工作区,不入册;作者决定回拉或更新基线。
+- **体检**(手动模式每 50 章;连写中按 `连写体检周期` 加密,默认 8 章,不过线即停连写):文体指纹 vs 文体基线区间的漂移报告 + 承诺坏账 + 时间线孤儿 → 报告进工作区,不入册;作者决定回拉或更新基线。
 - **retcon**:`retcon(87): 修正大长老境界设定`——显式事务,允许改定稿,要求 commit message 写明原因,设定/承诺同步,审计留痕。
 - **手改检测**:每次启动 `git status` 发现定稿/大纲有未结转的手改 → 决策卡问一句"结转吗",确认后 `fix(设定): …` 入册。**系统适应作者,不报错。**
 - **分支未来**:作者想试另一条线 → `git branch what-if/xxx`,各推演 3 章纲要,读完 merge 或删分支。
@@ -358,7 +378,7 @@ ch(152): 北境的雪
 - ❌ 常驻服务(Dashboard 改为按需静态简报,只读 story repo)
 - ❌ 自建提交链 / projection_log / scratchpad
 - ❌ 模型自由评"文笔好坏"(镜头职责里明确排除)
-- ❌ 全自动无人值守模式
+- ❌ 模型裸奔编纲(连写的硬停止条件:卷纲耗尽即停,§8.1)
 
 ## 14. 决策记录
 
@@ -386,3 +406,15 @@ ch(152): 北境的雪
 | # | 问题 | 决定 | 决策人 | 理由 |
 |---|------|------|--------|------|
 | 10 | 「正典」译名生硬 | 伞目录改名「定稿/」,结构不变(备选项:顶层拉平、「正史」) | 作者 | 贴作者心智:草稿在工作区,验收后入定稿 |
+
+### 0.4 → 0.5(起因:另一线差异意见,`story-repo-spec-feedback-2026-06-11.md`)
+
+| # | 问题 | 决定 | 决策人 | 理由 |
+|---|------|------|--------|------|
+| 11 | §13 禁全自动 vs 已确认需求(v6 #79 连写) | 撤销禁令,连写入规为 §8.1:状态机零改动,拍板/验收变可跳过开关,体检加密到 8 章,停止条件硬兜底 | 作者(采纳反馈线方案) | 全自动 ≠ 无控制,是控制上移到大纲层;原禁令真正想禁的是"模型裸奔编纲",已单列入 §13 |
+| 12 | §2.1 `PYTHONUTF8=1` 暗示 Python,与零依赖冲突 | 脚本运行时统一 Node | 作者(另一线已定) | 装 agent CLI 必有 Node 且默认 UTF-8;v6 安装类 issue(#90/#103/#69)根源是 Python+pip 门槛 |
+| 13 | 多宿主层缺席是留白还是遗漏 | 分层留白:本规格只管格式层、平台无关;宿主适配由 `multi-agent-adaptation-spec-2026-06-05.md` v3 承接(真源反转到 story repo) | 作者 | 决策卡=文件界面天然可移植,格式法律文本不该绑宿主 |
+| 14 | 机检覆盖面 | 内环第 5 步扩充:跨章高频意象统计、句式体检(零 token 脚本) | Claude(采纳反馈线建议) | 格式不动,纯机检项扩充;AI 味是分布问题,禁词表只够第一层 |
+| 15 | AI 和解倾向毒害爽文 | 反和解规则入风格宪法标准段(§6.1),随上下文包前置注入 | Claude(采纳反馈线建议) | 对齐副作用事后修不了,只能写前反制 |
+
+**落地备忘**(不进格式法律文本,实现时别丢):题材平台预设(番茄/起点节奏差异)、许可证 MIT/Apache-2.0、AI 味承诺口径("读者不出戏",不承诺过检测器)。

+ 47 - 0
docs/architecture/story-repo-spec-feedback-2026-06-11.md

@@ -0,0 +1,47 @@
+# 对《Story Repo 格式规格 v7 草案 0.4》的差异意见(2026-06-11)
+
+> 来源:另一线讨论(见 `v7-design-discussion-notes-2026-06-11.md`)
+> 对象:`story-repo-spec-2026-06-10.md`(0.4 已冻结稿)
+
+## 一、认同并放弃己方方案的部分
+
+- **承诺系统**优于己方"伏笔账本+情绪曲线+桥段账本"三件套,采纳。
+- **settle=原子 commit + git status 手改检测**优于己方"入账记录.json+哈希对账",采纳,己方方案作废。
+- 决策卡/盘面状态机/防呆方言/修复卡/金句库收割,全部采纳。
+
+## 二、需要对齐的冲突(按严重度排序)
+
+### 1. §13"❌ 全自动无人值守模式"与已确认需求冲突
+
+作者明确说过用户两派需求并存("有的需求全自动,有的需求交互式"),且 v6 issue #79(连写功能)是高呼声需求。建议不要禁掉,而是无侵入兼容:
+
+- 自动模式 = 决策卡默认采纳提案 + 机检/镜头评审过线即 settle + 验收卡攒批事后审;
+- 状态机零改动,仅两个停顿点(拍板/验收)变为可跳过开关,存 `book.yaml`;
+- 连写中体检周期需从 50 章加密到 5-10 章(质量漂移在无人值守下累积更快);
+- 停止条件:写满章数 / 体检不过线 / 卷纲耗尽(绝不让模型裸奔编纲)。
+
+核心论点:**全自动 ≠ 无控制,是控制上移到大纲层**(作者逐卷拍板卷纲,一次确认管几十章)。若坚持砍掉,请在决策记录补充理由及对 #79 用户的回应口径。
+
+### 2. §2.1 `PYTHONUTF8=1` 暗示 Python 运行时,与"零依赖"决策冲突
+
+v6 安装类 issue(#90 安装包、#103 找不到脚本、#69 环境配置)根源是 Python+pip 门槛;目标用户是写手非工程师。另一线已定:**脚本统一 Node**——装任何 agent CLI 的用户必有 Node,且 Node 默认 UTF-8,编码税更低。建议 §2.1 改为 Node 口径,或在决策记录补一条运行时选型。
+
+### 3. 多宿主层缺席——确认是分层留白还是遗漏
+
+背景(2026-06 核验):SKILL.md 已是 30+ 工具的开放标准(Codex/Gemini CLI/Cursor 等);subagent 三大平台都有但格式三家三样(Claude/Gemini 用 markdown+frontmatter,Codex 用 TOML)。
+
+本规格作为格式层是平台无关的(决策卡=文件界面,天然可移植),但需要第二份 spec 覆盖:
+
+- 状态机入口落成标准 SKILL.md(注意 Codex 对 skill 列表约 8k 字符预算,description 需精简);
+- 角色定义单源、构建时生成三平台壳;
+- 每宿主 `support.md`(官方文档链接+核验日期+smoke 命令)、registry 分级(一级 Claude Code+Codex 亲测,二级社区反馈);
+- `npx` 安装器(检测环境拷 skills,顺带解决 #90)。
+
+可继承现有 `multi-agent-adaptation-spec-2026-06-05.md` 的元层(support.md 纪律、registry、drift check、降级诚实条款),但其 §5.1"Runtime 是唯一业务真源"需反转为"story repo 是唯一真源",§8.3 的 gate/commit/projection 跨宿主硬要求随 v6 架构一并删除。
+
+## 三、不阻塞的小项
+
+- 机检(内环第 5 步)建议补两个零 token 脚本检查:**跨章高频意象统计**("空气仿佛凝固"全书 47 次这类)、**句式体检**(句长方差/段落长度分布/高频句式开头)——格式不用动,纯机检项扩充。
+- 信息差砍掉"计划揭露"字段可接受:揭露可建为承诺(类型=悬念,兑付计划=揭露安排),机制自洽。
+- 上下文包/渲染层需前置"**反和解倾向**"规则(反派恶意落实处、冲突升级到底、禁说教式和解,按题材配浓度)——AI 对齐训练的副作用对爽文是毒药,事后审查修不了,只能写前反制。可进风格宪法或题材模板,不影响本规格。
+- 另一线已定但本规格未提的杂项,落地时别丢:题材平台预设(番茄/起点节奏差异)、许可证换 MIT/Apache-2.0、AI 味承诺口径("读者不出戏",不承诺过检测器)。

+ 82 - 0
docs/architecture/v7-design-discussion-notes-2026-06-11.md

@@ -0,0 +1,82 @@
+# v7 设计讨论纪要(2026-06-11)
+
+> 状态:讨论快照,供 v7 spec 对照
+> 来源:v6 问题诊断 + issue 区需求盘点 + 写作问题空间梳理 + 多平台调研
+
+## 1. 背景与定位
+
+- 目标:长篇网文创作插件,200 万字级别,开源给广大写手(非工程师)使用,全程中文化,重点照顾 Windows 中文编码。
+- **决策:推翻运行时架构,保留项目资产**——仓库/star/用户群/issue 区、37 个题材模板、审查维度、追读力体系、踩坑记录全部继承;Story System、SQLite 双库、RAG、Python runtime 归零。v6 留分支只修致命 bug,v7 新 major + `/migrate` 迁移命令 + 先发 RFC 让用户拍砖。
+
+## 2. v6 的病根诊断(issue 与代码互证)
+
+| 病根 | 证据 |
+|---|---|
+| 用 prompt 驱动确定性状态机,模型不遵守 | #91(作者自认)、#66 偷懒不调 agent、#87/#76 schema 输出失败;385 行写章流程规范 |
+| 派生状态(SQLite/投影)与作者手改冲突,无解 | #100、#77、#63、#67、#70、#71、#89 |
+| Token/时间消耗失控(每章 3 subagent + 4 份 JSON + 多道 gate) | #58、#92、#106 |
+| 安装门槛高(Python 依赖 + .env + RAG key) | #90、#103、#69 |
+| 禁词表治不了 AI 味 | #94(朱雀 100%) |
+| 连写缺失/质量漂移 | #79、#95、#74 |
+
+**核心教训:v6 信任流程、不信任模型和作者;v7 信任 markdown 和作者,把流程压到最薄。**
+
+## 3. v7 核心架构原则
+
+1. **状态外置、纯 markdown**:作者面对的一切状态都是 markdown 文件,可手改、可 git diff。没有 DB、没有向量库、没有投影。细节召回靠 Grep 正文原文(正文本身就是无损数据库);没配 key 的 v6 用户本来就在跑 BM25,体验无损、复杂度全卸。
+2. **确定性的活给代码,创作的活给模型**:字数统计、高频短语、句式体检、一致性对账全是零 token 脚本;脚本是唯一在所有模型下行为一致的东西。
+3. **零依赖安装**:脚本全用 Node(装 agent 工具的人必有),无 Python、无 pip、无 .env。
+4. **可靠性来自自愈,不来自门禁**:接受最终一致,每次写作前检测并修复(漏记/手改/崩溃统一收敛),宁停勿崩。
+5. **手改是一等公民**:已发布不可改是网文铁律 → 修改语义分三档:未发布(直接改+自动重入账)、已发布(只读,生成"圆设定方案")、设定/大纲(影响分析,分已发布/未发布两清单)。
+
+## 4. 写小说的问题空间(16 项)
+
+### "吃书"拆成五个性质不同的问题
+
+1. **客观事实**(修为/资产/物品)→ 增量记账。
+2. **时间线** → 每章强制时间锚点,必须从第 1 章执行,中途难补救。
+3. **知识状态/信息差** → 专门登记(谁知道什么、怎么知道的、谁不该知道);写前注入出场人物知识边界,审稿双向查(不知情者露知 / 装不知者露馅);"在场即知情"。升格定位:**爽点库存管理**——装逼打脸的本质是信息差兑现,可报告"蓄积 N 章未兑现"。
+4. **人设语气** → 无法账本化(漂移是渐变的);角色卡存典型对话原文做 few-shot + 周期语气体检 + 遮名盲测。
+5. **摘要信息损耗** → 理论上不可全解(压缩时不知道哪个细节未来重要);分层摘要管主干 + Grep 管细节 + 伏笔/承诺即"人工标注的未来相关性"。
+
+### 剧情结构
+
+6. **大纲漂移是双向的**:偏离是决策点不是 bug(拉回 / 改纲 / 进灵感池)。
+7. **改稿三档语义**(见原则 5)。
+8. **AI 的和解倾向**是对齐训练副作用,对网文是毒药:反派太讲道理、冲突过快化解、主角圣母。必须写作 prompt 前置反制(恶意落到实处、冲突升级到底、禁说教式和解),按题材配浓度。
+9. **桥段循环**:升级流 300 章模型会无意识循环装弱→被辱→打脸;需桥段使用史注入"冷却中"清单。**高频意象统计**("空气仿佛凝固"全书 47 次)用零 token 脚本逮。
+10. **情绪节奏**:每章标注情绪定位(压抑/铺垫/小爽/大爽/转折),体检看波形;平台预设定周期(番茄短周期 vs 起点可慢热)。
+
+### 文笔/AI 味
+
+11. **AI 味是分布问题不是词汇问题**:词汇/句式节奏/结构/telling-vs-showing 四层,禁词表只够第一层。主力解法是**文风锚定**(喂对标作者样本 few-shot)+ 句式体检脚本(句长方差/段落分布/高频开头)。
+12. **对话同质化**:口癖卡(句长习惯、绝不会说的词)+ 遮名盲测。
+13. **诚实边界**:承诺"读者不出戏",不承诺过 AI 检测器(军备竞赛,承诺即埋雷)。
+
+### 工程交互
+
+14. **控制点滑杆**:细纲确认(性价比最高的单一控制点)/ 正文确认两个开关;**全自动 ≠ 无控制,是控制上移到大纲层**(逐卷确认卷纲 → 无人值守连写 → 偏离进灵感池 → 周期体检)。交互/全自动两派是同一根滑杆的两端,一套实现。
+15. **连写质量漂移**:无人值守下错误自我强化,每 5-10 章强制体检,不过线即停。停止条件:写满章数 / 体检不过线 / 大纲耗尽(绝不让模型裸奔编纲)。
+16. **真源唯一**:正文 + 记忆 markdown,一切可重建。
+
+**优先级**:1/2/5/7/14 决定文件格式必须进骨架;3/8/9/11 是差异化卖点可增量加;4/10/12 体检类后置。
+
+## 5. 多平台策略(调研结论,2026-06 核验)
+
+- **SKILL.md 已是开放标准**(Anthropic 2025-12 开放,Codex/Gemini CLI/Cursor/Copilot/Windsurf 等 30+ 工具支持,路径 `.claude|.codex|.cursor|.gemini/skills/`)→ skills 层零适配,拷目录即用。
+- **Subagent 三大平台都有但无标准**:Claude/Gemini 用 markdown+frontmatter(路径不同),Codex 用 TOML(experimental)→ 角色规范单源 markdown,构建时生成三平台壳;**subagent 只做增强不做依赖**,skill 写降级路径。
+- Hook 同理:核心流程显式调脚本,hook 只是 Claude Code 上的自动兜底。
+- 弱模型现实(Codex 跑 GPT、Cursor 什么模型都有)让"流程薄+脚本确定性"从优雅变成必需。
+- 分发:`npx` 安装器(检测环境拷 skills,顺带解决 #90)。
+- 支持分级:一级 Claude Code + Codex(亲测),二级 Gemini/Cursor(社区反馈),其余"标准 SKILL.md 理论可用"。
+- Codex 对 skill 列表有约 8k 字符预算 → description 必须精简。
+- 继承 `multi-agent-adaptation-spec-2026-06-05` 的元层:support.md 核验纪律(官方链接+核验日期+smoke)、registry 分级、生成器+drift check、降级诚实条款、UTF-8 First;反转其 §5.1(真源从 runtime 换成 markdown);删除其 §8.3(gate/commit/projection 跨宿主硬要求)。
+
+## 6. 工程杂项(既定决策)
+
+- 命令名英文/拼音 + 中文描述;所有文件 UTF-8 无 BOM,`.gitattributes` 锁 LF;不用 .bat/.sh。
+- 字数统计按字符数自己写(`wc -w` 对中文无效)。
+- 写手与审稿分离(自己审自己会自我辩护),"新鲜上下文"靠独立命令/会话实现。
+- 许可证建议 MIT/Apache-2.0(v7 从零写,无 GPL 传染问题)。
+- 合规/敏感词不进 v1。
+- 直接采纳的用户需求:定点修复(#78/#99)、连写(#79)、手改重读(#100/#77)。