成品输出校验
此技能是写作系统的唯一落盘入口。任何技能(基础写作辅助、NSFW 专项写作、提示词增强、人物/设定/大纲编辑等)不得自行将内容写入本地文件系统——必须将待写入内容传入此技能,经校验通过后由此技能统一执行落盘。不经校验直接写入视为流程违规。
核心定位
- 唯一落盘入口:系统内没有任何技能可以 bypass 此技能直接写文件——这是硬约束,不是建议
- 全类型覆盖:所有输出到本地持久存储的文件均需校验——正文(.md)、JSON(.json)、结构化 Markdown(角色/设定/大纲)
- 格式感知:根据文件类型自动选择校验策略(正文文本 / JSON / 结构化 Markdown)
- 校验不过自动改到过:发现违规 → 自动修正 → 复检确认 → 落盘。不回头找上游,不自称"无法处理"退回
- 正文双轨校验:标点合规(CPS.json)+ 段落/字句合规(Core 规范)
- JSON 校验:语法有效性 + 必填字段完整性 + 引用一致性
- 结构化 MD 校验:必填字段完整性 + 跨文件引用有效性
- NSFW 感知:NSFW 内容的专项校验由 NSFW 技能步骤 4 自行完成,此技能仅做通用结构校验
- 被动调度:由上游技能在准备写入时主动调用——上游技能不持有文件写入权限
触发条件
- 强制触发:任何技能在将内容写入本地文件前必须调用此技能。不调用直接写入 = 流程违规,写入的内容视为不合规
- 手动触发:用户直接要求"检验一下"、"检查一下"、"合规检查"等
关联文件
| 文件 | 位置 | 用途 |
|---|---|---|
CPS.json |
本技能同目录 | 中文标点符号用法国家标准(GB/T 15834),正文标点合规性校验的唯一权威依据 |
| 基础写作辅助 SKILL.md | body/Core/SKILL.md |
段落节奏、间接描写等规范的校验基线 |
项目信息.json |
大纲/ |
跨文件引用一致性校验的参照源(卷结构、章节数等) |
主要角色.md / 次要角色.md / 龙套角色.md |
大纲/人物/ |
角色文件字段完整性校验的参照模板 |
Prompt.md |
大纲/剧情/ |
JSON 模式校验对象之一 |
proofreading-checklist.json |
data/ |
检查项清单(标点/结构/JSON 模式与引用/结构化 MD,机器规格) |
文件类型识别与校验策略路由
接收待校验内容时,首先根据文件路径和内容特征判定类型,然后路由到对应的校验策略:
| 文件类型 | 判定依据 | 校验策略 |
|---|---|---|
| 正文文本 | 路径含 正文/ 或 番外/,文件为 .md,内容为叙事/对话/描写 |
第一轮(CPS.json 标点)+ 第二轮(Core 结构规范) |
| JSON 数据 | 文件为 .json |
语法有效性 + 必填字段模式校验 + 引用一致性 |
| 角色 Markdown | 路径含 人物/,文件名含角色类型 |
必填字段完整性 + 与其他角色文件的关系一致性 |
| 设定 Markdown | 路径含 设定/ 或文件名含 设定 |
结构完整性 + 世界观规则自洽性 |
| 大纲 Markdown | 路径含 剧情/ 或 大纲/,非 JSON |
章节编号连续性 + 卷章对应关系 |
| 写作配置 JSON | 文件名含 写作配置 |
模式值域合法性 + 分卷覆盖完整性 |
加载策略(规格数据)
data/proofreading-checklist.json为机器规格(标点扫描项/结构校验项/JSON 模式与引用校验项/结构化 MD 校验项清单):首次调度本技能时完整读取一次(同会话仅此一次),读取后按工作记忆执行,后续调度不重复读取- 仅当规格数据变更(版本升级)或新会话首次调度时重新读取
执行模式
由上游技能调度时:跳过计划模式,直接按步骤执行。 用户直接触发时:进入计划模式(EnterPlanMode)。
执行步骤
步骤 0:接收待校验内容
接收上游技能传来的待写入内容及相关元数据。根据内容类型,数据包结构不同:
正文文本类:
{
"type": "prose",
"content": "{待校验的完整成品文本}",
"file_path": "{目标写入路径,如 正文/第三章 初入江湖.md}",
"source_skill": "{Core / NSFW / other}",
"word_count": {字数},
"chapter": "{当前章号/章名(如有)}",
"volume": "{当前卷号(分卷多文件时必填,不分卷时为 null)}",
"content_type": "{叙事文本 / 对话文本 / 描写文本 / NSFW}",
"prose_mode": "{narrative / outline}",
"exempted_norms": ["规范2", "规范2.2"]
}
| 字段 | 说明 |
|---|---|
prose_mode |
"narrative"(默认)→ 适用规范 1 段落节奏控制;"outline" → 适用规范 1.5 大纲类文本处理(免短段强制拆分,允许长段叙述和分号分隔) |
JSON 数据类:
{
"type": "json",
"content": "{JSON 字符串}",
"file_path": "{目标写入路径,如 大纲/剧情/Prompt.md}",
"source_skill": "{提示词增强 / other}",
"expected_schema": "{Prompt / 项目信息 / 写作配置}"
}
协议来源:
expected_schema与md_category的枚举统一定义于模板库templates/index.json的protocols——expected_schema通过aliases匹配对应 schema 文件(如项目信息→templates/project-info.schema.json)。新增数据模式时在 index.json 注册即可,本技能不自行维护枚举。
结构化 Markdown 类:
{
"type": "structured_md",
"content": "{Markdown 文本}",
"file_path": "{目标写入路径,如 大纲/人物/主要角色.md}",
"source_skill": "{创建人物 / 设定编辑 / 剧情编辑 / other}",
"md_category": "{角色 / 设定 / 大纲}"
}
步骤 1:正文文本校验 — 标点符号合规性(CPS.json)
仅 type = "prose" 时执行。其他类型跳过此步骤。
读取本技能同目录下的 CPS.json,以其中的标点符号定义、用法规则为校验依据,对成品文本进行全量标点扫描。所有 E 级违规自动修正,所有 W 级违规在上下文可判定时自动修正。
1.1 扫描项目与自动修正规则
按 data/proofreading-checklist.json → punctuation_checks 逐项扫描(16 项:扫描项/依据来源/违规判定/自动修正动作以规格数据为准)。
1.2 自动修正执行方式
对文本逐句扫描,发现违规后立即执行修正并记录修正日志:
🔧 标点自动修正日志:
L3: "他推开门——" [破折号断开] → 已合并同行
L7: "……等等" [省略号与"等"同用] → 已删省略号
L12: "这是巧合还是有意安排?" [选择问句中位→逗号] → "?"改为","
L15: "你知道吗???" [问号叠用超三个] → 缩减为"你知道吗?"
L20: ""你好。"他说道。"好久不见。"" [引号嵌套反序] → 修正为'你好。'他说道。"好久不见。"
修正后立即对该句做复查确认修正成功。
1.3 仅警告不修改的项(上下文无法判定时)
以下情况不做自动修正,仅在报告中标注供上游参考:
| 情形 | 原因 |
|---|---|
| 破折号与括号用途边界模糊 | 取决于作者意图(重要补充→破折号连读 / 普通注释→括号) |
| 分号/逗号在复杂多重复句中的选择 | 取决于作者对分句层次的判断 |
| 书名号与引号对"题"类短语的适用 | 取决于是否视为作品名 |
步骤 2:正文文本校验 — 段落/字句结构合规性(Core 规范)
仅 type = "prose" 时执行。其他类型跳过此步骤。
读取 body/Core/SKILL.md 中的写作规范,对成品文本进行结构性校验。所有违规自动修正至合规状态。
校验前先读取步骤 0 输入数据包中的 exempted_norms:如包含 "规范2.2" 则跳过 2.1.7(贴标签式性格描写)。"规范2"(人物外观间接描写)在 Proofreading 检查项中无直接对应子项,不产生跳过效果。2.1.8(参考源原文复刻)属规范 5,永不免除。2.1.6(破折号禁令)属规范 1.6,永不免除。其余规范照常过检。
2.1 校验项与自动修正规则
检查项清单(8 项:id/名称/适用规范/触发条件/豁免规则)见 data/proofreading-checklist.json → structure_checks;判定与修正细则如下。
prose_mode 感知:校验前读取数据包中的 prose_mode。若为 "outline",规范 1 项下的 2.1.1~2.1.5 全部跳过(类比规范 1.5 大纲类特殊处理),仅执行 2.1.6 和 2.1.7。
2.1.1 段落长度超标(规范 1 — prose_mode = "narrative" 时执行)
检验:段落中完整自然句(以。!?… 收尾)超过 3 个 → 违规。
自动修正:在最佳拆分点将长段一分为二。
- 拆分点优先选择:句号之后 > 问号之后 > 叹号之后
- 如段落超过 5 个完整自然句 → 拆分为 2~3 段,每段 ≤3 句
- 拆分后检查:新段落的第一句是否仍能独立成意 → 如太短(≤5字)则并入下一段
修正前:
她走进房间。窗帘紧拉着。光线昏暗。空气里浮着一层薄灰。她打开灯。然后看到了桌上的信。
修正后:
她走进房间。窗帘紧拉着,光线昏暗,空气里浮着一层薄灰。
她打开灯,然后看到了桌上的信。
2.1.2 句末标点链接(规范 1)
检验:短句/超短句/长句之间出现"X{标点}Y{标点}"的链式结构 → 违规。
自动修正路径:
- 句号链接 → 合并为逗号,或拆段(优先合并)
- 问号链接 → 强制拆段,每句独立成段(保留追问感)
- 叹号链接 → 强制拆段,每句独立成段(保留冲击力)
- 省略号链接 → 强制拆段
- 混合标点链接(?!)→ 强制拆段
修正前:"这是什么?这怎么可能呢?为什么会这样呢?"
修正后:
"这是什么?
这怎么可能呢?
为什么会这样呢?"
修正前:"他做到了!他真的做到了!"
修正后:
"他做到了!
他真的做到了!"
2.1.3 超短句堆叠(规范 1)
检验:超短句(≤5字)成段时出现连续 ≥2 个句末标点 → 违规。
自动修正:将连续超短句改为逗号相连(同一意群)或各自换行(非同一意群)。
修正前:"跑了。追。没追上。算了。"
修正后:"跑了,追,没追上——算了。"
修正前:"他停下。回头。皱眉。没说话。"
修正后:
"他停下,
回头,
皱眉。
没说话。"
2.1.4 无必要短句断裂(规范 1)
检验:同一意群被句号无理切断(三问判定法:同一件事?无转折?每句不独立?全中 → 违规)。
自动修正:将句号改为逗号合并为一个完整句。
修正前:"你累了。回去休息吧。"
修正后:"你累了,回去休息吧。"
修正前:"我知道。你不会来的。所以我没有等。"
修正后:"我知道你不会来的——所以我没有等。"
2.1.5 对话叙述被句号截断(规范 1 衍生)
检验:对话+叙述+对话的"三明治"结构中,中间叙述以句号结尾 → 违规。
自动修正:将句号改为逗号。
修正前:"教宗大人。"丽丽没有收剑。"我只是想问一个问题。"
修正后:"教宗大人。"丽丽没有收剑,"我只是想问一个问题。"
2.1.6 破折号禁令(规范 1.6 — 全技能不免)
检验:文本中出现 ——(U+2014 U+2014)且不属于声音延长等允许例外 → 违规。
全技能不豁免:此规则不进入 exempted_norms 列表,NSFW 返回的任何豁免声明对此规则无效。无论 prose_mode 为何值均强制执行。
自动修正:检测到 —— 后判定上下文:
- 解释/转折/插入 → 替换为逗号
- 停顿/犹豫/中断 → 替换为省略号
- 强调 → 拆分为独立短句
- 声音延长(前后为感叹词如"啊""呜""嗯"、拟声词、或对话中拖长音)→ 保留
- 无法判定用途 → 默认替换为逗号,标记
[⚠️ 需人工:破折号用途不明,已默认替换为逗号]
修正前:"他提到了那个人——他的父亲"
修正后:"他提到了那个人,他的父亲"
修正前:"我——我不知道"
修正后:"我……我不知道"
修正前:"救命啊——"声音在山谷里拖了很长
修正后:保留(声音延长,合法例外)
2.1.7 贴标签式性格描写(规范 2.2)
检验:初登场文本中出现叙述者直接贴性格标签("他是XX的人""她看起来XX")→ 违规。
自动修正:将标签句改写为行为展现。如标签句无法确定对应的行为替代,标记 [⚠️ 需人工: 性格标签→行为展现] 向用户说明。
修正前:"他是个莽撞冒失的人。"
修正后:"他一头撞开门冲进来,才发现走错了教室——满屋子的人转头看他,他挠挠头,又撞上了门框。"
如上下文不足以推断合适的替代行为,标注
[⚠️ 需人工]保留原文并提示用户。
2.1.8 参考源原文复刻(规范 5)
检验:段落中出现与任何参考源(大纲/角色文件/设定文件/Prompt.md)中原文高度重合的描述 → 违规。
自动修正:无法自动修正(需要创作级替换)。标记 [⚠️ 降重提醒: 以下段落与参考源原文高度重合,建议换感官/换语境重写] 并列出重合段落和对应参考源出处,由上游技能最终处理。
⚠️ 降重提醒:
段落 2:"B罩杯,底盘紧致,乳峰挺翘"
→ 与角色文件(`主要角色.md` / `次要角色.md` / `龙套角色.md`)中「林婉儿」条目原文高度重合
→ 建议:换触觉/互动角度重写(如"他解开时指尖擦过一处——刚好盈满")
⚠️ 降重提醒:
段落 1:"西城窄巷,天色将暗,巷口灯笼初亮,光线昏暗逼仄。"
→ 与 Prompt.md(第5章)提示词原文高度重合
→ 建议:换时间/天气/感官角度重写,提示词是写作指引不是正文底稿
2.2 自动修正执行流程
待校验文本
│
▼
逐段扫描 ──→ 发现违规段 → 执行对应修正规则 → 写出修正后文本
│
▼
全篇修正完成 → 生成修正日志
2.3 输出结构修正报告
📋 段落/字句结构修正报告
🔍 扫描范围:{N} 段落,{N} 自然句
🔧 自动修正:
• L5:段落长度超标(5个完整句)→ 拆分为2段
• L8:"这是什么?这怎么可能呢?"问号链接 → 逐句拆段
• L12:"跑了。追。没追上。"超短句堆叠 → 逗号合并
• L18:对话叙述句号截断 → 改逗号
• L22:贴标签式性格 → 已改写为行为展现
• L30:参考源复刻 → 已标记 [⚠️ 降重提醒](需人工确认)
✅ 结构修正完成({N}处修正)
步骤 3:JSON 文件校验
仅 type = "json" 时执行。其他类型跳过此步骤。
3.1 JSON 语法有效性
- 解析 JSON 字符串 → 解析失败则标记具体错误行/位置并自动修复(补逗号、补引号、删尾逗号等常见错误)
- 修复后重新解析确认
3.2 模式校验(按 expected_schema)
校验依据:expected_schema 通过模板库注册表 templates/index.json(相对技能根目录,按 aliases 匹配)定位对应 schema 文件。按 schema 的 required 必填字段、enum 枚举值、type 类型、pattern 格式逐项校验,违规按规则修正。字段规则唯一来源是 schema 文件——本技能不自行维护字段规则表。
Prompt.md 模式:
Prompt.md 为 Markdown 文件,不进入 JSON 校验流程。提示词增强技能以
type: "prose"+prose_mode: "outline"将其传入此技能,走步骤 1(CPS 标点)+ 步骤 2(Core 结构)校验后落盘。Prompt.md 中的提示词文本与大纲类文本共享规范 1.5 段落豁免,破折号禁令(规范 1.6)正常执行。
模式校验项(项目信息/写作配置:校验项/规则/违规处理)见 data/proofreading-checklist.json → json_mode_checks(含对应 schema 路径)。
3.3 引用一致性校验
对 JSON 中的跨文件引用做一致性检查——检查项(3 项:检查项/校验方式/违规处理)见 data/proofreading-checklist.json → json_reference_checks。
3.4 JSON 校验报告
📋 JSON 校验报告 — {文件路径}
🔍 语法检查:✅ 通过
🔧 模式校验:
• last_updated → 已更新为 2026-06-14
• prompts[2].foreshadowing → 已修正为 false
• 章名"初入江湖"在第3条和第7条重复 → 已保留最新,移除旧条目
🔗 引用一致性:
• Prompt.md 第5章引用的章名"夜探禁地"在大纲中不存在 → ⚠️ 需人工确认
✅ JSON 校验完成({N}处修正,{M}处需确认)
步骤 4:结构化 Markdown 校验
仅 type = "structured_md" 时执行。其他类型跳过此步骤。
4.0 纯文本内容合规校验(所有 md_category 共用)
结构化 MD 文件(角色/设定/大纲)中同样包含大量叙述性文本——角色简介、设定描述、剧情梗概等。这些文本的标点和结构合规性直接影响后续技能的读取准确性,必须经与正文相同的双轨校验。
在分类字段校验之前,先将结构化 MD 的全部文本内容视为 type: "prose" + prose_mode: "outline" 执行步骤 1(CPS.json 标点扫描)和步骤 2(Core 结构规范扫描):
| 校验层 | 执行内容 | 说明 |
|---|---|---|
| 标点合规 | 全量 CPS.json 逐句扫描 | 与正文步骤 1 完全一致——标点错误同样影响参考源可读性 |
| 段落节奏 | 免检 | prose_mode: "outline" → 适用规范 1.5,允许长段叙述、分号分隔 |
| 间接描写 | 规范 2 / 2.2(贴标签式描写、性格间接化) | 角色文件豁免——角色文件本身就是参考数据源,允许直接陈述特征;设定和大纲文件中若包含示例描写语句仍需遵守 |
| 降重率 | 规范 5(禁止原文复刻) | 全类别执行——结构化 MD 中的描述语句不得大段照搬其他参考源原文 |
修正方式:标点违规自动修正后写回文本;结构违规自动修正;需人工项标记后阻断落盘。
4.1 角色 Markdown 分类校验(md_category = "角色",schema:templates/character.schema.json)
校验项(5 项:校验项/规则/违规处理)见 data/proofreading-checklist.json → md_checks.character。
4.2 设定 Markdown 校验(md_category = "设定",schema:templates/settings.schema.json)
校验项(3 项)见 data/proofreading-checklist.json → md_checks.settings。
4.3 大纲 Markdown 校验(md_category = "大纲",schema:templates/plot.schema.json)
校验项(4 项)见 data/proofreading-checklist.json → md_checks.plot。
4.4 结构化 MD 校验报告
📋 结构化 MD 校验报告 — {文件路径}
🔍 文件类别:角色 / 主要角色
🔧 字段完整性:
• "林婉儿"缺失年龄字段 → ⚠️ 已标记
• "张三"与"李四"的关系标注为"好友",但李四文件中未提及张三 → ⚠️ 已标记单向关系
✅ 结构化 MD 校验完成({N}处标记)
步骤 5:复检确认
所有校验轮次完成后,对修正后的内容再做一次快速扫描,确认所有违规已消除:
- 正文文本:标点逐句检查 + 结构逐段检查,确认无新引入错误
- JSON:重新解析确认语法有效 + 模式字段完整
- 结构化 MD:重新确认标记项已正确标注;确认 4.0 纯文本校验的修正未引入新的标点/结构违规
如发现修正引入的新问题 → 对该处再次修正后重检。 复检通过则进入步骤 6。
步骤 6:落盘写入
所有校验通过后,由此技能将修正后的内容写入 file_path 指定的目标路径。上游技能不持有文件写入权限——它们只是内容生产者,此技能是唯一的落盘执行者。
写入流程:
- 确认目标目录存在(如
正文/、正文/卷{N}/、大纲/剧情/等)→ 不存在则自动创建 - 将修正后的最终内容写入
file_path - 输出校验摘要确认落盘成功:
✅ 成品输出校验完成 → 已落盘
📁 {file_path}
📊 校验摘要:
• 文件类型:{正文文本 / JSON / 结构化MD}
• 标点修正:{N} 处(仅正文文本)
• 结构修正:{N} 处(仅正文文本)
• JSON 修正:{N} 处(仅 JSON)
• 字段/引用标记:{N} 处(JSON + 结构化MD)
⚠️ 需人工确认:{N} 项
━━━━━━━━━━━━━━━━━━━━
{落盘内容全文}
━━━━━━━━━━━━━━━━━━━━
⚠️ 落盘前阻断条件:如存在 ⚠️ 需人工确认 项(降重提醒、引用不一致等),在落盘前向用户展示标记项并询问是否继续写入。用户确认后执行落盘;用户拒绝则退回上游技能修改。
与上游技能的协作
上游技能处理完毕,准备写入文件
│ 携带:{type, content, file_path, ...}
│ ⚠️ 上游技能不自行写入——仅传递数据包
▼
成品输出校验(此技能)—— 唯一落盘入口
│ 步骤 0:接收 → 识别文件类型 → 路由校验策略
│
├── type = "prose" ──→ 第一轮:CPS.json 标点扫描 → 自动修正 → 复检
│ └── 第二轮:Core 规范结构扫描 → 跳过 exempted_norms → 自动修正 → 复检
│
├── type = "json" ──→ 第三步:语法有效性 + 模式校验 + 引用一致性
│
├── type = "structured_md" ──→ 第四步:字段完整性 + 跨文件引用有效性
│
├── 步骤 5:复检确认
│
└── 步骤 6:落盘写入 → 输出校验摘要
│
├── 无阻断项 → 直接写入 file_path
└── 有 ⚠️ 需人工确认 → 询问用户 → 确认后写入 / 拒绝则退回上游
关键原则:
- 此技能是系统的唯一落盘入口——没有任何技能可以 bypass 它直接写文件
- 此技能自闭环——所有可自动修正的违规在此技能内部修正完毕,不退回上游
- 不可自动修正的项(降重提醒、引用不一致等)标记为
⚠️ 需人工确认,阻断落盘直到用户确认 - 上游技能是内容生产者,此技能是校验者 + 落盘执行者——职责严格分离
NSFW 校验边界:
- NSFW 技能负责:档位色色值合规、白描篇幅控制、精神思考比例、NSFW 降重率
- 此技能负责:标点合规(CPS.json)+ Core 通用结构(段落节奏/对话增强/风景穿插/通用降重率)+ JSON/结构化MD 完整性
- 规范 2/2.2 已由 NSFW 豁免并通过
exempted_norms传递——此技能跳过
注意事项
- 硬约束:不经此技能,不得落盘。任何技能绕过此技能直接将内容写入文件系统 = 流程违规。唯一的例外是此技能自身执行校验后的落盘操作
- 文件类型判定优先看
type字段,其次看file_path扩展名 - 正文文本的两轮校验独立运行,不可跳过任何一轮
- JSON 校验中语法错误自动修复,模式违规自动修正,引用不一致标记需人工
- 结构化 MD 校验中字段缺失仅标记不自动填充(数据源在上游技能)
- 标点修正仅改标点,不改词汇;结构修正可改段落/句子边界,不改叙事内容
- 修正后必须复检一次确认无新问题
- CPS.json 是本技能同目录下的标点权威数据源
- 如输入数据包中
exempted_norms非空,正文结构校验跳过其中列出的规范项;标点校验和 JSON/MD校验不受豁免影响 - NSFW 校验边界:此技能不负责 NSFW 专项校验——NSFW 技能步骤 4 已自行完成
- 分卷多文件项目:
volume字段用于跨文件引用校验中的卷号定位 - 始终以 Markdown 格式输出校验报告和最终成品
- 所有修正动作均记录日志,确保可追溯
- 不再仅校验正文:任何写入
正文/、番外/、大纲/、outline/目录及其子目录的文件,均纳入校验范围