feat: 评审修订同步进章节 JSON(沉默铁律/记忆私密/四档等价/温简贯穿/C3-03 重构共 22 处)

This commit is contained in:
Jayway Liu
2026-10-03 22:05:24 +08:00
parent 0e40ed70a0
commit 3430e26ec9
5 changed files with 69 additions and 44 deletions
+13 -5
View File
@@ -320,6 +320,8 @@ for (const cls of [LocalStorageEventStore, SqliteEventStore, MemoryStore]) {
check(choiceFlags('C2-03', 'c_scout').flag_fresh_collapse === 'true', 'flag 推导:C2-03 c_scout → flag_fresh_collapse=true');
check(choiceFlags('C2-01', 'b_exposure').wenjian_health === 'weak', 'flag 推导:C2-01 b_exposure → wenjian_health=weak');
check(choiceFlags('C2-01', 'a_weakest').wenjian_health === 'recovering', 'flag 推导:C2-01 a_weakest → wenjian_health=recovering');
check(choiceFlags('C2-01', 'd_process').wenjian_health === 'weak', 'flag 推导(S4 修订):C2-01 d_process → wenjian_health=weak(议事真空期老鬼先行分药)');
check(!('flag_prophecy_heard' in narrationFlags('C2-02', 'intel_full', '(讲述)')), 'flag 推导(S3 修订):flag_prophecy_heard 已废除,C2-02 四档等价');
check(narrationFlags('C3-02', undefined, null).c3_02_mode === 'exit_room', 'flag 推导:C3-02 沉默退出 → c3_02_mode=exit_room');
{
const f = choiceFlags('C3-06', 'c_confide_wenjian');
@@ -370,10 +372,11 @@ async function walkAll(eng: StoryEngine, picker: Record<string, string> = {}) {
check(!seen.includes('c3-d1a'), '未选 c_scout:flag_fresh_collapse 差分节点被跳过(无死路,继续走到 c3-d1b)');
check(seen.includes('c3-d1b'), '跳过差分节点后落到主线下一节点');
check(!seen.includes('c3-d6c'), '动机非 d_trust:§3-7 追加句节点被跳过');
const d5a = chapters[1].nodes.find((n) => n.id === 'c2-d5a');
// S4 修订:温简在场/留营的双版本台词移到了 c2-d4f(C2-03 分歧前)
const d4f = chapters[1].nodes.find((n) => n.id === 'c2-d4f');
check(
d5a?.type === 'dialogue' && !eng.renderText(d5a.text).includes('通讯频道'),
'wenjian_health=recovering:温简在场,「通讯频道」内联段不渲染',
d4f?.type === 'dialogue' && eng.renderText(d4f.text).includes('你定,我跟着') && !eng.renderText(d4f.text).includes('等信儿'),
'wenjian_health=recovering:温简在场版台词渲染,留营版不渲染',
);
}
@@ -385,10 +388,15 @@ async function walkAll(eng: StoryEngine, picker: Record<string, string> = {}) {
check(finished, '条件系统下差分路径三章跑通');
check(seen.includes('c3-d1a'), '选了 c_scout:flag_fresh_collapse 差分节点可见');
check(eng.state.flags.flag_fresh_collapse === 'true' && eng.state.flags.wenjian_health === 'weak', '引擎 flags 随选择增量更新');
const d4f = chapters[1].nodes.find((n) => n.id === 'c2-d4f');
check(
d4f?.type === 'dialogue' && eng.renderText(d4f.text).includes('在营里等信儿'),
'wenjian_health=weak:温简留营版(通讯频道)台词渲染',
);
const d5a = chapters[1].nodes.find((n) => n.id === 'c2-d5a');
check(
d5a?.type === 'dialogue' && eng.renderText(d5a.text).includes('通讯频道'),
'wenjian_health=weak:温简台词的「通讯频道」内联段渲染',
d5a?.type === 'dialogue' && eng.renderText(d5a.text).includes('解谜要记录员'),
'wenjian_health=weak:§2-5 温简归队时刻渲染(他自己背着记录板跟来了)',
);
const cut = chapters[2].nodes.find((n) => n.id === 'c3-cutscene');
check(