Просмотр исходного кода

fix: review 反馈修复——smart quotes / reference 路径 / loading map 补全

1. 修正 query/init/plan 共 44 个 smart quotes 为 ASCII 引号
2. write/init/query 引用表加入实际路径列,与 cat 命令一致
3. loading map 补全 init/query 的真实 reference 依赖
lingfengQAQ 2 месяцев назад
Родитель
Сommit
27a26ef288

+ 14 - 2
webnovel-writer/references/index/reference-loading-map.md

@@ -22,6 +22,17 @@
 | webnovel-review | Step 6 | blocking issue 需用户决策 | `references/review/blocking-override-guidelines.md` |
 | webnovel-plan | 章纲拆分 | always | `references/outlining/plot-signal-vs-spoiler.md` |
 | webnovel-init | 卖点/题材采集 | always | `references/genre-profiles.md` |
+| webnovel-init | Step 1 | always | `skills/webnovel-init/references/system-data-flow.md` |
+| webnovel-init | Step 1 | always | `skills/webnovel-init/references/genre-tropes.md` |
+| webnovel-init | Step 4 | always | `skills/webnovel-init/references/worldbuilding/faction-systems.md` |
+| webnovel-init | Step 4 | always | `skills/webnovel-init/references/worldbuilding/world-rules.md` |
+| webnovel-init | Step 5 | always | `skills/webnovel-init/references/creativity/creativity-constraints.md` |
+| webnovel-init | Step 5 | always | `skills/webnovel-init/references/creativity/selling-points.md` |
+| webnovel-init | Step 6 | always | `skills/webnovel-init/references/worldbuilding/setting-consistency.md` |
+| webnovel-query | 所有查询 | always | `skills/webnovel-query/references/system-data-flow.md` |
+| webnovel-query | 伏笔分析 | 伏笔相关查询 | `skills/webnovel-query/references/advanced/foreshadowing.md` |
+| webnovel-query | 节奏分析 | 节奏相关查询 | `references/shared/strand-weave-pattern.md` |
+| webnovel-query | 格式查询 | 标签相关查询 | `skills/webnovel-query/references/tag-specification.md` |
 
 ## CSV 检索(调用 `reference_search.py`)
 
@@ -38,10 +49,11 @@
 | webnovel-plan | 章纲拆分 | 新增角色出现 | `--skill plan --table 命名规则 --query "角色命名" --genre {题材}` |
 | webnovel-init | 起名采集 | 用户设定角色/书名/势力名 | `--skill init --table 命名规则 --query "{命名对象} {题材}" --genre {题材}` |
 
-## 无独立 reference 需求的 skills
+## 补充说明
 
 | Skill | 说明 |
 |-------|------|
-| webnovel-query | 参考需求主要是项目私有知识(CLI、数据源),已内联 skill |
+| webnovel-init | 按需 reference 较多(worldbuilding/creativity),完整清单见 skill 内引用表 |
+| webnovel-query | skill 私有 reference 已完整列入上表 |
 | webnovel-dashboard | P2,当前功能自洽,不挂独立 reference |
 | webnovel-learn | P2,分类规则可内联 skill |

+ 29 - 27
webnovel-writer/skills/webnovel-init/SKILL.md

@@ -8,48 +8,50 @@ allowed-tools: Read Write Edit Grep Bash Task AskUserQuestion WebSearch WebFetch
 
 ## 目标
 
-- 通过结构化交互收集足够信息,避免“先生成再返工”
+- 通过结构化交互收集足够信息,避免"先生成再返工"
 - 产出可落地项目骨架:`.webnovel/state.json`、`设定集/*`、`大纲/总纲.md`、`.webnovel/idea_bank.json`。
 - 保证后续 `/webnovel-plan` 与 `/webnovel-write` 可直接运行。
 
 ## 执行原则
 
 1. 先收集,再生成;未过充分性闸门,不执行 `init_project.py`。
-2. 分波次提问,每轮只问”当前缺失且会阻塞下一步”的信息。
+2. 分波次提问,每轮只问"当前缺失且会阻塞下一步"的信息。
 3. 允许调用 `Read/Grep/Bash/Task/AskUserQuestion/WebSearch/WebFetch` 辅助收集。
 4. 用户已明确的信息不重复问;冲突信息优先让用户裁决。
 5. Deep 模式优先完整性,允许慢一点,但禁止漏关键字段。
 
 ## 引用加载策略
 
+路径说明:`references/` 指 skill 私有 `skills/webnovel-init/references/`;`../../references/` 指共享 references。
+
 ### md 必读
 
-| Step | Trigger | Reference |
-|------|---------|-----------|
-| Step 1 | always | `references/system-data-flow.md` |
-| Step 1 | always | `references/genre-tropes.md` |
-| 卖点/题材采集 | always | `references/genre-profiles.md` |
+| Step | Trigger | Reference | 实际路径 |
+|------|---------|-----------|---------|
+| Step 1 | always | 数据流规范 | `${SKILL_ROOT}/references/system-data-flow.md` |
+| Step 1 | always | 题材套路库 | `${SKILL_ROOT}/references/genre-tropes.md` |
+| 卖点/题材采集 | always | 题材配置 | `${SKILL_ROOT}/../../references/genre-profiles.md` |
 
 ### md 按需
 
-| Step | Trigger | Reference |
-|------|---------|-----------|
-| Step 2 | 用户人物扁平 | `references/worldbuilding/character-design.md` |
-| Step 4 | always | `references/worldbuilding/faction-systems.md` |
-| Step 4 | 涉及修仙/玄幻/高武/异能 | `references/worldbuilding/power-systems.md` |
-| Step 4 | always | `references/worldbuilding/world-rules.md` |
-| Step 5 | always | `references/creativity/creativity-constraints.md` |
-| Step 5 | always | `references/creativity/selling-points.md` |
-| Step 5 | 复合题材 | `references/creativity/creative-combination.md` |
-| Step 5 | 卡顿 | `references/creativity/inspiration-collection.md` |
-| Step 5 | 题材映射命中 | `references/creativity/anti-trope-*.md` |
-| Step 6 | always | `references/worldbuilding/setting-consistency.md` |
+| Step | Trigger | Reference | 实际路径 |
+|------|---------|-----------|---------|
+| Step 2 | 用户人物扁平 | 角色设计 | `${SKILL_ROOT}/references/worldbuilding/character-design.md` |
+| Step 4 | always | 势力格局 | `${SKILL_ROOT}/references/worldbuilding/faction-systems.md` |
+| Step 4 | 涉及修仙/玄幻/高武/异能 | 力量体系 | `${SKILL_ROOT}/references/worldbuilding/power-systems.md` |
+| Step 4 | always | 世界规则 | `${SKILL_ROOT}/references/worldbuilding/world-rules.md` |
+| Step 5 | always | 创意约束 | `${SKILL_ROOT}/references/creativity/creativity-constraints.md` |
+| Step 5 | always | 卖点生成 | `${SKILL_ROOT}/references/creativity/selling-points.md` |
+| Step 5 | 复合题材 | 题材融合 | `${SKILL_ROOT}/references/creativity/creative-combination.md` |
+| Step 5 | 卡顿 | 灵感候选 | `${SKILL_ROOT}/references/creativity/inspiration-collection.md` |
+| Step 5 | 题材映射命中 | 反套路库 | `${SKILL_ROOT}/references/creativity/anti-trope-*.md` |
+| Step 6 | always | 设定一致性 | `${SKILL_ROOT}/references/worldbuilding/setting-consistency.md` |
 
 ### CSV 检索
 
 | Step | Trigger | 检索命令 |
 |------|---------|---------|
-| 角色/书名/势力设定 | 用户开始设定命名 | `python -X utf8 “${SCRIPTS_DIR}/reference_search.py” --skill init --table 命名规则 --query “{命名对象} {题材}” --genre {题材}` |
+| 角色/书名/势力设定 | 用户开始设定命名 | `python -X utf8 "${SCRIPTS_DIR}/reference_search.py" --skill init --table 命名规则 --query "{命名对象} {题材}" --genre {题材}` |
 
 ## 工具策略(按需)
 
@@ -61,7 +63,7 @@ allowed-tools: Read Write Edit Grep Bash Task AskUserQuestion WebSearch WebFetch
 - `WebFetch`:用于抓取已确定来源页面内容并做事实核验。
 - 外部检索触发条件:
   - 用户明确要求参考市场趋势或平台风向;
-  - 创意约束需要“时间敏感依据”
+  - 创意约束需要"时间敏感依据"
   - 对题材信息存在明显不确定。
 
 ## 交互流程(Deep)
@@ -92,7 +94,7 @@ export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
   - `templates/genres/`(仅在用户选定题材后按需读取)
 
 输出:
-- 进入 Deep 采集前的“已知信息清单”和“待收集清单”
+- 进入 Deep 采集前的"已知信息清单"和"待收集清单"
 
 ### Step 2:故事核与商业定位
 
@@ -131,11 +133,11 @@ export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
 ### Step 4:金手指与兑现机制
 
 收集项(必收):
-- 金手指类型(可为“无金手指”
+- 金手指类型(可为"无金手指"
 - 名称/系统名(无则留空)
 - 风格(硬核/诙谐/黑暗/克制等)
 - 可见度(谁知道)
-- 不可逆代价(必须有代价或明确“无+理由”
+- 不可逆代价(必须有代价或明确"无+理由"
 - 成长节奏(慢热/中速/快节奏)
 
 收集项(条件必收):
@@ -175,11 +177,11 @@ export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
 5. 用户选择最终方案,或拒绝并给出原因。
 
 备注:
-- 若用户要求“贴近当下市场”,可触发外部检索并标注时间戳。
+- 若用户要求"贴近当下市场",可触发外部检索并标注时间戳。
 
 ### Step 7:一致性复述与最终确认
 
-必须输出“初始化摘要草案”并让用户确认:
+必须输出"初始化摘要草案"并让用户确认:
 - 故事核(题材/一句话故事/核心冲突)
 - 主角核(欲望/缺陷)
 - 金手指核(能力与代价)
@@ -258,7 +260,7 @@ export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
 2. 目标规模可计算(字数或章数至少一个)。
 3. 主角姓名 + 欲望 + 缺陷完整。
 4. 世界规模 + 力量体系类型完整。
-5. 金手指类型已确定(允许“无金手指”)。
+5. 金手指类型已确定(允许"无金手指")。
 6. 创意约束已确定:
    - 反套路规则 1 条
    - 硬约束至少 2 条

+ 3 - 3
webnovel-writer/skills/webnovel-plan/SKILL.md

@@ -10,7 +10,7 @@ description: 基于总纲生成卷纲、时间线和章纲,并把新增设定
 - 基于总纲细化卷纲、时间线与章纲,不重做全局故事。
 - 先补齐设定基线,再产出可直接进入写作的章纲。
 - 卷纲完成后,把新增设定增量写回现有设定集。
-- 将详细大纲升级为“结构化详细大纲”,为下游写作提供中层情节结构。
+- 将详细大纲升级为"结构化详细大纲",为下游写作提供中层情节结构。
 
 ## 执行原则
 
@@ -103,7 +103,7 @@ cat "$PROJECT_ROOT/大纲/总纲.md"
 
 ### Step 2:补齐设定基线
 
-目标:让设定集从骨架模板进入“可规划、可写作”的状态。
+目标:让设定集从骨架模板进入"可规划、可写作"的状态。
 
 必须补齐:
 - `设定集/世界观.md`:世界边界、社会结构、关键地点用途
@@ -132,7 +132,7 @@ cat "${SKILL_ROOT}/../../templates/output/大纲-卷节拍表.md"
 ```
 
 硬要求:
-- 必须填写中段反转;若确实没有,写“无(理由:...)”
+- 必须填写中段反转;若确实没有,写"无(理由:...)"
 - 危机链至少 3 次递增
 - 卷末新钩子必须能落到最后一章的章末未闭合问题
 

+ 12 - 12
webnovel-writer/skills/webnovel-query/SKILL.md

@@ -13,10 +13,10 @@ allowed-tools: Read Grep Bash AskUserQuestion
 ## 项目根保护
 
 ```bash
-export WORKSPACE_ROOT=”${CLAUDE_PROJECT_DIR:-$PWD}”
-export SCRIPTS_DIR=”${CLAUDE_PLUGIN_ROOT}/scripts”
-export SKILL_ROOT=”${CLAUDE_PLUGIN_ROOT}/skills/webnovel-query”
-export PROJECT_ROOT=”$(python “${SCRIPTS_DIR}/webnovel.py” --project-root “${WORKSPACE_ROOT}” where)”
+export WORKSPACE_ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
+export SCRIPTS_DIR="${CLAUDE_PLUGIN_ROOT}/scripts"
+export SKILL_ROOT="${CLAUDE_PLUGIN_ROOT}/skills/webnovel-query"
+export PROJECT_ROOT="$(python "${SCRIPTS_DIR}/webnovel.py" --project-root "${WORKSPACE_ROOT}" where)"
 ```
 
 - `PROJECT_ROOT` 必须包含 `.webnovel/state.json`
@@ -36,14 +36,14 @@ export PROJECT_ROOT=”$(python “${SCRIPTS_DIR}/webnovel.py” --project-root
 
 ## 引用加载策略
 
-先识别查询类型,再按需加载:
+先识别查询类型,再按需加载。路径说明`references/` 指 skill 私有 `skills/webnovel-query/references/`;`../../references/` 指共享 references。
 
-| 查询类型 | Reference |
-|---------|-----------|
-| 所有查询 | `references/system-data-flow.md` |
-| 伏笔分析 | `references/advanced/foreshadowing.md` |
-| 节奏分析 | `references/shared/strand-weave-pattern.md` |
-| 格式查询 | `references/tag-specification.md` |
+| 查询类型 | Reference | 实际路径 |
+|---------|-----------|---------|
+| 所有查询 | 数据流规范 | `${SKILL_ROOT}/references/system-data-flow.md` |
+| 伏笔分析 | 伏笔分析 | `${SKILL_ROOT}/references/advanced/foreshadowing.md` |
+| 节奏分析 | Strand 模式 | `${SKILL_ROOT}/../../references/shared/strand-weave-pattern.md` |
+| 格式查询 | 标签规范 | `${SKILL_ROOT}/references/tag-specification.md` |
 
 不得同时加载两个以上 L2 文件,除非用户请求明确跨多类型。
 
@@ -51,7 +51,7 @@ export PROJECT_ROOT=”$(python “${SCRIPTS_DIR}/webnovel.py” --project-root
 
 1. **识别查询类型**:根据用户关键词匹配上表
 2. **加载参考**:只加载该类型需要的 reference
-3. **加载数据**:`cat “$PROJECT_ROOT/.webnovel/state.json”`
+3. **加载数据**:`cat "$PROJECT_ROOT/.webnovel/state.json"`
 4. **确认上下文充足**:查询类型已识别 + 参考已加载 + state 已加载
 5. **执行查询**:按类型检索对应数据源
 6. **格式化输出**:按下方模板输出

+ 13 - 11
webnovel-writer/skills/webnovel-write/SKILL.md

@@ -83,17 +83,19 @@ allowed-tools: Read Write Edit Grep Bash Task
 
 ### md 必读(L1,直接 Read)
 
-| Step | Trigger | Reference |
-|------|---------|-----------|
-| Step 1 | always | `references/reading-power-taxonomy.md` |
-| Step 1 | always | `references/genre-profiles.md` |
-| Step 1 | always | `references/style-variants.md` |
-| Step 2 | always | `references/shared/core-constraints.md` |
-| Step 2 | always | `references/anti-ai-guide.md` |
-| Step 3 | always | `references/review-schema.md`(reviewer agent 内部使用) |
-| Step 4 | always | `references/polish-guide.md` |
-| Step 4 | always | `references/writing/typesetting.md` |
-| Step 4 | always | `references/style-adapter.md` |
+路径说明:`../../references/` 指共享 references;`references/` 指 skill 私有 `skills/webnovel-write/references/`。
+
+| Step | Trigger | Reference | 实际路径 |
+|------|---------|-----------|---------|
+| Step 1 | always | 追读力分类 | `${SKILL_ROOT}/../../references/reading-power-taxonomy.md` |
+| Step 1 | always | 题材配置 | `${SKILL_ROOT}/../../references/genre-profiles.md` |
+| Step 1 | always | 风格差异化 | `${SKILL_ROOT}/references/style-variants.md` |
+| Step 2 | always | 核心约束 | `${SKILL_ROOT}/../../references/shared/core-constraints.md` |
+| Step 2 | always | Anti-AI 预防 | `${SKILL_ROOT}/references/anti-ai-guide.md` |
+| Step 3 | always | 审查 schema | `${SKILL_ROOT}/../../references/review-schema.md`(reviewer 内部使用) |
+| Step 4 | always | 润色指南 | `${SKILL_ROOT}/references/polish-guide.md` |
+| Step 4 | always | 排版规则 | `${SKILL_ROOT}/references/writing/typesetting.md` |
+| Step 4 | always | 风格适配 | `${SKILL_ROOT}/references/style-adapter.md` |
 
 ### CSV 检索(L2,调用 `reference_search.py`)