Jelajahi Sumber

feat(v7): M4 P2——两审角色单源(DTO 化重构) + SKILL.md 单入口 + registry/support

- roles/{事实审查,编辑审}.md:吃 ReviewInput DTO,输出 §8 schema;零 python/脚本/文件路径(重构而非拷贝 v6 reviewer.md)
- category/severity/schema 用占位符,P3 从 schema.js 注入(单源不双表)
- skills/webnovel-writer/SKILL.md:状态机单入口 + agentCapable/hasHooks 条件块(两审完整/兼容、SessionStart)
- templates/AGENTS.md(标记块)、adapters/registry.json(三级)、claude-code/codex support.md(诚实标注 smoke 推迟 beta)
lingfengQAQ 1 hari lalu
induk
melakukan
c38b6a1085

+ 4 - 4
.trellis/tasks/06-27-m4-ai-roles/implement.md

@@ -43,10 +43,10 @@ P5 AC 复核 + CI 双平台;真模型 smoke 推迟文档
 
 ## P2 角色单源 + 宿主壳源(R4 撰写面)
 
-- [ ] P2.1 `roles/事实审查.md`:吃 ReviewInput DTO,五维 + v7 四项(requirement/leak/evidence/unregistered_thread),输出 §8 schema;**无 python/脚本/文件路径**(对照 AC6)
-- [ ] P2.2 `roles/编辑审.md`:structure/pacing/commercial/motivation;排除"评文笔好坏"
-- [ ] P2.3 `skills/webnovel-writer/SKILL.md`:状态机单入口 + 平台条件块(agentCapable/hasHooks)+ 降级顺序版编译块;description ≤ Codex 8k
-- [ ] P2.4 `templates/AGENTS.md`(标记块)、`adapters/registry.json`(三级)、`adapters/{claude-code,codex}/support.md`(官方链接+核验日期+支持情况+降级+smoke 命令)。
+- [x] P2.1 `roles/事实审查.md`:吃 ReviewInput,五维 + v7 四项(requirement/leak/evidence/unregistered_thread),输出 §8 schema;category/severity/schema 用占位符 `{{categories.factCheck}}`/`{{severities}}`/`{{schema.example}}`(P3 从 schema.js 注入,单源不双表)。grep 确认无 python/路径
+- [x] P2.2 `roles/编辑审.md`:structure/pacing/commercial/motivation;评结构与商业性不替作者重写
+- [x] P2.3 `skills/webnovel-writer/SKILL.md`:状态机单入口 + `{{#if agentCapable}}`/`{{#if hasHooks}}` 条件块(两审完整/兼容、SessionStart 有无)+ 降级声明;description 精简
+- [x] P2.4 `templates/AGENTS.md`(标记块)、`adapters/registry.json`(三级 + agentCapable/hasHooks/smoke_status)、`adapters/{claude-code,codex}/support.md`(诚实标注 smoke 推迟 beta)。
 
 **验证 P2**:人工评审 + grep 断言(roles 无 `python`/路径);留给 P3 生成器/validator 机检
 **提交 P2**:`feat(v7): M4 P2——两审角色单源(DTO 化重构)+ SKILL.md 单入口 + registry/support`

+ 9 - 0
v7/adapters/claude-code/support.md

@@ -0,0 +1,9 @@
+# Claude Code 宿主支持核验
+
+- 官方文档:https://docs.claude.com/en/docs/claude-code (skills / subagents / hooks)
+- 核验日期:2026-06-27(结构核验;官方文档复核 + 真模型 smoke 推迟 beta)
+- skill:支持,SKILL.md 开放标准,发现路径 `.claude/skills/`
+- subagent:支持,`.claude/agents/` markdown + frontmatter
+- hook:支持,SessionStart 注入 books.jsonl 上下文
+- 降级策略:完整两审(事实审查/编辑审各独立 subagent)
+- smoke:`node scripts/smoke.mjs --host claude-code`(推迟 beta 手测:建书→写1章→两审→定稿)

+ 9 - 0
v7/adapters/codex/support.md

@@ -0,0 +1,9 @@
+# Codex 宿主支持核验
+
+- 官方文档:https://developers.openai.com/codex (skills / agents)
+- 核验日期:2026-06-27(结构核验;官方文档复核 + 真模型 smoke 推迟 beta)
+- skill:支持,SKILL.md;`description` 受约 8k 字符预算
+- subagent:实验性支持,TOML agents
+- hook:不支持
+- 降级策略:无 hook → 状态机入口读 `books.jsonl` 等价注入;subagent 实验性 → 两审优先完整,不稳时降级兼容模式并声明
+- smoke:`node scripts/smoke.mjs --host codex`(推迟 beta 手测:建书→写1章→两审→定稿)

+ 39 - 0
v7/adapters/registry.json

@@ -0,0 +1,39 @@
+{
+  "schema_version": "webnovel-host-registry/v2",
+  "hosts": {
+    "claude-code": {
+      "tier": 1,
+      "verified": "结构就绪,真模型 smoke 推迟 beta",
+      "agentCapable": true,
+      "hasHooks": true,
+      "smoke": "node scripts/smoke.mjs --host claude-code",
+      "smoke_status": "deferred-beta"
+    },
+    "codex": {
+      "tier": 1,
+      "verified": "结构就绪,真模型 smoke 推迟 beta",
+      "agentCapable": true,
+      "hasHooks": false,
+      "smoke": "node scripts/smoke.mjs --host codex",
+      "smoke_status": "deferred-beta"
+    },
+    "gemini-cli": {
+      "tier": 2,
+      "verified": "社区反馈",
+      "agentCapable": true,
+      "hasHooks": false
+    },
+    "cursor": {
+      "tier": 2,
+      "verified": "社区反馈",
+      "agentCapable": true,
+      "hasHooks": false
+    },
+    "_default": {
+      "tier": 3,
+      "verified": "标准 SKILL.md 理论可用",
+      "agentCapable": false,
+      "hasHooks": false
+    }
+  }
+}

+ 32 - 0
v7/roles/事实审查.md

@@ -0,0 +1,32 @@
+---
+name: 事实审查
+description: 读整章草稿,逐维度核出可验证的事实/一致性/逻辑问题,输出结构化问题清单。
+---
+# 事实审查
+
+你是事实审查员。只用传入的 ReviewInput 核对草稿,逐维度找出可验证的问题,输出问题清单 JSON。不读文件、不调脚本。
+
+## 输入(ReviewInput)
+章号、草稿全文、本章要写到的事、全书近况、相关角色(境界/状态/位置/持有)、时间线片段、信息差候选。
+
+## 维度(category)
+- setting:能力/境界/地点/物品与相关角色及已建立规则一致
+- timeline:与时间线片段衔接,无矛盾回跳
+- continuity:上章钩子有回应,场景与情绪有过渡
+- character:对白行为合角色设定,角色只用其知道的信息
+- logic:因果成立,决策有动机,强弱对比自洽
+- requirement:逐条核对「本章要写到的事」是否写到
+- leak:核对是否泄露「信息差候选」里读者未知的信息
+- evidence:履历引用的章内证据属实
+- unregistered_thread:正文有疑似伏笔信号但无对应条目,门槛保守,出候选
+
+可用 category 全集:{{categories.factCheck}}
+
+## 输出(严格 JSON,无其他文本)
+{{schema.example}}
+
+## 规则
+- 每条 issue 给 evidence:草稿引用 vs 输入数据
+- severity ∈ {{severities}};critical 自动 blocking=true
+- unregistered_thread 恒 blocking=false,交作者裁决
+- 只报可验证问题,评事实不评文笔

+ 26 - 0
v7/roles/编辑审.md

@@ -0,0 +1,26 @@
+---
+name: 编辑审
+description: 读整章草稿,从结构/节奏/商业性/主角动机给出可执行的修改问题清单。
+---
+# 编辑审
+
+你是编辑审稿员。只用传入的 ReviewInput 评估草稿的可读性与商业性,输出问题清单 JSON。不读文件、不调脚本。
+
+## 输入(ReviewInput)
+章号、草稿全文、本章要写到的事、全书近况、相关角色、时间线片段。
+
+## 维度(category)
+- structure:场景切分、信息密度、起承转合
+- pacing:爽点密度、章末钩子、张弛节奏
+- commercial:题材卖点是否兑现,同质化风险
+- motivation:主角目标与动机清晰可信、驱动情节
+
+可用 category 全集:{{categories.editorial}}
+
+## 输出(严格 JSON,无其他文本)
+{{schema.example}}
+
+## 规则
+- 每条 issue 给 fix_hint:可执行的修改方向
+- severity ∈ {{severities}};critical 自动 blocking=true
+- 评结构与商业性,把情节决定权留给作者

+ 43 - 0
v7/skills/webnovel-writer/SKILL.md

@@ -0,0 +1,43 @@
+---
+name: webnovel-writer
+description: 中文长篇网文写作单入口。说「继续/写下一章/建书/回到第N章/吃书」即进状态机,自动判定下一步并走写章流程;事实只经定稿流程入 git。
+---
+# webnovel-writer
+
+中文长篇网文写作系统的单一入口。能数的交脚本,要判断的交两审,事实只经定稿流程入 git。
+
+## 启动
+{{#if hasHooks}}
+SessionStart 已注入「当前在写哪本 / 共几本 / 全书近况入口」。
+{{/if}}
+{{#unless hasHooks}}
+启动先取会话上下文:读工作目录 `.webnovel/books.jsonl`,报「当前在写哪本 / 共几本」;登记缺失则扫描含 `book.yaml` 的子目录重建书单,请作者选当前书。
+{{/unless}}
+
+## 单入口:判定下一步
+作者说「继续」,运行 `webnovel-writer next`(git 健康检查先行),按返回的序执行:
+- 序0 修复确认 / 序1 建书 / 序4 卷复盘 / 序6 起草细纲:吃返回的 DTO 产结构化产物,交脚本落盘。
+- 序2 手改补登 / 序3 断点续跑 / 序5 体检:按返回指引执行。
+
+## 写章流程
+1. 备料:`webnovel-writer prepare-chapter <章号>`,读 `工作区/本章写作材料.md` 写草稿到 `工作区/草稿.md`。
+2. 机检:`webnovel-writer mechanical-check <章号>`,按清单修可计数项。
+3. 两审同一份 ReviewInput:
+{{#if agentCapable}}
+   完整模式——派两个独立 subagent,分别按 `事实审查`、`编辑审` 任务书审,各自新鲜上下文。
+{{/if}}
+{{#unless agentCapable}}
+   兼容模式——按 `事实审查`、`编辑审` 两份任务书顺序自审;审稿单声明「兼容模式(单上下文顺序审稿),隔离度低于完整两审」。
+{{/unless}}
+   审稿单落 `工作区/审稿.md`,作者:接受 / 改完接受 / 打回。
+4. 定稿:作者敲定后由脚本原子 commit(正文入定稿、条目与设定与时间线更新、章摘要入档、工作区清空)。
+
+## 例外流程
+- 回到第N章:`webnovel-writer goto-chapter <章号>`,先备份再回滚。
+- 影响分析:`webnovel-writer impact <关键词>`。
+- 吃书:按状态机指引改设定与条目,retcon commit。
+
+## 铁律
+- 事实变更只经定稿流程入 git。
+- 能数的交脚本,要判断的交两审。
+- 只吃整理好的 DTO,按提供的上下文工作。