/** * 剧本评审包生成:把评审简报 + 完整性快照 + 三份母文档合成一个文件, * 供上传给 ChatGPT / 其他 AI 做外部评审。 * * 运行:pnpm script:review * 输出:docs/script/review-bundle.md(生成物,内容更新后重跑本脚本刷新) */ import { readFileSync, writeFileSync } from 'node:fs'; import { join, dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..'); function readDoc(rel: string): string { return readFileSync(join(ROOT, rel), 'utf-8'); } const today = new Date().toISOString().slice(0, 10); const HEADER = `# 《苍梧疑冢》剧本评审包 > 生成时间:${today}(由 pnpm script:review 从仓库母文档自动合成) > 本文档供外部 AI 评审使用,包含:评审简报 → 当前完整性快照 → 三份母文档全文。 --- ## 一、这是什么 一款互动叙事("影游")交友产品的第一季剧本。核心机制:用户以"时空档案馆采集员"身份 玩考古探险剧情,**剧情中的选择和语音讲述被用来实测人格**(7 维度:依恋类型、冲突处理 风格、价值观、情绪稳定性、风险偏好、文化底蕴、择偶偏好),后续用于伴侣匹配。 因此剧本同时承担两个职责:① 作为互动小说要好看;② 作为心理测量工具要有效。 ## 二、请评审什么(按优先级) 1. **无正确答案铁律**:每个选择点的选项之间,是否存在社会赞许性上的"最优解"? 如果有玩家能轻易看出"选这个显得我更好"的选项,请逐条指出。 2. **分支完整性**:是否存在死路(选了某选项后剧情断裂)、逻辑矛盾 (前后文信息冲突)、变量引用错误(某旗标从未被设置却被读取)。 3. **测量有效性**:各选择点声称承载的人格维度,其选项差异是否真的能区分该维度? 有没有选项名义上测 A 维度、实际上更测 B 维度的错位? 4. **叙事质量**:节奏、NPC 声口一致性、悬念铺设;指出任何出戏、拖沓或工具化的段落。 5. **合规**:主角方必须始终是记录/保护者(不是盗墓);指出任何可能被理解为 鼓励破坏文物、盗掘的表述。 6. **可玩性 > 测量的优先级冲突**:指出任何"为了测量牺牲剧情自然度"的明显痕迹。 请逐章给出:严重问题(必须改)/ 建议改进 / 亮点(值得保留)。 ## 三、当前完整性快照(${today}) - **Act 1(第 1-3 章)**:剧本完成并已灌装进引擎数据(18 个选择点、4 个语音讲述点、 全部预写场景变体),本包内含全文。 - **自适应支线**(Jev 置信度低时动态插入的 5 条支线 × 2 变体):剧本完成,本包内含全文; 引擎的条件插入逻辑未实现。 - **Act 2(第 4-6 章)/ Act 3(第 7-9 章)**:只有弧线大纲(见故事框架第 2 节), 剧本未写。 - **已知留白**:解谜点的"三档提示"机制只有设计没有完整实现剧本;C2-06 的二级选项 未建模(剧本已注明叙事化处理)。 --- --- # 母文档 1:故事框架(设定、NPC、弧线、选择点地图、测量规则) ${readDoc('docs/story-framework.md')} --- --- # 母文档 2:Act 1 正式剧本(第 1-3 章全文) ${readDoc('docs/script/act1.md')} --- --- # 母文档 3:自适应支线剧本 ${readDoc('docs/script/adaptive-branches.md')} `; const outPath = join(ROOT, 'docs/script/review-bundle.md'); writeFileSync(outPath, HEADER, 'utf-8'); const lines = HEADER.split('\n').length; const chars = HEADER.length; console.log(`✓ 评审包已生成:${outPath}`); console.log(`✓ 规模:${lines} 行 / ${chars} 字符(约 ${Math.round(chars / 1.8)} tokens 量级,注意评审模型的上下文上限)`);