收紧世界模拟器能力与壳提示,对齐新的落盘合同和呈现分工。

让选题填写与游玩投影读到一致的规格口径。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 23:49:34 +08:00
co-authored by Cursor
parent ff5c77bfb1
commit cf6cb68429
22 changed files with 623 additions and 462 deletions
@@ -5,10 +5,10 @@
```meta
name: 开场白与开场变量
id: opening-setup
artifact: 设计.开场白与开场变量
artifact: 设计.开场白
declaration: >
普通楼层创作终节点,且可增殖:每条开场是一个节点,落成 `设计.开场白#场景短码`。
默认写 1 条;用户要多个入口时再增殖。每条自带 present.v1、同真相初态与可选用户角色。
默认写 1 条;用户要多个入口时再增殖。每条自带 present.v1、同真相初态与这条开场的最少玩家角色事实。
全部保存。游玩时左右切换,选中的一条作为 0 层。
when: |
回复呈现、正文组成和其它本局内容能力均已完成,且程序已依次编译信息可见范围、游玩执行方式、上下文排序与运行配置后,需要可开玩的第一屏时使用。
@@ -34,22 +34,25 @@ feeds: gm,narrator
## task
```task
读取程序已组装的 `设计.worker集` 和全部最终层产物,写入 `设计.开场白与开场变量`。这是普通楼层创作终节点;不得在本步首次整理执行单元或上下文顺序。
读取程序已组装的 `设计.worker集` 和全部最终层产物,把每一张开场写成 `设计.开场白#场景短码`。这是普通楼层创作终节点;不得在本步首次整理执行单元或上下文顺序。
默认只生成 1 条开场。用户要多个入口时,每条再增殖一份产物,对话落盘写入 `设计.开场白#场景短码`(如 dorm、gate);改某一条则覆盖同一完整 tag。不要把多条入口收成聊天里的选择题。每条候选各自携带:
- 稳定 id 与一句区分说明
- 可选用户角色名片(不同候选可不同)
- 与该条叙述同真相的变量初值
- 若本局有拓扑:当前位置/焦点与已揭示范围
position 必须带场景短码,例如 `设计.开场白#opening-cycle2`。改某一条就再 insert 同一个完整 tag。裸 `设计.开场白` 和整包 `设计.开场白与开场变量` 会和带短码的卡抢同一条写入,不要使用。
默认只生成 1 条,仍然要带场景短码。用户要多个入口时,每条再 insert 一个新的短码。不要把多条入口收成聊天里的选择题,也不要把多条塞进同一次 insert。游玩时按这些短码左右切换,选中的一条作为 0 层,并整套换该条正文、初态与角色。
每一张卡携带:
- 符合正文组成数据契约的 `present.v1`(只填模型生成区)
全部候选都保存。每条正文只写在该候选的 `正文` 里,不要再抄一份全文或初值。`默认候选id` 指向第一次进入 0 层的那条;程序按这个 id 读取它的正文和初值。游玩时左右切换,选中的一条作为 0 层,并整套换该条正文、初态与角色。
- 可选一句区分说明
- 这一条开场的玩家角色 `meta.用户角色`(名字 + 简介):不同开场的玩家可以不同,写在各自卡里;程序会同步成同短码的主角设定,游玩切到这条时替换 `@玩家`
- 与该条叙述同真相的变量初值:这张卡有要开场定下的变量才写 `开场变量`;没有就不写,卡仍然是 `设计.开场白#场景短码`
- 若本局有拓扑:当前位置/焦点与已揭示范围
硬规格:
1. 每条可见正文至少出现一次字面 `@玩家`;不写死具体姓名顶名字位。
1. 可见正文里凡指称玩家角色的名字位都写字面 `@玩家`,每条至少出现一次。「你」可以和 `@玩家` 并用(如「你(@玩家)站在闸机前」),但全文只有「你」、零个 `@玩家` 不合格;不写死具体姓名,也不用「用户」「主角」顶名字位。
2. `present.v1` 的区域只覆盖正文组成声明的模型生成 blocks;程序投影区留空给程序灌。
3. 不输出 `名称.随机数` 的具体数组;随机行由程序在第一次正式回复前或回复时补齐。
4. 开场宜短,愿点进游玩即可,不抄故事推进的单轮篇幅预算当第一章。
5. 人物、地点、势力只引用已有产物里的;第一拍需要的路人只写身份,不在开场新造有名有姓的设定。
材料足够便直接成稿;会改变第一拍成立的缺口交给 `self_score.gap`。产物正文不放评分、诊断、追问或开放问题。
```
@@ -57,12 +60,13 @@ feeds: gm,narrator
## principles
```principles
1. 开场为主,初态配套。叙述与该条变量、拓扑初态必须同真相。
2. 默认一条。多条是不同入口,每条一个可增殖节点,不是同文换皮,也不是先让用户选唯一开场。
3. 用户角色可按候选不同;没有名片时仍用 `@玩家` 占位,进游玩再替换。
4. 只写模型生成区。状态芯片、地图等权威显示由程序投影,不在开场正文里重编一份。
5. 不剧透隐藏档,不写成第一章,不在本步改前端模板。
6. 本步结束后创作收口;不要再排后续内容能力。
1. 开场为主,初态配套。叙述与该条变量、拓扑初态必须同真相;写完发现两者对不上时以叙述为准,改初值。
2. 默认一条。多条是不同入口,每条一个 `设计.开场白#场景短码`,不是同文换皮,也不是先让用户选唯一开场。没有变量的卡省略 `开场变量`,短码照旧。
3. 玩家角色最少化:把这个角色交还给用户扮演。`用户角色.简介` 只写这条开场成立所必需的客观事实——身份、处境、与在场人物的已知关系,一到三句;不写性格、心理、动机、口癖、外貌细节,也不替玩家定态度或下一步。共通的主角设定已有的事实不重抄,只写这条开场独有或与它不同的部分。
4. 用户没给名字时不编名字,省略 `用户角色`,正文照用 `@玩家`;这条开场必需的身份事实写进叙述里让玩家看见。
5. 只写模型生成区。状态芯片、地图等权威显示由程序投影,不在开场正文里重编一份。
6. 文风、视角和人称跟叙事指南与交互范式;不剧透隐藏档,不写成第一章,不在本步改前端模板。
7. 本步结束后创作收口;不要再排后续内容能力。
```
## probe
@@ -74,62 +78,48 @@ feeds: gm,narrator
## output
```output
position: 设计.开场白#场景短码
content:
{
"schema": "context-fragment.v1",
"技能": "开场白与开场变量",
"brief": "一句话:默认开场场景 + 有几条候选",
"mount": ["world-simulator", "narrator"],
"稳变": "stable",
"正文": {
"默认候选id": "opening-1",
"开场白候选": [
"schema": "present.v1",
"shell": "与正文组成一致",
"blocks": {
"body": "清晨,@玩家推开门。……",
"其余模型生成区": "read_module 回包 reply_contract.model_blocks 里的每一项都要出现,类型按契约"
},
"meta": {
"区分": "多条时写这一入口和其它条差在哪;仅一条可省略",
"用户角色": {
"名字": "用户给过的名字;没给就省略整个用户角色",
"简介": "一到三句客观事实:这条开场里玩家是谁、处境如何、与在场人物的已知关系"
},
"开场变量": [
{
"id": "opening-1",
"区分": "这条入口与其它条差在哪;仅一条时可写「默认」",
"meta": {
"用户角色": {
"名字": "可选;无则省略整段",
"简介": "可选"
},
"开场变量": [
{
"名": "与变量设计真值名一致",
"值": "初值",
"依据": "开场事实"
}
],
"拓扑初态": [
{
"topology_id": "有拓扑时填写",
"当前位置": "节点 id",
"已揭示": ["节点或连接 id"]
}
]
},
"正文": {
"schema": "present.v1",
"blocks": {
"body": "清晨,@玩家推开门。……"
},
"meta": {
"suggested_actions": ["若正文组成启用文字选项则给短建议;否则 []"]
}
}
"名": "与变量设计真值名一致",
"值": "初值",
"依据": "开场事实"
}
],
"用户可行动空间": "开场结束后玩家显然能尝试什么"
"拓扑初态": [
{
"topology_id": "有拓扑时填写",
"当前位置": "节点 id",
"已揭示": ["节点或连接 id"]
}
],
"suggested_actions": ["若正文组成启用文字选项则给短建议;否则 []"]
}
}
```
硬规则:
1. 输出合法 JSON;`开场白候选` 默认 1 条,仅用户明确要求时 2~3 条。
2. `默认候选id` 必须指向候选之一。正文和初值只写在该候选上,不另抄全文或开场变量。
3. 每条 `正文` 必须是 `present.v1`,只含正文组成允许模型生成的 blocks;每条可见正文须含字面 `@玩家`。
4. 不同候选可有不同用户角色与初态;切换时整套替换,不混用。
1. 每次 insert 只写一张卡。position 是 `设计.开场白#场景短码`,content 是这一张的 `present.v1`。
2. 这张卡有初值才写 `meta.开场变量`;没有变量就省略该字段,position 仍带场景短码。
3. `present.v1` 只含正文组成允许模型生成的 blocks;可见正文须含字面 `@玩家`。
4. 不同卡可有不同用户角色与初态;切换时整套替换,不混用。
5. 不输出随机数具体值,不重写前端,不把程序投影区填成模型编造状态。
6. 产物正文不含自评、追问或开放问题。
7. `mount` 固定为 `["world-simulator", "narrator"]`。
7. 玩家角色只写在 `meta.用户角色`,名字不进 blocks 正文;程序据此写入同短码的 `设计.主角设定#场景短码`,不要另 insert 一份。
```
## score
@@ -150,9 +140,9 @@ feeds: gm,narrator
- 1:叙述与初值冲突,或多条共用一套却声称不同入口。
角色占位:
- 5:每条含字面 `@玩家`;有名片时不把姓名写进正文名字位。
- 3:占位大体正确,有一条名片与正文关系略乱。
- 1:写死姓名,或全文没有 `@玩家`。
- 5:每条含字面 `@玩家`;`用户角色.简介` 只有这条开场必需的客观事实,玩家性格与决定留给用户。
- 3:占位正确,但简介多写了性格、动机或与共通主角设定重复的内容。
- 1:写死姓名、全文只有「你」没有 `@玩家`,或简介替玩家定了性格和态度。
收口可切换:
- 5:默认条明确,全部候选可保存;多条时入口差异成立。
@@ -163,17 +153,22 @@ feeds: gm,narrator
## checklist
```checklist
- [ ] 默认 1 条;仅用户要求时才有 2~3 条?
- [ ] `默认候选id` 指向一条候选,且该条正文、初值没有在外面再抄一份?
- [ ] 每条含 `@玩家`,present.v1 只含模型生成区?
- [ ] 各候选初态自洽,未填写随机数具体值?
- [ ] position 是 `设计.开场白#场景短码`,没有另写裸 `设计.开场白` 或 `设计.开场白与开场变量`?
- [ ] 默认 1 条;仅用户要求时才再增殖别的短码?
- [ ] 有初值才写 `开场变量`;没有变量就省略,卡名不变?
- [ ] 含 `@玩家`,present.v1 只含模型生成区?
- [ ] `用户角色.简介` 只有必需客观事实,没有性格、心理和替玩家做的决定?
- [ ] 初态与这条叙述同真相,未填写随机数具体值?
- [ ] 未重开前端、篇幅或区域清单?
```
## examples
```examples
- 单条:堂屋债契,body 含 `@玩家`,开场变量写债额初值;状态栏由程序投影。
- 用户要两条入口:一条放贷人名片、一条社畜穿越名片;各带自己的初态,默认指定其中一条开玩。
- 不合适:开场里填写 `敏捷.随机数=[…]`;或把地图权威数据写成模型散文却不给拓扑初态。
- 单条:`设计.开场白#debt-hall`,堂屋债契,body 含 `@玩家`,开场变量写债额初值;状态栏由程序投影。
- 用户要两条入口:`设计.开场白#lender` 与 `设计.开场白#office`,各带自己的初态。没有初值的那条省略开场变量。
- 单条带玩家角色:`meta.用户角色` 为 `{"名字":"沈聿","简介":"本地放贷人,持有这家的债契;与这对母女相识但不熟。"}`,body 写「清晨,@玩家推开堂屋门,债契还摊在桌上。」
- 不合适:再写一份裸 `设计.开场白` 或 `设计.开场白与开场变量`;开场里填写 `敏捷.随机数=[…]`。
- 不合适:全文只有「你推开门」,零个 `@玩家`。
- 不合适:简介写「沉稳果决,内心渴望被认可,决定今天收回债款」——性格、心理和决定都该留给玩家。
```