直聘插入按模块回馈,并记录请求骨架便于排查。 Co-authored-by: Cursor <cursoragent@cursor.com>
11 KiB
11 KiB
开场白与开场变量
技能文档。程序只切割下方 fence 块;
##标题仅供人读。
产物外壳:docs/context-fragment-design.md。
创作终节点:规格与呈现契约已齐。写出 1~多条开场(每条 = meta 初值/角色 + present.v1 正文)供选定;选定后程序落库、关闭工作流、保存定稿。
不必再调磁盘 workeropening-generator(无本步时它仍可作兜底落库)。
meta
name: 开场白与开场变量
id: opening-setup
artifact: 设计.开场白与开场变量
declaration: >
创作终节点:写出 1~多条开场(每条 = meta 初值/用户角色 + 正文 present.v1,壳与正文组成一致;须含字面 @玩家);选定后落库、结束创作并保存定稿
when: |
收成链已齐(至少体验契约可引用,且「细化终稿」已产出或可立即收成运行规格),需要可开玩的第一段剧情与同真相初值。
排在收成之后作最后一步。用户要进游玩但还没有第一屏 → 排。
when_not: |
体验/呈现仍混沌 → 先「美学纲领与交互范式」与「回复呈现」「正文组成」等。
只要改文风不要开场 → 「叙事指南」(工序编排:「叙事指南与故事推进」)。
只要改真值规则不要开场文 → 「变量设计与更新规则」。
运行规格未齐 → 先「细化终稿」。尚未选定开场前若要补前序节点(如 NPC)→ 插在本步之前,勿以「收口已排入」拒绝追加。
boundary: |
本技能是创作终节点:1~多条开场。每条 = meta(用户角色名字+简介、开场变量初值)+ 正文(present.v1,shell 与「设计.正文组成」一致)。
用户角色跟这条开场走;不同开场可有不同用户角色。初值与该条叙述同真相。
必须遵守已验收的叙事指南、回复呈现、正文组成、变量设计;不重做这些契约。正文不得只交一段散文。
具体实例:开场可引用已有实例名片,不在本步新造百科。
选定后由程序写入 输出.开场白 / 运行.初始变量 / 运行.开场用户角色 / 变量.当前,关闭 DAG 并保存定稿;不要在本步之后再排其它能力。
feeds: narrator
opening
设定已齐时,用几句话定开场第一拍:
1. 玩家睁眼/进场时在哪、正发生什么?
2. 开场结束时,TA 显然可以做什么?
3. 此时各真值大概是多少?(能推断的直接说;推不出的标「要问」)
task
你正在执行「开场白与开场变量」。这是创作最后一步。产物必须是 **context-fragment.v1** JSON,写入「设计.开场白与开场变量」。
主产物:1~3 条可开玩开场(选定后落库结束创作)。每条必须是 **meta + 正文** 两截,不是一段散文。
**正文 = 正文组成的输出格式(强制):**
- 读「设计.正文组成」的 `呈现壳.shell_id` 与可见区域。
- 每条 `正文` 必须是 **present.v1 对象**(与游玩终稿、正文组成「示例.灌数」同形)。`shell` 必须等于该 shell_id。只填该壳已有区域;没有的键省略或空字符串。
- 用户主读写在 `blocks.body`;监控栏初值写在 `blocks.monitor`(短键值,勿长文);建议行动写在 `正文.meta.suggested_actions`。
- prose 壳也要包成 present.v1(`blocks.body`),不要只交裸 Markdown。
- 开场比一章短:愿点进游玩即可,不必凑游玩默认 1000~2000 字。
**meta = 这条开场的初始设定:**
- `用户角色`:名字+简介(有代入则必填;不同开场可以不同)。
- `开场变量`:与该条叙述同真相的初值(名与变量设计一致)。顶层再抄一份推荐条的初值,供程序落库。
**用户角色占位(产物规格,不是可选项):**
- `开场白全文`、每条候选 `正文`(含 `blocks.body` 及其它有字区域)里,凡指称用户扮演角色,第三人称点名处必须写字面量 `@玩家`(六个字符:`@` + `玩家`)。
- 每条候选正文至少出现一次 `@玩家`。禁止写死具体姓名(如林晚、阿泽);禁止用「用户」「主角」顶名字位。
- 「你」可与 `@玩家` 并用;若全文只有「你」、零个 `@玩家`,视为不合格,改写后再交。
- 进游玩时程序把 `@玩家` 换成当前用户角色名;创作稿必须保留字面 `@玩家`。
执行顺序:
1. 读依赖:worker 集/美学/叙事/**正文组成(先抄 shell_id)**/监控栏/变量设计/舞台与实例。
2. 写 1~3 条候选:每条 `meta`(用户角色+开场变量)+ `正文`(present.v1)。同真相、第一拍可不同。
3. 推荐条的 present.v1 同时写入 `开场白全文`(对象,不是字符串)。
4. 顶层 `开场变量` = 推荐条 meta 里那份初值。冲突以叙述为准。
5. 交稿前自检:每条 `正文.shell` 与正文组成一致;JSON 搜索 `@玩家`;再自评 + 追问;输出 JSON。
缺上游契约时:能写则按已有材料写开场并标开放问题;不能成立第一拍则追问 1~2 点,勿交空壳。
summary:`开场白与开场变量 · …`(点题场景)。
principles
1. 开场为主,表为配套。
2. 正文 = present.v1,壳与「设计.正文组成」一致;文风跟叙事指南。尚未钉壳时用 prose 包一层 present.v1,并标开放问题。
3. 同真相:该条 meta.开场变量 与该条叙述一致。
4. 可行动:第一拍结束有下一步空间;写入 suggested_actions(该壳开行动时)。
5. 短:愿点进游玩,非第一章。
6. 不剧透隐藏档。
7. 用户角色名位 = 字面 `@玩家`(见 task 规格);不合格则改写。
probe
开场地点/冲突不清;某真值开场值推不出;壳区域是否都要填;候选是否漏写 `@玩家` 或写成了裸散文。一次 1~2 点。
output
{
"schema": "context-fragment.v1",
"技能": "开场白与开场变量",
"brief": "一句话:开场场景 + 关键初值",
"mount": ["narrator"],
"稳变": "stable",
"正文": {
"依据契约": [
"正文组成 / 叙事指南 / 监控栏 / 变量设计 等已遵循要点;写出所用 shell_id"
],
"用户角色": {
"名字": "沈聿",
"简介": "本地放贷人;与这对母女相识但不熟。"
},
"开场白全文": {
"schema": "present.v1",
"shell": "与设计.正文组成.呈现壳.shell_id 一致",
"blocks": {
"monitor": { "地点": "堂屋", "债额": "三两" },
"body": "清晨,@玩家推开堂屋门,债契还摊在桌上。……"
},
"meta": { "suggested_actions": ["问债", "先坐下"] }
},
"开场白候选": [
{
"meta": {
"用户角色": { "名字": "沈聿", "简介": "本地放贷人;与这对母女相识但不熟。" },
"开场变量": [
{ "名": "债额", "值": 3, "依据": "桌上债契" }
]
},
"正文": {
"schema": "present.v1",
"shell": "与开场白全文.shell 相同",
"blocks": {
"monitor": { "地点": "堂屋", "债额": "三两" },
"body": "清晨,@玩家推开堂屋门,债契还摊在桌上。……"
},
"meta": { "suggested_actions": ["问债", "先坐下"] }
}
}
],
"开场变量": [
{
"名": "与变量设计真值名一致",
"值": "初值",
"依据": "开场事实/设定推断"
}
],
"隐藏段开场": "通常空;若正文组成钉了隐藏段且开场必须写出,写入 present.v1 blocks.hidden",
"落库提示": {
"输出.开场白": "推荐条 正文(present.v1 JSON)",
"运行.初始变量": "该条 meta.开场变量 → 表格式",
"运行.开场用户角色": "该条 meta.用户角色 → 名字+简介",
"变量.当前": "与初始变量对齐"
},
"用户可行动空间": "开场结束后玩家显然能尝试什么"
},
"自评": {
"维度": [
{
"名": "契约符合",
"分数": 8,
"说明": "是否 present.v1、shell 与正文组成一致、叙事/变量同真相"
},
{
"名": "同真相",
"分数": 8,
"说明": "开场叙述与开场变量是否一致"
},
{
"名": "可开玩",
"分数": 8,
"说明": "是否短、可感、有下一步行动空间"
},
{
"名": "玩家占位",
"分数": 8,
"说明": "每条候选是否含字面 @玩家、无写死姓名"
},
{
"名": "版式符合",
"分数": 8,
"说明": "是否 present.v1,shell 与正文组成一致,区域未超出该壳"
}
],
"薄弱点": "一句话"
},
"追问": {
"导语": "为钉准开场,还需确认:",
"题目": [
{
"问": "…",
"建议选项": ["选项A", "选项B", "其它(请写明)"],
"示例": "可选"
}
]
},
"开放问题": []
}
硬规则:
- context-fragment.v1;自评含「玩家占位」与「版式符合」。
开场白全文与每条候选正文必须是 present.v1 对象(含schema/shell/blocks.body);shell与「设计.正文组成」一致。禁止只交散文字符串。开场白候选1~3 条,每条含meta(用户角色有代入则必填;开场变量与该条同真相)+正文。顶层开场变量必填(推荐条初值)。- 每条正文(含 body)必须含字面
@玩家;不发明新真值名。 - summary:
开场白与开场变量 · {brief 缩略}。
checklist
- [ ] 1~3 条候选,推荐条 正文 = `开场白全文`(均为 present.v1)?
- [ ] `shell` 与「设计.正文组成」一致?只填该壳已有区域?不是裸散文?
- [ ] 每条候选可搜到 `@玩家`?无写死姓名?
- [ ] 该条 meta 初值与叙述同真相?有行动空间?
- [ ] 未剧透隐藏档、未写成第一章?
examples
好:正文为 present.v1,shell 与正文组成相同;body 里有字面 @玩家;meta 带用户角色与开场变量。
好:prose 壳也包成 {"schema":"present.v1","shell":"prose","blocks":{"body":"冷风灌进来时,@玩家还握着空水瓶。"}}。
好:「你(@玩家)站在闸机前,票夹是空的。」写在 blocks.body。
坏:`开场白全文` 只是一段字符串,没有 present.v1。
坏:shell 与正文组成不一致,或灌了该壳没有的区域。
坏:全文只有「你推开门」——零个 `@玩家`。
坏:「林晚推开门」——写死姓名。