diff --git a/.gitignore b/.gitignore index 71f25b2..85af649 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,6 @@ dist-ssr .env .env.* !.env.example + +# 生成物:评审包(pnpm script:review 重新生成) +docs/script/review-bundle.md diff --git a/package.json b/package.json index 46ee88a..d106a10 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "tauri": "tauri", "verify": "tsx scripts/verify.ts", "verify:live": "tsx scripts/verify-live.ts", - "art:prompts": "tsx scripts/extract-art-prompts.ts" + "art:prompts": "tsx scripts/extract-art-prompts.ts", + "script:review": "tsx scripts/build-script-review.ts" }, "dependencies": { "@tauri-apps/api": "^2.12.1", diff --git a/scripts/build-script-review.ts b/scripts/build-script-review.ts new file mode 100644 index 0000000..8727c24 --- /dev/null +++ b/scripts/build-script-review.ts @@ -0,0 +1,88 @@ +/** + * 剧本评审包生成:把评审简报 + 完整性快照 + 三份母文档合成一个文件, + * 供上传给 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 量级,注意评审模型的上下文上限)`);