Commit Graph

490 Commits

Author SHA1 Message Date
83853ea5b0 docs(phase-06): update tracking after plan 06-17 2026-09-16 16:25:09 +08:00
7a056bb970 docs(06-17): complete real-map save/load perf plan
- add 06-17-SUMMARY.md with the 27-row measured table, measurement parameters, fixed side load breakdown, truthful Low-vs-High branch note and D-44 gate results
- register 06-TEST-FINDINGS.md #06-17-1 (HeroEquipment keeps the replaced attribute reference, so equipment bonuses are lost after hero.loadState; confirmed by a throwaway probe: atk 5 -> 0 at all three compressions)
- register WINDOWS.md entry #28 for the stage-1 minimum equipment seed deviation
2026-09-16 16:23:04 +08:00
a44c5d8918 test(06-17): stage 3 complete Low/High compression and reach 27 rows
- expand COMPRESSIONS to NoCompression / LowCompression / HighCompression so the matrix is 3 map counts x 3 compressions x 3 timing items = 27 rows
- keep measureCase, fixture build order, side load and 06-16 files untouched; still zero assertions
- one full run: 5 perf files / 45 tests passed, 0 WARNING/ERROR codes, saveablesReal.perf.ts (27 tests) in 379ms -- no case approaches the 30000ms testTimeout
2026-09-16 16:21:26 +08:00
4476e19805 test(06-17): stage 2 add fixed real side load and map scales 1/5/13
- seed 50 flags, 20 item kinds (3 equipment + 17 consumables), 4 equipped instances on slots 0..3, 20 modifiers (4 from equipped items + 16 manual), 1000 mixed replay steps and an unmodified enemy baseline
- keep addTile -> itemStore.addItem -> equipment.add ordering and a single one-shot compareWith after all maps exist
- 9 rows (1/5/13 x NoCompression x save|load|round trip), zero assertions, zero warn/error codes
2026-09-16 16:10:10 +08:00
63485e93ca test(06-17): stage 1 real 13x13 map fixture and map-only save/load perf rows
- move root floors.json into packages-user/data-state/test/fixtures/ (byte-identical) and delete the root copy
- add saveablesReal.perf.ts: toFlat/clearCodes/registerTiles/createRealMapFixture with a one-shot compareWith baseline
- seed the minimum 1 equipment instance so HeroEquipsStore.loadState does not raise error 58
- 3 rows: save / load / round trip for 1 map x NoCompression, zero assertions
2026-09-16 16:02:58 +08:00
92bddd6c74 docs(06): create plan 06-17 realistic map save/load perf supplement 2026-09-16 15:49:53 +08:00
a19979ff75 docs(phase-06): update tracking after plan 06-16 2026-09-16 15:13:09 +08:00
5d1525b717 docs(06-16): complete performance-test supplement plan
- 06-16-SUMMARY.md: 18-row median/min/p95 timing table from a real pnpm test:perf run
- measurement protocol (warmup 3 untimed + 20 samples, lower median, zero assertions)
- pnpm test:ci unchanged (66 files / 680 passed / 1 skipped); no baseline JSON committed
2026-09-16 15:12:27 +08:00
374274a4bb test(06-16): add CoreState save/load perf suite across item scales and compressions
- saveables.perf.ts: 9 cases = 10/100/1000 items x No/Low/High compression
- each sample round-trips all 5 registered saveables through saveState/loadState
- synthetic item definitions via addTile -> itemStore.addItem -> equipment.add/addItem
- warmup 3 + 20 samples, median/min/p95 via console.table, no assertions
2026-09-16 15:06:58 +08:00
3c59f31e6f test(06-16): add enemy context buildup and hero attribute perf suites
- context.perf.ts: 3 cases (50/200/1000 enemies), fixed 10 global auras + 5 special codes, cached aura topology, one buildup per sample
- attribute.perf.ts: 3 cases (10/100/1000 modifiers over 10 attributes), 1000 recalc rounds per sample via markModifierDirty + getFinalAttribute
- warmup 3 + 20 samples, median/min/p95 via console.table, no assertions
2026-09-16 15:02:57 +08:00
37bf89bc94 test(06-16): add isolated perf channel and critical calculation perf
- vitest.perf.config.ts: include only *.perf.ts, mirror vite.config.ts aliases, 30s timeouts
- package.json: add test:perf script (test/test:ci untouched)
- damage.perf.ts: 3 cases (1000/10000/50000) warmup 3 + 20 samples, no assertions
2026-09-16 14:56:28 +08:00
ac2a9b34d4 docs(06): create plan 06-16 performance-test supplement 2026-09-16 14:46:00 +08:00
2d718755c2 docs(07): final verification refresh covering security/validation/uat artifacts 2026-09-16 14:05:43 +08:00
393e4cc7a8 docs(phase-7): mark validation strategy validated 2026-09-16 13:57:08 +08:00
d49f36d3e4 docs(phase-7): add security threat verification 2026-09-16 13:56:22 +08:00
d6fcd1c60e test(07): complete UAT - 6 passed, 0 issues 2026-09-16 13:53:32 +08:00
5657352a47 docs(07): refresh verification after W-01 doc fix and review 2026-09-16 13:50:59 +08:00
9e91785760 docs(07): add code review report 2026-09-16 13:40:03 +08:00
4f31627335 chore: untrack the dispatch isolation sentinel and ignore .gsd/ 2026-09-16 13:28:03 +08:00
0224c2e67e docs(07): align replay param type table with the renumbered codes 2026-09-16 13:27:38 +08:00
286edefd1d chore(07): release milestone lock after phase completion 2026-09-16 13:23:16 +08:00
6973d58a7f chore(07): finalize phase tracking state 2026-09-16 13:23:01 +08:00
615ff5f78a docs(phase-07): complete phase execution 2026-09-16 13:22:46 +08:00
35f6fed9b4 docs(phase-07): update tracking after wave 8 2026-09-16 13:05:41 +08:00
229b272954 docs(07-08): complete #06-07-1 event-layer binding plan
records wiring facts (1ff22dd), intentional layer=null, test-side binding + rename + route (2,0),
user-owned floor-switch re-injection gap, and registration-only teleportTo self-target defect
2026-09-16 13:04:58 +08:00
2f148c900c test(07-08): #06-07-1 bind the event layer in the teleport playback test
- createSmallMapScene returns map (additive; existing callers ignore it)
- target case binds state.pathfinding.finder.useMapLayer(map.eventLayer) after floor activation
- teleport target changed to (2,0) to avoid self-target empty-path early return; asserts x=2/y=0
- un-skip and rename to reflect test-side event layer binding; neutral leading comment
2026-09-16 13:02:46 +08:00
4a25e2e794 docs(07-08): revise test route to teleport (2,0) and register self-target defect 2026-09-15 21:57:44 +08:00
123493ccb4 docs(07-08): amend plan for test-side layer binding and rename 2026-09-15 21:43:18 +08:00
1ff22dd07d feat: 寻路系统接线 2026-09-15 21:28:52 +08:00
2ba3089c9a docs(phase-07): update tracking after wave 7 2026-09-15 21:14:18 +08:00
30cdb5c68a docs(07-07): complete save code 178 semantic fix plan 2026-09-15 21:13:40 +08:00
95ea6609c6 fix(07-07): #06-09-5 warn code 178 for unloaded save keys
- core.ts loadState: 差集方向改为 loaded.difference(total),178 = 存档出现但未加载的 key
- saveablesRoundTrip.test.ts:322-334 改写为「缺 key 不触发 178、仍触发 177」负向见证并更名
- saveablesRoundTrip.test.ts:337-349 取消 it.skip,承担「多出 key 触发 178」正向见证
2026-09-15 21:10:33 +08:00
115d835b56 docs(phase-07): update tracking after wave 6 2026-09-15 21:01:58 +08:00
9cd9934651 docs(07-06): complete flag/common mover backward fix plan 2026-09-15 21:00:38 +08:00
9f058650c1 fix(07-06): #06-08-1 keep backward steps on the same axis
- Special 后退分支基准由 getCurrentDirection() 改为 this.faceDirection,避免被本步写入的反方向改写而在多步之间摆动
- 前进分支保持既有 getCurrentDirection() 语义不变
- 同步 IObjectMover.backward jsdoc 与 getCurrentDirection/prepareStep 注释措辞(D-11)
- 取消 mover.test.ts 多步后退用例的 it.skip,断言一字未改(D-10)
2026-09-15 20:57:13 +08:00
fb5589cc02 docs(phase-07): update tracking after wave 5 2026-09-15 20:50:48 +08:00
cdc95b1d90 docs(07-05): complete map data-fixes plan 2026-09-15 20:50:13 +08:00
620382cc5f fix(07-05): #06-06-1 warn code 128 for an out-of-map dynamic transfer
- transferToDynamic 越界分支由 131 改为 128,对齐两个 transferToStatic* 兄弟分支
- 取消 mapLayer.test.ts 的码 128 用例 skip
2026-09-15 20:45:01 +08:00
3b1b9f1d5c fix(07-05): #06-09-3 restore the dynamic tile num on load
- loadState 先 this.set(save.num),再恢复存档事件
- 取消 saveLoad.test.ts 的 num 恢复用例 skip
2026-09-15 20:43:20 +08:00
b1c20ea07d docs(phase-07): update tracking after wave 4 2026-09-15 20:38:32 +08:00
b55ca28c1c docs(07-04): complete hero data-fixes plan 2026-09-15 20:37:35 +08:00
2d2855c394 chore(07-04): #06-05-3 annotate the retained 147 skip and close windows 25/26
- D-06: equipment.test.ts code-147 case stays it.skip with a Chinese note that 147 is a reserved code, currently unreachable by design; no production code touched
- WINDOWS.md ids 25/26 marked fixed (open_count 13 -> 11); no new ledger entries
2026-09-15 20:34:03 +08:00
2452711edb fix(07-04): #06-05-2 prefer the first empty named slot
- getCouldEquipSlot tests empty === -1 so the first empty named slot wins instead of always replacing the first match
- un-skip the named-slot empty-preference case; canEquipTo string branch untouched
2026-09-15 20:30:32 +08:00
04943416a5 fix(07-04): #06-05-1 refresh final attributes without modifiers
- recalculateAttribute writes the base value into finalAttribute when no modifier is attached
- un-skip the base-only-change case; catchCalculateProgress is intentionally left untouched
2026-09-15 20:29:27 +08:00
02786047d2 fix(07-04): #06-09-2 deep copy the equipment save snapshot
- saveState returns new Map(this.equips) and [...this.slots] so the snapshot is decoupled from the live state
- un-skip the independent-snapshot and container round-trip cases
2026-09-15 20:27:57 +08:00
e7f341095d fix(07-04): #06-09-1 restore equipment modifiers from split save tables
- loadNoCompression reads value entries from state.value instead of state.percentage
- loadDiff seeds this.value/this.percentage from the item.equip base definition before applying save diffs
- un-skip the four correct-expectation EquipmentState round-trip cases (Low/High percentage, NoCompression value, compressed unchanged value)
2026-09-15 20:26:45 +08:00
76a62918d7 docs(phase-07): update tracking after wave 3 2026-09-15 19:05:05 +08:00
7eea41525d docs(07-03): complete replay data-fixes plan 2026-09-15 19:01:34 +08:00
40824cc10b fix(07-03): #06-04-4 shift replay params in the insert direction
- Move paramArray bytes to paramStart + length so later steps keep their data
- Move indexArray entries to index + 1 so get(i) sees the inserted step
- Un-skip both insert order cases
2026-09-15 18:50:30 +08:00
45dde1cb1c fix(07-03): #06-04-3 shift param indexes from the command index on delete
- Add a private getParamRange helper using paramUsed as the last-step sentinel
- Roll back indexArray from the command index instead of the param byte offset
- Un-skip the middle-step delete cases
2026-09-15 18:45:31 +08:00