0.1.40 FINAL: 版本号统一更新(7处) + 金钟罩基线重算(18指纹) + 4测试文件基线同步(版本号/指纹/顶峰衰概率容错)

This commit is contained in:
2026-09-13 14:31:00 +08:00
parent 989bc3f444
commit 54face8275
12 changed files with 35 additions and 30 deletions
+3 -3
View File
@@ -82,8 +82,8 @@ describe('审计回归:P0 修复固化', () => {
})
it('防御性修补后金钟罩不变(行为等价确认)', () => {
// 0.1.37 因果/奇观/飞升逻辑变更,指纹受控重算
expect(stateFingerprint(longRun('bell-seed-1').state)).toBe('45b0c17a')
expect(stateFingerprint(longRun('bell-seed-3').state)).toBe('f24480f4')
// 0.1.40 天命·裂痕:天命系统+NPC宗主更替四模式+势力分裂+灰烬重生——全线受控变更重算
expect(stateFingerprint(longRun('bell-seed-1').state)).toBe('b050ad28')
expect(stateFingerprint(longRun('bell-seed-3').state)).toBe('0b56c19b')
})
})
+8 -8
View File
@@ -7,20 +7,20 @@ import { World } from '../src/renderer/game/engine/runtime/World'
* 任何改动(重构日程/调平衡/加系统)若改变了确定性序列或结果,此测试立刻报红。
* 更新规则:仅当**有意**变更序列逻辑时,三枚 seed 指纹同版更新并注明原因。
*/
// 0.1.39 淬体·洗髓基线:purgeNpc 清理 worldGen.npcs/relations 僵尸定义(存档体积精简——时序内更改)。
// 受控变更重算(bell-seed-2 三档:NPC 灭亡后 worldGen 摘要缩小→指纹变;其余 seed 无 NPC 灭亡→零漂)。
// 0.1.40 天命·裂痕基线:天命系统+NPC宗主更替四模式+NPC势力分裂+灰烬重生新贵补位+建筑专精——
// 全线受控变更重算(NPC演化逻辑增强+天命epilogue注册改变了时序/确定性序列)。
const GOLDEN: Record<string, Record<number, string>> = {
'bell-seed-1': { 560: '45b0c17a', 1200: '62e037c1', 2160: 'b85dd7c7' },
'bell-seed-2': { 560: 'be278aba', 1200: '01126e70', 2160: 'fd03f9b2' },
'bell-seed-3': { 560: 'f24480f4', 1200: 'e52bed85', 2160: 'abb2a5d2' }
'bell-seed-1': { 560: 'b050ad28', 1200: '379ad2e1', 2160: '2fada283' },
'bell-seed-2': { 560: 'e3b4d40b', 1200: '5fb3aa1f', 2160: '50ad6832' },
'bell-seed-3': { 560: '0b56c19b', 1200: '4737eedf', 2160: 'f597c050' }
}
/** 第二金钟罩:自动 resolve 长跑("现实"世界——每 tick 处理待决事件;
* 锁事件闸/事件流全程,防"冻结世界"指纹漏锁)。 */
const GOLDEN_RESOLVED: Record<string, Record<number, string>> = {
'bell-seed-1': { 560: '2837ad55', 1200: 'f6798d97', 2160: 'bc713cca' },
'bell-seed-2': { 560: '9c5eddc5', 1200: '6a3c8522', 2160: '0791881d' },
'bell-seed-3': { 560: '79e8126e', 1200: '21d9c804', 2160: '95de644d' }
'bell-seed-1': { 560: '88f28074', 1200: 'd6b9cc85', 2160: 'c5b9b102' },
'bell-seed-2': { 560: '5ca6b6a9', 1200: '6a66a750', 2160: 'c8e8e982' },
'bell-seed-3': { 560: 'fb5bc0e8', 1200: '3e09f864', 2160: 'fae786ae' }
}
const TIERS = [
+7 -3
View File
@@ -122,14 +122,18 @@ describe('0.1.27 生灭可达化', () => {
})
it('顶峰衰:power≥700 年首可回落(非贴顶硬化)', () => {
// 0.1.40 修正:rng 序列变更后 60 月(5 年首) 8% × 5 ≈ 34% 命中率太低。
// 根治方案:扩展至 1200 月(100 年首),每年首重钉 power=880 保证持续触发条件,
// 同时跟踪任何 power 回落迹象——100 次 × 8% → P(至少一次) ≈ 99.97%。
const w = worldAt('wl-2', 24)
const ws = w.state.worldSim as WorldSimState
const top = Object.keys(w.state.npcFamilies).sort((a, b) => w.state.npcFamilies[b].power - w.state.npcFamilies[a].power)[0]!
w.state.npcFamilies[top].power = 880
let fell = false
for (let i = 0; i < 60 && !fell; i++) {
for (let i = 0; i < 1200 && !fell; i++) {
// 每年首前重钉 power,防止回落后又涨回 880 导致 fell 被覆盖
if (w.state.month === 12) w.state.npcFamilies[top].power = 880
w.advanceMonth()
if (w.state.npcFamilies[top]!.power < 880) fell = true
if (w.state.npcFamilies[top] && w.state.npcFamilies[top]!.power < 880) fell = true
}
expect(fell).toBe(true)
})
+3 -3
View File
@@ -170,8 +170,8 @@ describe('GameFacade 门面', () => {
it('默认配置金钟罩不受门面化影响', () => {
PACK.reset()
// 0.1.37 因果/奇观/飞升逻辑变更,指纹受控重算
expect(stateFingerprint(longRun('bell-seed-1').state)).toBe('45b0c17a')
expect(stateFingerprint(longRun('bell-seed-3').state)).toBe('f24480f4')
// 0.1.40 天命·裂痕:天命系统+NPC宗主更替四模式+势力分裂+灰烬重生——全线受控变更重算
expect(stateFingerprint(longRun('bell-seed-1').state)).toBe('b050ad28')
expect(stateFingerprint(longRun('bell-seed-3').state)).toBe('0b56c19b')
})
})
+5 -5
View File
@@ -261,18 +261,18 @@ describe('0.1.38 存档根治 · 存储链路回归(hybrid memory backend',
})
})
describe('0.1.38 存档根治 · 版本号一致性', () => {
it('slots.ts GAME_VERSION = 0.1.38', async () => {
describe('0.1.40 存档根治 · 版本号一致性', () => {
it('slots.ts GAME_VERSION = 0.1.40', async () => {
const { buildSimpleMeta } = await import('../src/renderer/game/storage/slots')
const w = World.create({ seed: 'ver-1', surname: '周', familyName: '周家', motto: 'm', difficulty: 'normal' })
const meta = buildSimpleMeta(w.state, 1, 5)
expect(meta.version).toBe('0.1.38')
expect(meta.version).toBe('0.1.40')
})
it('storeHelper metaFromState version = 0.1.38', async () => {
it('storeHelper metaFromState version = 0.1.40', async () => {
const { metaFromState } = await import('../src/renderer/ui/storeHelper')
const w = World.create({ seed: 'ver-2', surname: '吴', familyName: '吴家', motto: 'm', difficulty: 'normal' })
const meta = metaFromState(w.state, 1)
expect(meta.version).toBe('0.1.38')
expect(meta.version).toBe('0.1.40')
})
})