# 设定编辑

> 当用户表示要编辑或创建设定、修改世界观、完善设定文件、填写核心设定、 补充作品简介、调整次要设定等与作品设定编辑相关的意图时，触发此技能。 触发短语包括但不限于："编辑设定"、"修改设定"、"完善设定"、 "写设定"、"世界观设定"、"开始设定"、"编辑世界观"、 "补充核心设定"、"修改基本信息"、"补充简介"、"编辑次要设定"、 "打开设定"、"做设定"、"设定编辑"、"完善世界观"、 "填写设定"、"更新设定"、"调整设定"等。 此技能引导用户逐项编辑作品设定模板，与"新书"技能创建的设定.md 关联， 支持对基本信息、简介、核心设定、世界观、次要设定板块的增删改查。

- Skill: `jackal9384/skill-7` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jackal9384/skill-7`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jackal9384/skill-7/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jackal9384 (https://skillmd.com/u/jackal9384)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jackal9384/skill-7

---


# 设定编辑

此技能用于辅助用户进行作品设定的全方位编辑，支持从"新书"技能创建的 `设定.md` 出发，对各板块逐一引导填写。

## 核心定位

- **板块驱动编辑**：将作品设定拆为基本信息/简介/核心设定/世界观/次要设定五个板块，每次只处理一个，编辑完成后即时写回文件
- **计划模式入口**：所有操作必须先进入计划模式（EnterPlanMode），列出各板块当前完成状态与编辑目标，用户批准后执行
- **多源数据感知**：自动读取 `项目信息.json` 获取书名/分级/NSFW 偏好，读取 `写作配置.json` 确定加工深度，不重复询问已有信息
- **NSFW 协调**：编辑基本信息时若用户切换内容分级为 NSFW，自动触发 NSFW 偏好配置询问并写入 `项目信息.json`

## 关联文件

| 文件 | 位置 | 用途 | 读写 |
|------|------|------|------|
| `设定.md` | `大纲/设定/` 或 `outline/settings/` | 作品设定的唯一输出文件 | 读写 |
| `项目信息.json` | `大纲/` 或 `outline/` | 书名、分级、NSFW 偏好——基本信息区直接引用 | 读写 |
| `写作配置.json` | `大纲/` 或 `outline/` | 润色模式 + **`角色语气`（角色级语气配置，由创建人物维护）** | 读写 |
| `settings-editing-guide.json` | `data/` | 板块引导数据（各板块询问模板 + 正反例，按需读取） | 只读 |
| `术语表.json` | `大纲/` | 核心术语定义 + 禁用混指词——写正文时 Write-Router 读取并随数据包分发 | 读写 |

**文件定位优先级**：
1. 当前工作目录 → `大纲/设定/设定.md`
2. 当前工作目录 → `outline/settings/settings.md`
3. 用户手动指定的路径
4. 以上均不存在 → 提示用户先运行"新书"技能创建项目

## 执行模式：计划模式

**调用此技能后，必须首先进入计划模式（EnterPlanMode）。**

1. 使用 `EnterPlanMode` 工具进入计划模式
2. 在计划中列出：
   - 目标设定文件路径
   - 当前各板块完成状态（已填写/待填写/必选/可选）
   - 本次将编辑的板块和询问内容
   - 润色模式（从 `大纲.polish_mode` 读取）
3. 等待用户批准计划后执行
4. 不要在进入计划模式前直接开始询问或写入

## 触发条件

当用户表达以下意图时，立即调用此技能：

- "编辑设定"、"修改设定"、"完善设定"、"写设定"
- "世界观设定"、"编辑世界观"、"完善世界观"、"开始设定"
- "补充核心设定"、"修改基本信息"、"补充简介"、"编辑次要设定"
- "打开设定"、"做设定"、"设定编辑"、"填写设定"、"更新设定"、"调整设定"
- 任何表达"编辑/完善作品世界观或设定文件"的类似表述

---

## 设定文件模板

> **结构定义唯一来源**：模板库 `templates/settings.schema.json`（注册 id：`settings`，见 `templates/index.json`）。下方模板为渲染示例——板块结构/必填/渲染格式/管理约束均以 schema 为准，本技能不自行维护结构定义。

最终的设定文件应遵循以下结构（`[]` 为必填，`{}` 为说明）：

```markdown
# {书名} — 作品设定

> 最后更新：{YYYY年MM月DD日}

## 基本信息

- **书名**：{书名}
- **传播范围**：{传播向 / 个人向}
- **内容分级**：{一般向 / NSFW}
- **篇幅长度**：{随笔 / 短篇 / 短篇（连载） / 中篇 / 长篇}
- **书籍种类**：{用户填写的种类}

---

## 简介

{对外展示的作品简介或自己对作品的基本描述，可同时存在}

### 对外简介

{面向读者的宣传简介，50-100字为宜}

### 个人描述

{作者自己对作品的理解和定位，可随意写}

---

### 核心设定 [必选]

{包含势力/阵营格局、世界、故事走向的基本描述}

**人物**：{世界层面的势力/阵营格局与人物关系网（非具体角色人设）}

**世界**：{世界观一句话概括}

**故事走向**：{主线方向（不展开具体人设）}

---

### 世界观 [必选]

{描述这个世界的方方面面。大类使用加粗标题，子类用 ###、细分用 #### 组织，允许三级分层}

**{分类项1}**：
{内容}

---

**{分类项2}**：
{内容}

---

### 次要设定 [可选]

{分类收纳其他次要设定，便于人类查看和后续扩展}

#### {分类1}

{内容}

#### {分类2}

{内容}
```

## 模板规则（定义见 `templates/settings.schema.json` 的 `blocks`）

| 板块 | 必填 | 标题格式 | 内容格式 |
|------|------|---------|---------|
| 基本信息 | 是 | `## 基本信息` | 无序列表（`- **字段**：值`） |
| 简介 | 至少填一个 | `## 简介` + `### 对外简介`/`### 个人描述` | 自由文本 |
| 核心设定 | 是（三要素至少一个） | `### 核心设定 [必选]` | 粗体子标题 `**人物**：`/`**世界**：`/`**故事走向**：` |
| 世界观 | 是（至少一个分类项） | `### 世界观 [必选]` | 大类 `**{分类}**：` 加粗，子类 `###`、细分 `####` 三级分层 |
| 次要设定 | 否 | `### 次要设定 [可选]` | `#### {分类}` 小标题收纳 |

**核心规则**：
- 世界观子项采用三级分层：大类 `**{项}**：` 加粗、子类 `###`、细分 `####`（可下钻至 h4）
- 子项之间以 `---` 分割线分隔
- 基本信息与 `项目信息.json` 保持同步——修改基本信息时同步更新 JSON

---

## 工作流程

### 步骤 0：定位并读取设定文件

**0.1 定位文件**

按关联文件优先级查找设定文件：

```
大纲/设定/设定.md  →  outline/settings/settings.md  →  用户手动指定
```

**0.2 文件状态处理**

| 文件状态 | 处理 |
|---------|------|
| 文件存在 | `Read` 读取全文，进入步骤 1 |
| 文件不存在 | 询问用户：在当前目录新建 / 指定已有路径 / 先创建新书项目 |
| 文件存在但为空 | 视为"待填写"状态，按模板注入初始骨架后进入步骤 1 |

**0.3 新建设定文件**

若用户选择新建：
1. 以当前工作目录名或用户指定的书名为准
2. 按上述设定文件模板写入初始骨架
3. 各板块内容写为 `（待填写）`

**0.4 同步读取上下文**

读取设定文件后，同步读取 `项目信息.json` 和 `写作配置.json`：
- 从 `项目信息.json` 提取：`book_name`、`distribution`、`content_rating`、`length`、`genre`、`volumes`
- 从 `写作配置.json` 提取：`大纲.polish_mode`、`正文.polish_mode`、`分卷` 覆盖项
- 如设定文件中的基本信息与 JSON 不一致 → 以 JSON 为准，标注差异供用户确认

### 步骤 1：展示状态并询问编辑目标

读取文件后，向用户展示各板块完成状态：

```
📋 「{书名}」作品设定状态

| 板块 | 状态 | 约束 |
|------|------|------|
| 基本信息 | ✅ 已填写 / ⬜ 待填写 | — |
| 简介 | ✅ 已填写 / ⬜ 待填写 | 至少填一个 |
| 核心设定 | ✅ 已填写 / ⬜ 待填写 | 🔴 必选 |
| 世界观 | ✅ 已填写 / ⬜ 待填写 | 🔴 必选（≥1 分类项） |
| 次要设定 | ✅ 已填写 / ⬜ 待填写 | ⭕ 可选 |
| 设定铁律 | ✅ 已填写 / ⬜ 待填写 | ⭕ 可选 |
| 术语表 | ✅ 已填写 / ⬜ 待填写 | ⭕ 可选 |

你想编辑哪个部分？
  • 输入编号 1-7 选择单个板块
  • 输入"全部"按顺序逐一引导
  • 输入"跳过"结束编辑
```

### 步骤 2：按板块引导编辑

根据用户选择，逐一引导。每次只处理一个板块，完成后回到选择界面（除非用户选了"全部"连续模式）。

**用户可随时说**："回到板块选择"、"换一个"、"直接编辑世界观"——支持自由跳转。

---

#### 2.1 编辑基本信息

**2.1.1 读取现状**

从 `项目信息.json` 读取当前基本信息（展示模板见 `data/settings-editing-guide.json` → `sections.b1_status.prompt`）。

**2.1.2 逐项修改**

修改顺序：书名 → 传播范围 → 内容分级 → 篇幅长度 → 书籍种类。

**传播范围选项**（模板见 `sections.b1_distribution.prompt`）：

**内容分级规则**：
- 默认保持 `一般向`
- 用户主动提及 NSFW/成人内容时才切换为 `NSFW`
- **切换为 NSFW 时**：自动触发 NSFW 偏好配置询问（色色值域/输出词级别；若选择了限制级则追问角色语气——询问模板见 `sections.b1_nsfw.prompt`），组装 JSON 后调度 `成品输出校验` → 校验后写入 `项目信息.json`

**篇幅长度选项**（模板见 `sections.b1_length.prompt`）：

**2.1.3 双写同步**

基本信息修改后，必须同步更新两个位置：
1. `设定.md` 中的 `## 基本信息` 区块
2. `项目信息.json` 中对应的 JSON 字段 + `last_updated`

```
✅ 基本信息已更新
  • 设定.md ── 基本信息区块已同步
  • 项目信息.json ── {修改项} 已更新
```

---

#### 2.2 编辑简介

简介支持双轨：对外简介（读者面向）和个人描述（作者面向）。

**2.2.1 状态检查**

展示当前状态后逐一处理（状态模板见 `sections.b2_status.prompt`）。

**2.2.2 编辑对外简介**

（询问模板见 `sections.b2_public.prompt`；润色确认模板见 `sections.b2_public_confirm.prompt`；正反例对照 2 组见 `examples.public_intro`）

用户输入后，按 `大纲.polish_mode` 润色后展示确认。

**2.2.3 编辑个人描述**

（询问模板见 `sections.b2_personal.prompt`）

处理流程同 2.2.2。

**2.2.4 空值检查**

两个子项均跳过时，在对外简介处写入 `（待填写）`。

---

#### 2.3 编辑核心设定 [必选]

核心设定是必填项，包含三个子要素：人物（势力/阵营格局）、世界、故事走向。至少填写一个。

**边界**：核心设定只留「世界规则」级约束——具体角色人设引导到「创建人物」，剧情展开引导到「剧情编辑」。

**2.3.1 状态展示**

（状态模板见 `sections.b3_status.prompt`）

**2.3.2 逐项引导**

**人物**（模板见 `sections.b3_character.prompt`）：

**世界**（模板见 `sections.b3_world.prompt`）：

**故事走向**（模板见 `sections.b3_direction.prompt`）：

**2.3.3 空值约束**

三项全空时——禁止跳过（提示模板见 `sections.b3_empty.prompt`）：

**2.3.4 润色与写入**

每项填写后按 `大纲.polish_mode` 润色，用户确认后即时写入 `设定.md`。

---

#### 2.4 编辑世界观 [必选]

世界观是必填项，由多个分类子项组成。至少需要一个分类项。

**2.4.0 题材预设注入**

进入世界观板块时，先尝试用题材预设为分类提供脚手架（软引导，可跳过）：

1. 读取 `项目信息.json` → `genre`（书籍种类）
2. 在 `data/settings-presets.json` → `presets` 中按 `match` 关键词匹配题材；关键词未命中 → 由 LLM 判断最接近的题材或判定无匹配
3. 命中 → 展示该题材的分类树骨架：

```
🌌 检测到题材「{题材名}」，建议以下世界观分类：
   {分类1} / {分类2} / {分类3} …

   可选操作：
     • 整用 — 整棵采用该分类树（大类 + 子类 + 引导问题）
     • 挑选 — 只挑其中几类
     • 自定义 — 完全自己定义分类
     • 跳过 — 走自由模式（现状）
```

4. 无匹配 → 走现有自由模式（现状，永久兜底）

**关键原则**：预设是软引导脚手架，不硬套；用户永远可添加预设之外的分类（如"筛选史"这类自定义项）。

**2.4.1 结构约束**

（结构示意模板见 `sections.b4_structure.prompt`）

- 大类使用 `**{分类名}**：` 加粗格式
- 大类下可用 `###` 子类、`####` 细分组织（三级分层，可下钻至 h4）
- 条目之间以 `---` 分割

**2.4.2 管理循环**

（菜单模板见 `sections.b4_menu.prompt`；添加见 `sections.b4_add.prompt`；修改见 `sections.b4_edit.prompt`；删除确认见 `sections.b4_delete.prompt`）

**重命名**：
```
🌌 将「{旧名称}」重命名为？
   → {新名称}
   → 仅改标题，内容保留
```

**2.4.3 空值约束**

世界观至少需要一个分类项。用户试图在零分类项时选"完成"：
```
⚠️ 世界观为必选板块，至少需要添加一个分类项。
   建议从"地理/世界格局"开始——这是最基础的世界观锚点。
```

**2.4.4 分类参考**

用户不确定如何分类时，题材分类树预设已数据化到 `data/settings-presets.json`（5 套：西幻/玄幻仙侠/科幻/都市奇幻/历史架空），由 2.4.0 按题材自动匹配注入。未命中题材时走自由模式自行分类——预设是脚手架，用户永远可自定义分类名。

**2.4.5 文件拆分与索引维护**

某分类内容较长时触发拆分，避免设定.md 无限膨胀：

1. **拆分判断**：编辑/添加分类时，内容超过约 800 字 → 提示「该分类内容较长，建议拆分为独立文件 `大纲/设定/{分类名}.md`」，用户确认后拆分
2. **拆分执行**：内容移入 `大纲/设定/{分类名}.md`，设定.md 该分类只留摘要 + 链接 `详见 [分类名.md](分类名.md)`
3. **索引维护**：设定.md 末尾自动维护「设定文件索引」表（文件 → 内容摘要），结构见 `templates/settings.schema.json` → blocks → `设定文件索引`
4. **防重复**：拆分前先查索引是否已有同名文件 → 有则合并/更新而非新建

---

#### 2.5 编辑次要设定 [可选]

次要设定完全可选，结构类似世界观但使用 `####` 小标题分类。

**2.5.1 状态展示**

```
⭕ 次要设定 — 可选板块

当前状态：{已填写 N 项 / （暂不填写）}

需要编辑吗？
  • 是 — 进入管理循环
  • 否 — 保持现状，回到板块选择
```

**2.5.2 管理循环**

与世界观 2.4.2 管理循环一致：添加 / 修改 / 删除 / 重命名 / 完成。

分类示例：道具设定、组织设定、历史年表、文化习俗、货币体系、交通方式等。

次要设定同样适用 2.4.5 文件拆分与索引维护（超长分类拆独立文件 + 索引登记）。

**2.5.3 空值处理**

用户选择不填写或全部删除：
```
⭕ 次要设定已清空，在设定文件中标注为「（暂不填写）」。
   后续随时可说"编辑次要设定"重新打开。
```

---

#### 2.6 编辑设定铁律 [可选]

设定铁律是世界观骨架——不可破坏的世界规则。新增/修改世界观分类时自动对照铁律做自洽检查。

**2.6.1 状态展示**

（菜单模板见 `sections.b5_menu.prompt`）

**2.6.2 管理循环**

与世界观 2.4.2 管理循环一致：添加 / 修改 / 删除 / 完成。

**添加铁律**（模板见 `sections.b5_add.prompt`）：
**修改铁律**（模板见 `sections.b5_edit.prompt`）：
**删除确认**（模板见 `sections.b5_delete.prompt`）：

**2.6.3 自洽检查（贯穿世界观编辑）**

世界观板块（2.4）新增或修改分类时，若已存在设定铁律，自动对照铁律做自洽检查——新内容与任一铁律冲突时提示（模板见 `sections.b5_conflict.prompt`），由用户决定「仍要写入」或「修改表述」。无铁律时跳过检查。

---

#### 2.7 编辑术语表 [可选]

术语表是项目级机器规格（`大纲/术语表.json`）——核心术语的准确定义与禁用混指词，写正文时由 Write-Router 读取并随数据包分发，Core 遇禁用词自动纠偏。

**2.7.1 状态展示**

（菜单模板见 `sections.b6_menu.prompt`）

**2.7.2 添加术语**

（模板见 `sections.b6_add.prompt`）收集四要素：术语名 / 准确定义 / 禁用混指词（可空）/ 补充说明（可空），组装为条目写入 `大纲/术语表.json`（结构见 `templates/glossary.schema.json`）。

**2.7.3 修改 / 删除**

与世界观 2.4.2 管理循环一致。

**2.7.4 落盘**

术语表写入 `大纲/术语表.json` 后，经成品输出校验（`type: "json"`, `expected_schema: "术语表"`）落盘。

---

#### 2.8 Write-Router 调度 Core 写作规范加工（贯穿全流程，写入前必经步骤）

**一切供人阅读的设定文本，写入文件前必须经过 Write-Router（轻量模式）→ Core（基础写作辅助）加工。**

每次用户输入设定内容后，按以下流程处理：

1. 读取 `大纲/写作配置.json`（或 `outline/polish-config.json`）
2. **润色模式取用优先级**：先查 `分卷.{当前编辑所属卷号}` → 无覆盖项则用 `大纲.polish_mode`
3. 将用户输入的内容组装数据包传入 Write-Router（轻量模式）：

```
{
  "mode": "creation_phase",
  "text": "{用户输入的设定文本}",
  "context": {
    "source_skill": "设定编辑",
    "content_type": "大纲文本",
    "field_name": "{对外简介/个人描述/核心设定-人物/核心设定-世界/核心设定-故事走向/世界观-{分类名}/次要设定-{分类名}}"
  },
  "polish_mode": "{有效润色模式}",
  "polish_config": { "{写作配置 JSON}" }
}
```

> **协议来源**：`field_name` 枚举统一定义于模板库 `templates/index.json` 的 `protocols.field_name`——新增设定字段时同步在 index.json 注册，本技能不自行维护枚举。

4. Write-Router 通过轻量模式调度 Core 按大纲文本规范（规范 1.5/1.6/5）加工后返回 `{ "processed_text": "{加工后文本}", "changes_summary": "{调整摘要}" }`

5. 将加工后文本展示给用户确认：

```
✏️ 加工后（{polish_mode}模式）：
{加工后文字}

这样可以吗？
  • 可以 — 写入设定文件
  • 修改 — 重新调整
  • 用原文 — 不做润色，直接写入原话
```

6. 用户选择"用原文"时尊重原话，但仍须经 Write-Router → Core 做规范 1.6（破折号禁令）和基本标点修正——此为不可跳过的硬约束

---

#### 2.9 管理写作配置与分卷配置（全局+分卷）

允许用户在设定编辑流程中随时调整全局润色模式和分卷润色覆盖。

**入口触发**：用户在设定编辑中说"切换润色模式"、"修改写作配置"、"调整分卷润色"、"分卷写作配置"。

**2.9.1 展示当前配置**

```
✏️ 写作配置管理

📌 全局配置：
  • 大纲：「{大纲.polish_mode}」— {大纲.mode_description}
  • 正文：「{正文.polish_mode}」— {正文.mode_description}

{如已分卷}
📚 分卷覆盖：
  • 卷1「{卷1名}」：「{模式或"继承全局"}」
  • 卷2「{卷2名}」：「{模式或"继承全局"}」
  ...

需要调整什么？
  • 全局大纲 — 调整大纲类全局润色模式
  • 全局正文 — 调整正文类全局润色模式
  • 分卷 — 调整某卷的独立写作配置
  • 写作偏好库 — 开启/关闭个人风格优化（影响 Token 消耗）
  • 角色语气 — 查看各角色语气配置
  • 完成 — 回到板块选择
```

**2.9.2 调整全局润色**

```
✏️ 请选择「{大纲/正文}」润色程度：
  • 轻度 — 保留用户原话，仅书面化、规范化书写
  • 中度 — 小幅优化用户原话（改动幅度 ≤60%）
  • 重度 — 仅保留原意，完全改写、润色、扩写内容
```

更新 `写作配置.json` 对应轨道的 `polish_mode`、`mode_description`、`last_updated`。

**2.9.3 调整分卷润色覆盖**（仅当 `volumes.enabled = true`）

```
📚 选择要调整的卷：
  1. 卷1「{卷1名}」— 当前：「{模式}」
  2. 卷2「{卷2名}」— 当前：「{模式}」
  ...
  全部恢复 — 清除所有分卷覆盖，统一继承全局
  完成 — 回到写作配置管理

→ 用户选择某卷后：

✏️ 卷{N}「{卷名}」润色程度：
  • 继承全局 — 使用全局大纲「{大纲.polish_mode}」（如已覆盖则清除覆盖项）
  • 轻度 — 保留用户原话
  • 中度 — 小幅优化用户原话
  • 重度 — 仅保留原意，完全改写
```

选择"继承全局"时，从 `写作配置.json` → `分卷` 中删除该卷号的 key；选择独立模式时，写入或更新 `分卷.{卷号}`。

如用户选择"全部恢复"，清空整个 `分卷` 对象：

```
⚠️ 将清除所有 {N} 卷的独立写作配置，全部恢复为全局「{大纲.polish_mode}」。
   确认？(确认 / 取消)
```

**2.9.4 写作偏好库开关**

```
📝 写作偏好库当前：{已启用 / 已关闭}

开启后：AI 按你的个人写作习惯做方向优化（用词/句式/标点/称呼术语/
内容避讳/节奏），并在你手动修改 AI 产出时询问是否将修改点记入偏好库。
注意：启用会增加少量 Token 消耗（每次写作多读取一份偏好文件）。

操作：
  • 开启 — 设置 user_style_enabled = true（如 大纲/写作偏好.json 不存在则创建骨架）
  • 关闭 — 设置 user_style_enabled = false（停止读取与询问，保留已有词条）
```

- 开启时如 `大纲/写作偏好.json` 缺失 → 创建骨架（`{ "schema_version": "1.0", "entries": [] }`），落盘经成品输出校验（`type: "json"`, `expected_schema: "写作偏好"`）
- 关闭时仅翻转开关，**不删除**已有词条（随时可再开启）

#### 2.10 角色语气总览

`写作配置.json` 中的 `角色语气` 段由创建人物技能在创建角色时自动写入（基于性格生成），设定编辑提供只读总览。

**2.10.1 数据结构**：

```json
{
  "角色语气": {
    "{角色名}": {
      "说话风格": "{简洁有力/啰嗦随性/文雅含蓄/直白奔放/其他}",
      "用词偏好": "{口语化/书面化/粗犷/文绉绉/其他}",
      "情绪表达": "{外放/内敛/冷静/激烈/其他}",
      "句式特征": "{短句为主/长句为主/碎片化/工整/其他}",
      "口头禅": "{有则填，无则空字符串}",
      "nsfw_tone": "{保守/中性/放荡，仅NSFW作品}"
    }
  }
}
```

**2.10.2 展示当前角色语气**：

```
🗣️ 角色语气总览（只读，由创建人物维护）

  • {角色名1}：{说话风格} / {nsfw_tone}
  • {角色名2}：{说话风格} / {nsfw_tone}
  • {角色名3}：未配置

💡 角色语气在创建人物时自动生成。要修改某角色的语气，请说"修改角色语气:{角色名}"。
```

**2.10.3 修改角色语气**（入口：用户说"修改角色语气:张三"）：

由创建人物技能处理——在该角色的 MD 条目中更新「人物语气」字段，同时同步 `写作配置.json` → `角色语气`。

### 步骤 3：保存文件

每次板块编辑完成后**即时保存**至 `设定.md`，防止数据丢失。

**保存流程**：
1. 定位目标板块在文件中的起止位置
2. 替换该板块的内容为编辑后的版本
3. 更新文件顶部的 `> 最后更新：{日期}`
4. 确认写入成功后简短反馈：`✅「{板块名}」已更新`

**去重保护**：同一板块连续编辑时，以最后一次确认为准。

---

### 步骤 4：完成确认

全部编辑完成后，输出设定摘要：

```
✅ 作品设定编辑完成！

📋 「{书名}」设定总览

| 板块 | 完成度 |
|------|--------|
| 基本信息 | ✅ {book_name} / {distribution} / {length} / {genre} |
| 简介 | {对外简介前30字}... |
| 核心设定 | ✅ 人物 / 世界 / 故事走向 |
| 世界观 | ✅ {N} 个分类项：{分类列表} |
| 次要设定 | {N} 个分类项 / （暂不填写） |

📝 需要进一步调整哪个部分？或者要完善其他大纲内容？
```

---

## 注意事项

- **必选约束不可绕过**：核心设定和世界观不允许完全空白。用户跳过后再次回到板块选择时继续提醒
- **Write-Router → Core 加工为写入前必经步骤**：所有设定文本（简介/核心设定/世界观/次要设定等）写入前必须经过 Write-Router（轻量模式）调度 Core 按大纲文本规范加工——不经此链路直接写入 = 流程违规。即使用户选择"用原文"，仍须经 Write-Router → Core 做规范 1.6（破折号禁令）和基本标点修正
- **双写同步**：基本信息修改时必须同步更新 `设定.md` 和 `项目信息.json`——两者不一致会导致后续技能读取错误
- **文件即时保存**：每完成一个板块编辑立即调度 `成品输出校验`（`type: "structured_md"`, `md_category: "设定"`, `file_path`；如同时修改了 `项目信息.json` 则另传 JSON 数据包）→ 校验后落盘。禁止自行 Write，防止连续编辑多个板块后崩溃丢失全部数据
- **NSFW 触发边界**：仅用户主动提及时才将 content_rating 切换为 NSFW。不在例行询问中出现 NSFW 相关内容
- **润色模式灵活切换**：用户可在编辑过程中随时说"切换润色模式"、"分卷写作配置"，不影响已保存内容
- **分卷润色独立管理**：分卷项目支持每卷独立润色模式，通过"分卷写作配置"进入管理；未配置卷自动继承全局大纲模式
- **文件路径特殊字符**：书名/路径中的 `/` `\` `:` `*` `?` `"` `<` `>` `|` 自动替换为 `_`
- **保持引导式语气**：每次只问一个问题，不给用户"考试感"
- **与剧情大纲/角色文件的关系**：设定文件是世界观约束的唯一来源，剧情编辑和人物创建均从此读取设定约束——设定不完善时提示用户优先完善

