主世界层直接写正文,转述与旁观改读用户展示输出。

去掉裁决包主路径,让无转述时可直出终稿、有转述时再改写镶壳。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-10 02:18:14 +08:00
co-authored by Cursor
parent d65ebbce8b
commit 3d720f23fe
27 changed files with 290 additions and 216 deletions
@@ -56,9 +56,9 @@ feeds: design_only
2. 禁止重写上游长文;只写顺序与投影。
3. 每轮槽:order 0=该槽固定人设;其后按「稳→对话.历史→易变」软排。
4. 主世界层必须含 ref=`对话.历史`(默认 projection=summary);转述与旁观维护默认不含历史。
5. 主世界层应双挂「设计.叙事指南与故事推进」等 mount 到 gm 的块;有「设计.随机范围整理」则挂 gm(summary 即可);转述只读裁决+文风/壳。
6. 旁观维护在回合末:须含「运行.本轮.裁决」与变量合同,不含历史。
7. 越稳越靠前;本轮输入/真值/裁决通常在历史之后。
5. 主世界层应双挂「设计.叙事指南与故事推进」等 mount 到 gm 的块;有「设计.随机范围整理」则挂 gm(summary 即可);转述只读本轮正文(输出.用户展示)+ 文风/壳。
6. 旁观维护在回合末:须含「输出.用户展示」与变量合同,不含历史。
7. 越稳越靠前;本轮输入/真值/正文通常在历史之后。
8. 同一内容可挂多槽。
9. summary:如 `投影排序 · 旁观+主世界层+转述`。
@@ -76,8 +76,8 @@ boundary: |
```principles
1. 合并优于重写;槽位优于发明演员。
2. 面向用户的终稿点 acceptance=review(默认是 world-simulator;开了转述则是 narrator;写手是 chapter-writer);旁观/outline 常用 continue;有转述时 gm 用 continue。
3. 真值变更写在 gm 的 outputs(运行.本轮.变量变更 / 裁决包内 variable_changes),旁观维护只出 maintain.v1;不靠第三变量 Worker。
4. 裁决包约定:启用转述时,运行.本轮.裁决 使用 settlement.v1(见 progressive-data-design / 模板);Runtime 合并 variable_changes。无转述时主世界层直接写 输出.用户展示。
3. 真值变更主路径:旁观维护 maintain.v1(读本轮正文改表);可选正文隐藏段维护语句。主世界层只写故事正文,不交 settlement 裁决包。
4. 正文约定:主世界层始终写「输出.用户展示」(Markdown)。无转述时原文即终稿;有转述时转述读该正文再提取/改写/镶壳并覆盖终稿。
5. 键名稳定;未决进 open_questions。
```
@@ -174,7 +174,7 @@ summary:`正文组成 · 适配 {shell_id} · …`。
"拼装方": "叙事转述一次写出各块|程序按块拼接|混合",
"推荐灌数": "分块壳优先 present.v1;prose 可为纯 Markdown",
"单轮正文篇幅": "以回复呈现的字数为准,本步不重钉",
"与裁决包关系": "转述读 settlement 再填各块;隐藏段可含 variable_changes 镜像"
"与正文关系": "转述读主世界「输出.用户展示」再填各块;可补残稿与版式,不改剧情;隐藏段可供旁观解析维护语句"
},
"示例": {
"性质": "验收预览|非正史|仅看壳与美化",
@@ -37,7 +37,7 @@ feeds: gm
1. 数字/阶段?(好感、章节、资源…)一次性门?
2. 有没有「到了某值换一套态度/大纲」的表?(表正文可已在具体实例里)
3. 每轮模型用什么方式声明变量变了?(裁决包字段 / 隐藏段键值 / 两者)
3. 每轮如何声明变量变了?(旁观维护 maintain.v1 / 正文隐藏段键值 / 两者)
4. 旁观或主世界层是否需要一份「当前映射摘要」(如好感档→性格要点)?
```
@@ -51,14 +51,14 @@ feeds: gm
- **Data 映射**:阈值→切片大表(性格档、章纲、事件池)——格式归生成规则,行归具体实例;本步建索引并指向实例/规则 id
- **Progressive**:side_effects 按真值边沿投影当前切片;旁观/主世界层读投影或汇总,不整表常驻
**维护语句**:规定模型每轮如何声明变更(供程序拆进 `变量.当前` / 裁决包 `variable_changes`)。
**维护语句**:规定如何声明变更(供程序拆进 `变量.当前`)。主路径是旁观维护 `maintain.v1`(读本轮正文推断 table_ops);可选正文隐藏段键值。主世界层不交 settlement 裁决包。
这不是掷骰;随机数走「随机范围整理」+ 程序插入的备用数。隐藏段定界与「正文组成」对齐。
执行顺序:
1. 读美学/机制/生成规则/具体实例/正文组成;不重开体验。
2. 立真值(承重才建);写写入源与更新规则。
3. 建 Data 映射索引:每张表写清键依哪个真值、材料来自哪条 rule_id/batch、给旁观/投影用的摘要字段。
4. 写维护语句约定:形状、必填键、与隐藏段/settlement 的关系、示例一句。
4. 写维护语句约定:形状、必填键、与隐藏段/旁观维护的关系、示例一句。
5. 写 side_effects(once/every_edge → replace_tag 等)。
6. 自评 + 追问;输出 JSON。
@@ -71,7 +71,7 @@ summary:`变量设计 · …`(点题主真值 + 有无映射表)。
1. 承重才立真值;派生性格不落第二可写格。
2. 映射内容:具体实例生成 → 本步索引汇总 → side_effects/变量控制上下文供给旁观与主世界层。
3. 维护靠「声明 + 程序合并」,不靠模型直接改库:
- 主路径:裁决包 variable_changes 和/或正文隐藏段(正则/定界)→ Runtime 合并进 变量.当前
- 主路径:旁观维护 maintain.v1(读本轮正文)和/或正文隐藏段(正则/定界)→ Runtime 合并进 变量.当前
- 边沿:side_effects 换投影 tag
- 用户手改;chance 只出随机数,不替代维护语句
4. 维护语句必须可生成、可校验:固定键名、短值、禁止散文糊弄。
@@ -82,7 +82,7 @@ summary:`变量设计 · …`(点题主真值 + 有无映射表)。
## probe
```probe
每轮 1~2 点:主真值;连续数字还是阶段枚举;维护走裁决包还是隐藏段还是两者;映射表是否已有具体实例可索引;旁观要不要当前档摘要。
每轮 1~2 点:主真值;连续数字还是阶段枚举;维护走旁观 maintain / 隐藏段 / 两者;映射表是否已有具体实例可索引;旁观要不要当前档摘要。
```
## output
@@ -127,18 +127,18 @@ summary:`变量设计 · …`(点题主真值 + 有无映射表)。
}
],
"维护语句约定": {
"通道": ["settlement.variable_changes", "隐藏段", "二者都要"],
"与正文组成对齐": "隐藏段段id / 定界约定;无隐藏段则写「仅用裁决包」",
"通道": ["旁观maintain.v1", "隐藏段", "二者都要"],
"与正文组成对齐": "隐藏段段id / 定界约定;无隐藏段则写「仅旁观维护」",
"语句形状": {
"格式": "JSON行|键值列表|与 settlement 字段同构",
"格式": "maintain.v1 table_ops|隐藏段键值列表",
"必填键": ["key", "delta|to"],
"禁止": ["无键散文", "改未立真值"]
"禁止": ["无键散文", "改未立真值", "主世界层交 settlement JSON"]
},
"生成要求": "主世界层每轮须输出可解析维护语句(哪怕本轮无变更也给空列表)",
"生成要求": "旁观维护按本轮正文推断变更(多数轮可空);主世界层专注故事正文",
"示例": [
{ "key": "好感", "delta": 8, "reason": "送礼成功" }
],
"程序侧": "Runtime 合并进 变量.当前;再跑 side_effects;非 chance toolcall"
"程序侧": "Runtime 合并 maintain.v1 → 变量.当前;再跑 side_effects;非 chance toolcall"
},
"side_effects": [
{
@@ -208,7 +208,7 @@ summary:`变量设计 · …`(点题主真值 + 有无映射表)。
```checklist
- [ ] 真值有写入源与更新时机?
- [ ] 映射索引指向规则/实例或标待补?旁观摘要键清楚?
- [ ] 维护语句可解析且与正文组成/settlement 对齐?
- [ ] 维护语句可解析且与正文组成/旁观维护对齐?
- [ ] 未把分档长文做成可写真值?未用 chance 当改表?
```
@@ -38,7 +38,7 @@ boundary: |
世界模拟类常见:
1. 主世界层(推进 + 默认直接写可见正文)——要(几乎总要)
2. 叙事转述(独立文风层再改写正文)——要 / 不要(默认不要)
2. 叙事转述(读主世界正文再改写/镶壳;可补残稿)——要 / 不要(默认不要)
3. 旁观维护(有变量/表/规则要盯时才开;默认不要)——要 / 不要
4. 角色视角(仅当有强秘密、不能进主世界层时)——要 / 不要(默认不要)
@@ -30,7 +30,7 @@ principles:
- 有编排参数的步骤:进执行前钉齐 params(askUser 选项+其它);缺参时先问再进 design-step。
- 〔可反复〕可再追加(彻底新建);已验收 id 留在 steps。
- 舞台骨架通常都排(备案,只分详细度);代入后几乎不移动、只在一处待着则不排。实现机制对照其 meta。
- 百科与查表归主世界层;默认可见正文也归主世界层;仅显式开转述时正文才改由转述写。
- 百科与查表归主世界层;可见正文默认由主世界层直接写;显式开转述时转述在主世界正文上改写/镶壳。
brief: 世界模拟类:美学卡上在意的部分→挂槽写上下文→晚排序投影→收成运行规格
@@ -25,14 +25,14 @@ Runtime 执行时读 Worker 集条目,不直接读本目录。
| 槽 | 默认 ref | 模板 |
|----|----------|------|
| auditor | `auditor` | `auditor.yaml` — maintain.v1;默认空操作;无长对话史(默认关) |
| gm | `world-simulator` | `world-simulator.yaml` — 默认直接写用户可见正文;开转述时改出 settlement.v1;`play_slots.chance` 开时 harness 批量机遇工具 |
| narrator | `narrator` | `narrator.yaml` — 只读裁决包写正文(默认关) |
| auditor | `auditor` | `auditor.yaml` — maintain.v1;读本轮正文;默认空操作;无长对话史(默认关) |
| gm | `world-simulator` | `world-simulator.yaml` — 始终写 Markdown 故事正文;`play_slots.chance` 开时 harness 批量机遇工具 |
| narrator | `narrator` | `narrator.yaml` — 读主世界正文,提取/改写/镶壳(默认关) |
| perspective | `role-decide` | `role-decide.yaml` — 可选知密视角 |
| chance(拓扑开关) | `chance` | `play_slots.chance` 控制 gm harness;可选声明按需 `chance` ref 供显式 run_worker |
变量 / Progressive:**不是**独立 LLM 模板;见 `docs/progressive-data-design.md`(真值 + side_effects)。
Runtime:写入 `运行.本轮.裁决` 时自动合并 `variable_changes` → `变量.当前`;写入 `运行.本轮.旁观` 时按需合并 `table_ops`。
Runtime:写入 `运行.本轮.旁观` 时按需合并 `table_ops`;遗留 `运行.本轮.裁决` 仍可合并 `variable_changes`(兼容旧存档)。
## 其它文件
@@ -2,17 +2,17 @@ id: auditor
label: 旁观维护
role: auxiliary
duty: >
副 LLM:回合末检查表字段与生成规则是否需要补充;默认空操作。
读本轮裁决 + 变量合同 + 当前表;改表结果供下一轮主世界层读取。
副 LLM:回合末根据本轮正文与合同,检查表字段与生成规则是否需要补充;默认空操作。
读本轮用户可见正文(或主世界草稿)+ 变量合同 + 当前表;改表结果供下一轮主世界层读取。
只出 maintain.v1(运行.本轮.旁观);不写用户正文、不写真相权威。
when: 叙事转述完成后(回合末)
when: 叙事转述完成后(无转述则主世界正文写入后;回合末)
suggested_context:
static:
- 设计.变量设计与更新规则
- 设计.生成规则
- 设计.变量控制上下文
dynamic:
- 运行.本轮.裁决
- 输出.用户展示
- 用户.最新输入
- 变量.当前
- 上下文.旁观.状态摘要
@@ -20,7 +20,7 @@ suggested_outputs:
- 运行.本轮.旁观
prompt_excerpt: |
你是旁观维护(副 LLM),不是主世界层,也不是叙事作者。
读合同(生成规则/变量规则/旁观摘要)、当前表,以及本轮主世界层裁决包。
读合同(生成规则/变量规则/旁观摘要)、当前表,以及本轮正文(输出.用户展示;相对完整上下文通常极短的一层楼新文)。
不读对话历史。表维护合并后供下一轮主世界层读取,不在本轮重裁。
「运行.本轮.旁观」必须是 JSON,schema 为 maintain.v1:
{
@@ -30,7 +30,7 @@ prompt_excerpt: |
"notes": []
}
多数轮保持空:need_generate=false、table_ops=[]、notes=[]。
table_ops 仅在确需改「变量.当前」等表字段时使用(op=set|delta)。
table_ops 仅在确需改「变量.当前」等表字段时使用(op=set|delta);依据本轮正文里已发生的后果推断,勿臆造正文未支持的变更。
need_generate 仅在确需按某条 rule_id 补实例时写成 { "rule_id", "reason" }。
程序只会抽该规则里的元素池;方向池由主世界层按规则自创,不要指望抽签出标签。
禁止编造长对话续写;禁止输出用户可见正文;禁止修改未点名的无关字段。
@@ -2,24 +2,25 @@ id: narrator
label: 叙事转述
role: transcription
duty: >
只读「运行.本轮.裁决」结构化包 + 叙事指南/正文组成(壳由程序套用),
组装「输出.用户展示」。只改表达,不改事实、不补裁决;不读对话历史。
when: 主世界层裁决包已写入后
只读主世界层本轮正文(输出.用户展示)+ 叙事指南/正文组成(壳由程序或提示约束),
提取场面、按文风改写、按壳镶嵌前端可读终稿。可补全残缺叙述;不改剧情事实;不读对话历史与百科长文。
when: 主世界层本轮正文已写入后
suggested_context:
static:
- 设计.叙事指南与故事推进
- 设计.正文组成
- 设计.监控栏
dynamic:
- 运行.本轮.裁决
- 输出.用户展示
suggested_outputs:
- 输出.用户展示
presentation_hints:
mode: present.v1 | prose
tone: 依 Worker 集 presentation / 叙事指南 / 正文组成壳
prompt_excerpt: |
你是面向用户的叙事转述。输入是结构化裁决包(settlement.v1),不是自由发挥的世界真相。
不读对话历史;连续性来自裁决包内的 visible_now / resolved / npc_moves。
你是面向用户的叙事转述。输入是主世界层已写出的本轮正文,不是结构化裁决包,也不是自由发挥的世界真相。
不读对话历史与百科;连续性与事实以主世界正文为准。正文残缺时:可补描写、衔接与版式,但不得新增/改写剧情事实、角色未给出的行动或对话。
工作顺序:① 从主世界正文提取用户应看见的场面与信息;② 按叙事指南/模仿要点改遣词造句与节奏(不改情节);③ 按「设计.正文组成」壳写出终稿。
先读「设计.正文组成」的呈现壳 shell_id(prose|chat_monitor|spotlight|turn_panel|split_board|choice_dock|chapter_reader):
- prose:可直接输出 Markdown 正文(程序会落入 body)。
- 其它壳:优先输出 JSON,schema 为 present.v1:
@@ -38,9 +39,9 @@ prompt_excerpt: |
monitor 用短键值(芯片),勿写长文。只填该壳已有区域。
用户主读正文(body)默认 1000~2000 字(汉字);以「设计.监控栏」回复呈现已钉字数为准。
采用完整长自然段叙述,不要单句成段;不要几句短信就结束。
用户输入用法以「设计.叙事指南与故事推进」为准。常见两套:
- 大纲扩写:输入当大纲扩写为事实,细化后写正文;不超出大纲未涉及的剧情,完整演绎大纲。
- 扮演停笔:把用户本轮行为与对话作正文开头并扩写填满;不可写用户角色未给出的其它行为/对话;不可替用户角色做决定;正文停在其他角色等用户角色回应之刻。
用户输入用法以「设计.叙事指南与故事推进」为准:
- 大纲扩写:把主世界正文当事实底稿,细化文风后写完整终稿;不超出底稿未涉及的剧情;一次成篇,勿停等用户行动。
- 扮演停笔:仅当叙事指南明确钉了此用法时——终稿停在其他角色等用户角色回应之刻;不可写用户角色未给出的其它行为/对话。
- 未钉叙事指南时:按大纲扩写,禁止默认扮演停笔。
禁止在正文里写出 tag 名(「输出.用户展示」)、压缩摘要或过程日志。
禁止写出 do_not_say;禁止编造包中没有的事实。
若裁决含 tone_hint / npc_moves / suggested_actions,须体现在 body 或 meta。
禁止编造主世界正文中没有的事实。
@@ -3,7 +3,7 @@ label: 主世界层
role: core
duty: >
读用户输入、真值与 Progressive 投影并推进世界。
默认无独立转述:直接写用户可见正文(输出.用户展示);可选开转述时改出 settlement.v1 裁决包。
直接写出本轮故事正文(Markdown);无转述时原文即终稿,有转述时正文仍由本层先交,转述再提取/改写/镶壳。
when: 每轮用户输入后上场
suggested_context:
static:
@@ -21,16 +21,17 @@ suggested_context:
- 大纲.当前章
suggested_outputs:
- 输出.用户展示
- 运行.本轮.裁决
- 运行.事件流
- 运行.本轮.变量变更
prompt_excerpt: |
你是主世界层。读真值、已投影上下文、对话历史与用户本轮输入。
默认无独立转述层:把本轮场面直接写成用户可见正文(present.v1 或 Markdown),原文即终稿;
用户输入用法以「设计.叙事指南与故事推进」为准(扮演停笔则把用户本轮行为/对话作正文开头并扩写填满)。
若本局启用了叙事转述:则改为输出 settlement.v1 裁决包(player_action、resolved[]、visible_now、npc_moves[]、variable_changes[]、do_not_say[]、tone_hint),正文交给转述。
variable_changes 由 Runtime 合并进变量.当前——若写裁决包请写清 key 与 to/delta。
若叙事指南为「扮演停笔」:只推进用户本轮已声明的行为/对话;禁止替用户角色发明其它行动或做决定;可推进到需要用户角色回应之刻即停。
直接写出本轮故事正文(优先纯 Markdown / 自然语言叙述)。重心在故事如何推进、人物如何扮演——不要为程序交 JSON 裁决包。
无独立转述时:你写的正文就是用户终稿。
若本局启用了叙事转述:你仍写完整(或尽量完整)的场面正文;文风润色、残稿补全、前端壳由转述处理。不要改成「只交事实包」。
真值/表字段变更不靠你交结构化包:有旁观维护时由副 LLM 根据本轮正文改表;若正文组成钉了隐藏段维护语句,可按约定写短键值,否则不要为维护打断叙述。
用户输入用法以「设计.叙事指南与故事推进」为准:
- 钉了「大纲扩写」:本轮输入=待扩写大纲/场面要点;一次交完整篇正文,勿停在等用户行动处。
- 钉了「扮演停笔」:才只推进用户已声明行为/对话,并停在需用户回应之刻。
- 未钉叙事指南时:按大纲扩写处理,禁止默认扮演停笔。
需要随机数时:只用本轮上下文里程序已插入的备用随机数(见「设计.随机范围整理」);禁止口算编造。
不要把未投影的分档长文整表塞进输出;只写本轮可见后果。
禁止在正文里写出 tag 名、压缩摘要或过程日志。