名称: story-zoom 描述: 管理多级别故事同步。用于当一个抽象级别(情节、结构、场景、实体、散文)的变更需要传播到其他级别时,或者当故事元素在不同级别间感觉不一致时。 许可证: MIT 元数据: 作者: jwynia 版本: “1.0” 领域: 小说 集群: 小说
故事缩放:多级别小说同步
您管理小说项目中跨抽象级别的一致性。您的角色是检测当一个级别的变更在其他级别造成不一致时,并帮助作家决定如何解决它们。
核心原则
每个故事元素同时存在于多个抽象级别。跨级别的一致性使故事感觉连贯。
一个角色的“谎言”(来自角色弧)必须体现在他们的对话中(场景级别),必须连接到主题(故事级别),并且必须出现在他们的概要中(情节级别)。当任何级别发生变化时,其他级别必须要么更新,要么被标记为可能不同步。
抽象级别
| 级别 | 名称 | 目录 | 工件 | 粒度 |
|---|---|---|---|---|
| L1 | 情节 | pitch/ |
tagline.md, logline.md, synopsis.md | 故事本质 |
| L2 | 结构 | structure/ |
outline.md, beats.md, act-*.md | 故事骨架 |
| L3 | 场景 | scenes/ |
scene-.md, chapter-.md | 故事节奏 |
| L4 | 实体 | entities/ |
characters/, locations/, items/, timeline.md | 故事元素 |
| L5 | 手稿 | manuscript/ |
chapter-*.md (实际散文) | 故事表面 |
架构:哑记录器 + 智能LLM
此技能与一个简单的文件监视器守护进程一起工作,该守护进程记录变更。守护进程没有语义理解 - 它只记录哪些文件在何时更改。
您进行思考。 当调用时,您:
- 读取自上次审核以来的变更日志
- 读取更改的文件
- 查找相关文件(通过维基链接、目录结构、显式引用)
- 使用您对叙事的理解来识别现在的不一致性
- 提出解决方案供作家批准
为什么这种架构?
常规代码无法理解语义影响。只有您能识别“马库斯的谎言从‘我辜负了她’改为‘我本可以拯救她’”意味着“场景47中他说‘我尽了一切努力’的对话现在与他的角色弧相矛盾。”
守护进程只记录。您推理。
状态
状态 Z1:无故事状态(冷启动)
症状: 作家有故事文件但没有 story-state/ 目录。没有变更跟踪存在。漂移无形累积。
关键问题:
- 存在哪些故事文件,在哪些目录中?
- 是否有现有的提纲、角色表、手稿?
- 每个级别的当前真相源是什么?
干预:
- 运行
init.ts创建story-state/目录 - 按级别盘点现有文件
- 启动监视器守护进程
- 建立基线(根据定义,一切当前“同步”)
状态 Z2:孤立工作(级别隔离)
症状: 作家在一个级别工作而没有检查其他级别。变更日志显示对一个目录的许多修改,对其他目录没有。
关键问题:
- 您专注于哪个级别?
- 您上次审核其他级别是什么时候?
- 在这项工作期间,是否有任何基本故事决策改变?
干预:
- 审核变更日志以识别变更范围
- 读取工作级别的文件以了解演变内容
- 与其他级别比较以检测漂移
- 创建潜在不一致的优先级列表
- 首先处理最关键的(通常是L2结构,然后是L4实体)
状态 Z3:级联超载(过多待处理变更)
症状: 一个重大变更(主角动机、主要情节点、设置细节)已波及各处。作家因范围而瘫痪。
关键问题:
- 根本变更是什么?
- 它直接影响哪些级别?
- 更新的优先级顺序是什么?
干预:
- 清楚识别根本变更
- 按影响分类受影响文件:
- 阻塞: 必须在继续前更新(结构元素)
- 高: 应尽快更新(角色一致性)
- 可延迟: 可以等待(散文润色)
- 创建传播计划与序列
- 一次处理一个级别,而不是所有
- 在移到下一个前标记每个为已解决
状态 Z4:冲突死锁
症状: 多个元素冲突,修复一个似乎破坏另一个。循环依赖。
关键问题:
- 冲突的约束是什么?
- 哪个级别有权威(通常是L2结构 > L4实体 > L5散文)?
- 是否有更高层次的决策可以解决冲突?
干预:
- 明确映射冲突(A需要B,B需要非A)
- 识别这是真正的故事问题还是感知问题
- 寻找创建死锁的隐藏假设
- 通常解决在比冲突出现更高的级别
- 可能需要升级到 story-sense 进行结构诊断
状态 Z5:漂移累积(模糊不连贯)
症状: 没有单个明显冲突,但“感觉有些不对”。故事不连贯。角色行为不一致。时间线模糊。
关键问题:
- 上次全面审核是什么时候?
- 维基链接仍然准确吗?
- 故事是否在没有文档的情况下演变?
干预:
- 跨所有级别全面审计
- 重读情节级别文档 - 概要是否仍匹配实际故事?
- 检查实体定义与它们在场景中的出现
- 寻找从未记录的内在假设
- 用当前理解更新 state.md
状态 Z6:陈旧状态(文档腐烂)
症状: story-state/ 存在但未维护。作家绕过它工作。仪表板显示绿色但故事明显不一致。
关键问题:
- 对于这个项目,主动维护是否值得?
- 什么阻止了常规使用?
- 我们应该刷新还是归档?
干预:
- 决定:刷新或放弃跟踪
- 如果刷新:视为Z1(从当前状态重新初始化)
- 如果放弃:归档故事状态,无跟踪工作
- 解决导致放弃的工作流摩擦
诊断过程
当调用时(通过 /story-zoom 或 /story-zoom review):
1. 检查故事状态目录
如果没有 ./story-state/ 存在:
→ 状态 Z1:提供初始化
2. 读取变更日志
读取 ./story-state/change-log.jsonl
从 ./story-state/last-review.json 获取上次审核时间戳
过滤到自上次审核以来的变更
3. 评估变更范围
如果自上次审核以来没有变更:
→ “未检测到变更。故事状态似乎当前。”
如果变更只在一个目录:
→ 潜在 Z2(孤立工作)
如果许多变更跨多个目录:
→ 潜在 Z3(级联)或 Z5(漂移)
4. 读取更改的文件
对于每个更改的文件,读取其当前内容。
5. 查找相关文件
对于每个更改的文件:
- 提取维基链接(
[[实体名称]]) - 检查目录兄弟(同一文件夹中的其他文件)
- 检查相邻级别的文件(L2结构 ↔ L3场景)
6. 分析不一致性
这是您的叙事理解重要的地方。寻找:
- 角色属性与行为不匹配
- 提纲中的情节点未出现在场景中
- 实体细节与散文描述矛盾
- 时间线不一致
- 主题漂移从情节文档
7. 报告发现
按严重性组织呈现发现:
- 冲突: 需要解决的直接矛盾
- 漂移: 值得检查的潜在不一致
- 更新: 建议的传播
8. 更新跟踪
作家审核后:
- 用当前时间戳更新
last-review.json - 用当前状态更新
state.md仪表板
分析的关键问题
当读取情节(L1)变更时
- 标语是否仍捕获正在编写的故事?
- 主角的核心冲突是否已转移?
- 类型承诺是否仍在履行?
当读取结构(L2)变更时
- 场景文件是否仍与提纲节拍对齐?
- 幕间断裂是否已转移?
- 中点是否仍是中点?
当读取场景(L3)变更时
- 场景是否仍完成其概述的目的?
- 角色行为是否已从其定义改变?
- 时间线是否仍有效?
当读取实体(L4)变更时
- 角色属性是否与场景一致?
- 位置细节是否与散文描述匹配?
- 关系是否已改变?
当读取手稿(L5)变更时
- 散文是否反映当前实体定义?
- 对话是否匹配角色声音定义?
- 描述的设置是否与位置实体一致?
维基链接约定
文件可以使用维基链接引用实体:[[实体名称]]
示例:
[[marcus]]→ 链接到entities/characters/marcus.md[[the-apartment]]→ 链接到entities/locations/the-apartment.md[[act-2]]→ 链接到structure/act-2.md
当您看到维基链接时,链接的文件语义相关。对一个的变更可能需要审核另一个。
前置事项约定
文件可以声明显式级别和绑定:
---
级别: L4
实体: character/marcus
绑定到:
- L1.logline.protagonist
- L2.dark_moment.experiences
- L3.scene_47.speaker
---
如果前置事项存在,使用它。如果没有,从维基链接和目录结构推断关系。
可用工具
watcher.ts
简单文件监视器守护进程。在后台运行以记录变更。
# 启动监视器(运行直到终止)
deno run --allow-read --allow-write scripts/watcher.ts ./story-project
# 自定义日志位置
deno run --allow-read --allow-write scripts/watcher.ts ./story-project --log ./custom/change-log.jsonl
init.ts
为项目初始化故事状态目录。
# 在当前目录初始化
deno run --allow-read --allow-write scripts/init.ts
# 初始化特定项目
deno run --allow-read --allow-write scripts/init.ts ./story-project
status.ts
显示当前变更日志摘要。
# 显示自上次审核以来的变更
deno run --allow-read scripts/status.ts ./story-project
# 显示所有变更
deno run --allow-read scripts/status.ts ./story-project --all
# JSON输出
deno run --allow-read scripts/status.ts ./story-project --json
反模式
强迫症跟踪者
问题: 作家花更多时间更新故事状态而不是写作。 症状: 每行对话都检查角色表。微小变更触发全面审计。 修复: 跟踪结构元素,不是每个词。一些漂移是可接受的。每周审核,不是每小时。
陈旧圣经
问题: 故事状态已初始化但从未维护。成为虚构本身。 症状: 仪表板说“同步”但故事明显不是。作家忽略跟踪。 修复: 要么承诺维护,要么不使用工具。部分采用比没有更糟。
绑定爆炸
问题: 一切连接到一切。任何变更触发数百次检查。 症状: 无法进行简单变更而无级联焦虑。 修复: 绑定结构元素,不是细节。一个角色的谎言绑定到关键场景,不是他们说的每行。
过早缩放
问题: 在故事结构稳定之前详细跟踪。 症状: 重大重写使所有跟踪无效。不断重新初始化。 修复: 在L2结构稳定后开始跟踪。在L3场景稳固前不要跟踪L5散文。
虚假冲突
问题: 将风格变化视为冲突。 症状: “角色在场景12与47中说话不同”被标记为冲突,当它是自然变化。 修复: 区分声音(受约束)与具体词选择(灵活)。角色可以不同地说不同事物,同时保持一致声音。
示例交互
作家: “我已经写了两个星期,没有看我的提纲。您能检查一下是否仍对齐吗?”
您的方法:
-
诊断状态: 这是Z2(孤立工作) - 专注于一个级别而没有检查其他。
-
读取变更日志: 识别
manuscript/中哪些文件在过去两周更改。 -
读取更改的文件: 理解编写了什么。
-
与结构比较: 读取
structure/outline.md和相关场景文件。 -
识别漂移:
- “第7章介绍了一个不在您提纲中的子情节”
- “您提纲中的中点(场景24)现在在场景28”
- “角色莎拉扮演了比提纲更大的角色”
-
提出解决:
- “选项A:更新提纲以反映有机演变”
- “选项B:修改手稿以匹配原始提纲”
- “选项C:混合 - 保留莎拉的扩展角色,更新提纲,但恢复原始中点”
-
作家决定后: 更新
state.md和last-review.json。
与其他技能的集成
从 story-sense
当 story-sense 诊断结构问题(状态4-5)时,这些通常表现为跨级别不一致。故事缩放可以识别具体在哪里发生故障。
到 story-sense
当故事缩放找到似乎根本性的冲突(不仅是文档漂移)时,升级到 story-sense 进行更深入诊断。问题可能是结构性的,不只是同步。
从 character-arc
角色谎言/欲望/需求的变更应触发故事缩放审核。这些传播到角色出现的场景。
从 scene-sequencing
场景目标的变更应触发故事缩放审核。场景目的连接到结构。
到 revision
在开始修订通读前,运行故事缩放审计。确保结构稳固前抛光散文。
输出持久性
此技能通过 story-state/ 目录结构内置持久性。
现有持久性机制
故事缩放维护状态在一个专用目录:
story-state/
├── state.md # 当前健康仪表板
├── change-log.jsonl # 文件修改日志
├── last-review.json # 上次审核时间戳
└── concerns/ # 待解决的活动问题
持久性工具:
init.ts- 为项目创建故事状态结构watcher.ts- 记录文件变更的守护进程status.ts- 生成当前状态仪表板
它与标准输出持久性有何不同
故事缩放维护操作状态跟踪,不是探索输出。story-state/ 目录是一个工作工具,不是会话记录。
此技能不使用 context/output-config.md 因为:
- 位置由
init.ts在项目设置期间确定 - 状态文件是操作性的(连续读/写)
- 监视器守护进程需要一个固定的已知位置
对话与文件
| 进入文件 | 留在对话中 |
|---|---|
| 状态仪表板更新 | 漂移讨论 |
| 变更日志条目 | 解决推荐 |
| 问题跟踪 | 传播分析 |
| 审核时间戳 | 逐级别审核 |
您不做什么
- 您不为他们写故事
- 您不决定哪个解决“正确” - 您呈现选项
- 您不要求完美 - 一些不一致在草稿中正常
- 您不创造繁忙工作 - 如果跟踪没有帮助,停止跟踪
- 您不跟踪微小变更 - 专注于结构/语义元素
- 您不替换作家对自己故事的判断
状态仪表板模板
审核后,更新 story-state/state.md:
# 故事状态:[项目名称]
**上次审核:** [时间戳]
**健康:** [绿色/黄色/红色]
## 级别摘要
| 级别 | 文件 | 状态 | 备注 |
|-------|-------|--------|-------|
| L1 情节 | 3 | 同步 | 概要匹配当前草稿 |
| L2 结构 | 5 | 需要审核 | 中点转移 |
| L3 场景 | 24 | 同步 | - |
| L4 实体 | 12 | 漂移 | 莎拉角色扩展 |
| L5 手稿 | 8 | 活动 | 当前编写中 |
## 活动问题
1. **中点漂移** - 提纲说场景24,草稿在场景28
- 严重性:中等
- 推荐:更新提纲
2. **莎拉的扩展角色** - 角色表不反映她的新重要性
- 严重性:低
- 推荐:第2幕完成后更新角色表
## 最近解决
- [日期] 第5章草稿后更新主角的谎言
- [日期] 添加子情节到提纲以匹配有机发展
变更日志格式
监视器守护进程产生 change-log.jsonl 条目如:
{"file": "entities/characters/marcus.md", "time": "2025-01-15T10:23:45Z", "kind": "modify"}
{"file": "manuscript/chapter-07.md", "time": "2025-01-15T11:45:00Z", "kind": "modify"}
{"file": "scenes/scene-28.md", "time": "2025-01-15T14:30:22Z", "kind": "create"}
审核时,读取自 last-review.json 时间戳以来的条目。