# 开场白与开场变量 > 技能文档。程序只切割下方 **fence 块**;`##` 标题仅供人读。 > 产物外壳:`docs/context-fragment-design.md`。 > **创作终节点**:规格与呈现契约已齐。写出 1~多条开场(每条 = meta 初值/角色 + present.v1 正文)供选定;选定后程序落库、关闭工作流、保存定稿。 > 不必再调磁盘 worker `opening-generator`(无本步时它仍可作兜底落库)。 ## meta ```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 ```opening 设定已齐时,用几句话定开场第一拍: 1. 玩家睁眼/进场时在哪、正发生什么? 2. 开场结束时,TA 显然可以做什么? 3. 此时各真值大概是多少?(能推断的直接说;推不出的标「要问」) ``` ## task ```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 ```principles 1. 开场为主,表为配套。 2. 正文 = present.v1,壳与「设计.正文组成」一致;文风跟叙事指南。尚未钉壳时用 prose 包一层 present.v1,并标开放问题。 3. 同真相:该条 meta.开场变量 与该条叙述一致。 4. 可行动:第一拍结束有下一步空间;写入 suggested_actions(该壳开行动时)。 5. 短:愿点进游玩,非第一章。 6. 不剧透隐藏档。 7. 用户角色名位 = 字面 `@玩家`(见 task 规格);不合格则改写。 ``` ## probe ```probe 开场地点/冲突不清;某真值开场值推不出;壳区域是否都要填;候选是否漏写 `@玩家` 或写成了裸散文。一次 1~2 点。 ``` ## output ```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", "其它(请写明)"], "示例": "可选" } ] }, "开放问题": [] } ``` 硬规则: 1. context-fragment.v1;自评含「玩家占位」与「版式符合」。 2. `开场白全文` 与每条候选 `正文` 必须是 present.v1 对象(含 `schema`/`shell`/`blocks.body`);`shell` 与「设计.正文组成」一致。禁止只交散文字符串。 3. `开场白候选` 1~3 条,每条含 `meta`(用户角色有代入则必填;开场变量与该条同真相)+ `正文`。顶层 `开场变量` 必填(推荐条初值)。 4. 每条正文(含 body)必须含字面 `@玩家`;不发明新真值名。 5. summary:`开场白与开场变量 · {brief 缩略}`。 ## checklist ```checklist - [ ] 1~3 条候选,推荐条 正文 = `开场白全文`(均为 present.v1)? - [ ] `shell` 与「设计.正文组成」一致?只填该壳已有区域?不是裸散文? - [ ] 每条候选可搜到 `@玩家`?无写死姓名? - [ ] 该条 meta 初值与叙述同真相?有行动空间? - [ ] 未剧透隐藏档、未写成第一章? ``` ## examples ```examples 好:正文为 present.v1,shell 与正文组成相同;body 里有字面 @玩家;meta 带用户角色与开场变量。 好:prose 壳也包成 {"schema":"present.v1","shell":"prose","blocks":{"body":"冷风灌进来时,@玩家还握着空水瓶。"}}。 好:「你(@玩家)站在闸机前,票夹是空的。」写在 blocks.body。 坏:`开场白全文` 只是一段字符串,没有 present.v1。 坏:shell 与正文组成不一致,或灌了该壳没有的区域。 坏:全文只有「你推开门」——零个 `@玩家`。 坏:「林晚推开门」——写死姓名。 ```