template/.planning/WINDOWS.md
unanmed 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

19 KiB
Raw Permalink Blame History

schema_version open_count waived_count fixed_count total_count last_updated
1 11 0 17 28 2026-09-16T08:20:22.513Z

Broken Windows Ledger

Cross-phase defect register. With workflow.windows_enforce enabled, /gsd-ship blocks while open_count > 0. Waive with gsd-tools windows waive <id> "<reason>" (reason required). Mark fixed with gsd-tools windows fixed <id>.

id phase kind file line description status reason recorded_at resolved_at
1 01 stub packages-user/data-state/src/core.ts 153 Serialized event registration and map-id binding remains an intentional deferred TODO. fixed 2026-09-08T15:06:40.634Z 2026-09-10T12:20:52.319Z
2 01 unrun-verify .planning/phases/01-event/01-05-SUMMARY.md Downstream implementation verification was not run because the user explicitly prohibited downstream plan execution. open 2026-09-08T15:37:54.227Z
3 01 deviation packages-user/data-base/src/map/mapLayer.ts Replaced unsupported Map upsert runtime calls so the raw map event path runs under Node Vitest. open 2026-09-08T15:54:23.173Z
4 02 skipped-test packages-user/data-common/src/common/mover.test.ts 4 个 it.skip 坐标回写回归用例(x/y 正交、斜向、传送),待 02-02 修复 mover.ts:651 后翻绿 fixed 2026-09-09T07:51:25.555Z 2026-09-09T09:34:39.843Z
5 02 stub packages-user/data-system/src/path/system.ts 254 interrupt() is an intentional placeholder that only stops the in-flight move; takeover sequencing (stop-then-await per approved option 1) is implemented by 02-03 Task 4 fixed 2026-09-09T09:34:59.707Z 2026-09-09T13:24:24.755Z
6 02 stub packages-user/data-state/src/hero/moverImpl.ts 284 Existing cannotEnter() is intentionally empty because no event trigger corresponds to movement blocked by an impassable mask; D-08 direct OnTouch dispatch handles allowed adjacent no-pass targets. open 2026-09-10T01:38:48.570Z
7 03 stub packages-user/data-common/src/save/memory.ts 90 MemorySaveSystem.saveAutosaveToDB is an intentional no-op because Node never persists to IndexedDB. fixed 2026-09-10T07:45:16.944Z 2026-09-11T06:11:48.592Z
8 03 stub packages-user/data-common/src/save/memory.ts 90 MemorySaveSystem.saveAutosaveToDB is an intentional no-op because Node never persists to IndexedDB. fixed 2026-09-10T07:45:32.524Z 2026-09-11T06:11:49.370Z
9 03 stub packages-user/data-state/src/legacy/dependencies.ts 53 Node legacy dependency boundary intentionally registers no browser loading callbacks. fixed 2026-09-10T07:45:33.228Z 2026-09-11T06:04:34.207Z
10 03 deviation packages-user/data-base/src/map/mapLayer.ts 216 Replaced Map.getOrInsertComputed with explicit Map lookup so the replay event path is Node-safe without a global prototype shim. open 2026-09-10T07:45:33.930Z
11 03 unrun-verify .planning/phases/03-data-completion/deferred-items.md Repository type gate remains non-zero on pre-existing render/legacy and Tile contract diagnostics; owned Node tracer and data tests pass. fixed 2026-09-10T07:45:45.249Z 2026-09-10T07:58:56.466Z
12 03 unrun-verify .planning/phases/03-data-completion/deferred-items.md Repository type gate remains non-zero on pre-existing render/legacy diagnostics; Tile contract diagnostics are resolved. open 2026-09-10T07:58:50.208Z
13 03 deviation packages-user/data-common/src/store/tileStore.test.ts Applied ESLint/Prettier CRLF formatting required by the project after functional Tile tests passed. open 2026-09-10T07:59:02.467Z
14 03 stub packages-user/data-state/src/core.ts 166 Existing deferred serialized event registration and map-event-id binding TODO; preserved by Plan 03-03. fixed 2026-09-10T08:47:49.808Z 2026-09-10T12:20:54.566Z
15 03 deviation packages-user/data-common/src/replay/array.ts Repaired replay parameter encoding so diagnostic params remain original and deterministic. open 2026-09-10T09:18:58.279Z
16 03 deviation packages-user/data-state/test/replayVerifier.ts Added a package-local verifier harness shared by Vitest and the Node runner to avoid composite-script import resolution. open 2026-09-10T09:18:58.946Z
17 03 deviation packages-user/data-state/test/fixtures/closed-loop.ts Applied repository Prettier/CRLF formatting to the fixed replay fixture and runner files. open 2026-09-10T09:18:59.589Z
18 03 deviation script/check-data-circular.ts Plan 03-15 scoped circular gate reports seven pre-existing legacy/render boundary cycles through data-state/src/legacy/move.ts; replay command class changes do not touch those imports. open 2026-09-11T06:27:22.412Z
19 06 skipped-test packages-user/data-system/src/combat/damage.test.ts 06-01-1 suspected bug: calculateCritical yields info not matching nextValue (Finding #06-01-1) fixed 2026-09-14T00:54:02.628Z 2026-09-15T09:05:01.001Z
20 06 skipped-test packages-user/data-system/src/combat/mapDamage.test.ts 06-01-2 suspected bug: MapDamage.deleteEnemy leaves enemy-sourced damage (Finding #06-01-2) fixed 2026-09-14T00:54:03.338Z 2026-09-15T09:05:02.090Z
21 06 skipped-test packages-user/data-system/src/combat/combat.test.ts 06-01-3 suspected bug: CombatFlow.before truthy/falsy semantics inverted vs interface doc (Finding #06-01-3) fixed 2026-09-14T00:54:04.044Z 2026-09-15T09:05:02.930Z
22 06 skipped-test packages-user/data-common/src/common/mover.test.ts backward(count>1) 方向摆动、净位移为零(#06-08-1),已 it.skip 待用户确认 fixed 2026-09-14T09:03:38.649Z 2026-09-15T12:58:50.953Z
23 06 skipped-test packages-user/data-common/src/replay/array.test.ts 受阻塞缺口 G-06-04-A:多字节 bigint / 超 int32 int64 编解码缺陷 #06-04-1/#06-04-2 未修复,正确预期用例保持 it.skip fixed 2026-09-15T02:46:32.026Z 2026-09-15T10:51:28.234Z
24 06 skipped-test packages-user/data-base/src/enemy/manager.test.ts 受阻塞缺口 G-06-03-A:复用映射未接入 createEnemy/createEnemyById(#06-03-1),四朝向复用生成独立怪物的正确预期用例保持 it.skip fixed 2026-09-15T02:46:32.772Z 2026-09-15T09:17:32.073Z
25 06 skipped-test packages-user/data-base/src/hero/saveLoad.test.ts 受阻塞缺口 G-06-09-B:压缩档 loadDiff 未回退装备原始定义(#06-09-1),EquipmentState 百分比加成 Low/High 档正确预期用例保持 it.skip fixed 2026-09-15T03:31:00.000Z 2026-09-15T12:33:32.230Z
26 06 skipped-test packages-user/data-base/src/hero/saveLoad.test.ts 受阻塞缺口 G-06-09-B:HeroEquipment.saveState 未深拷贝 equipped/slots(#06-09-2),经 HeroState 容器三档恢复装备映射的正确预期用例保持 it.skip fixed 2026-09-15T03:31:01.000Z 2026-09-15T12:33:33.035Z
27 06 skipped-test packages-user/data-system/src/combat/context.test.ts 625 受阻塞缺口 G-06-01-D:deleteAura 后再次 buildup 不回到基础值(#06-15-1,与 #06-01-4 同根因),正确预期用例保持 it.skip 待用户确认 fixed 2026-09-15T05:23:29.159Z 2026-09-15T09:05:03.731Z
28 06 deviation packages-user/data-state/test/saveablesReal.perf.ts stage-1 fixture seeds the minimum 1 equipment instance (plan said no side load) because HeroEquipsStore.loadState raises error 58 with an empty equipment list open 2026-09-16T08:20:22.513Z
[
  {
    "id": 1,
    "kind": "stub",
    "phase": "01",
    "file": "packages-user/data-state/src/core.ts",
    "line": 153,
    "description": "Serialized event registration and map-id binding remains an intentional deferred TODO.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-08T15:06:40.634Z",
    "resolved_at": "2026-09-10T12:20:52.319Z"
  },
  {
    "id": 2,
    "kind": "unrun-verify",
    "phase": "01",
    "file": ".planning/phases/01-event/01-05-SUMMARY.md",
    "line": null,
    "description": "Downstream implementation verification was not run because the user explicitly prohibited downstream plan execution.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-08T15:37:54.227Z",
    "resolved_at": null
  },
  {
    "id": 3,
    "kind": "deviation",
    "phase": "01",
    "file": "packages-user/data-base/src/map/mapLayer.ts",
    "line": null,
    "description": "Replaced unsupported Map upsert runtime calls so the raw map event path runs under Node Vitest.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-08T15:54:23.173Z",
    "resolved_at": null
  },
  {
    "id": 4,
    "kind": "skipped-test",
    "phase": "02",
    "file": "packages-user/data-common/src/common/mover.test.ts",
    "line": null,
    "description": "4 个 it.skip 坐标回写回归用例(x/y 正交、斜向、传送),待 02-02 修复 mover.ts:651 后翻绿",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-09T07:51:25.555Z",
    "resolved_at": "2026-09-09T09:34:39.843Z"
  },
  {
    "id": 5,
    "kind": "stub",
    "phase": "02",
    "file": "packages-user/data-system/src/path/system.ts",
    "line": 254,
    "description": "interrupt() is an intentional placeholder that only stops the in-flight move; takeover sequencing (stop-then-await per approved option 1) is implemented by 02-03 Task 4",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-09T09:34:59.707Z",
    "resolved_at": "2026-09-09T13:24:24.755Z"
  },
  {
    "id": 6,
    "kind": "stub",
    "phase": "02",
    "file": "packages-user/data-state/src/hero/moverImpl.ts",
    "line": 284,
    "description": "Existing cannotEnter() is intentionally empty because no event trigger corresponds to movement blocked by an impassable mask; D-08 direct OnTouch dispatch handles allowed adjacent no-pass targets.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T01:38:48.570Z",
    "resolved_at": null
  },
  {
    "id": 7,
    "kind": "stub",
    "phase": "03",
    "file": "packages-user/data-common/src/save/memory.ts",
    "line": 90,
    "description": "MemorySaveSystem.saveAutosaveToDB is an intentional no-op because Node never persists to IndexedDB.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-10T07:45:16.944Z",
    "resolved_at": "2026-09-11T06:11:48.592Z"
  },
  {
    "id": 8,
    "kind": "stub",
    "phase": "03",
    "file": "packages-user/data-common/src/save/memory.ts",
    "line": 90,
    "description": "MemorySaveSystem.saveAutosaveToDB is an intentional no-op because Node never persists to IndexedDB.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-10T07:45:32.524Z",
    "resolved_at": "2026-09-11T06:11:49.370Z"
  },
  {
    "id": 9,
    "kind": "stub",
    "phase": "03",
    "file": "packages-user/data-state/src/legacy/dependencies.ts",
    "line": 53,
    "description": "Node legacy dependency boundary intentionally registers no browser loading callbacks.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-10T07:45:33.228Z",
    "resolved_at": "2026-09-11T06:04:34.207Z"
  },
  {
    "id": 10,
    "kind": "deviation",
    "phase": "03",
    "file": "packages-user/data-base/src/map/mapLayer.ts",
    "line": 216,
    "description": "Replaced Map.getOrInsertComputed with explicit Map lookup so the replay event path is Node-safe without a global prototype shim.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T07:45:33.930Z",
    "resolved_at": null
  },
  {
    "id": 11,
    "kind": "unrun-verify",
    "phase": "03",
    "file": ".planning/phases/03-data-completion/deferred-items.md",
    "line": null,
    "description": "Repository type gate remains non-zero on pre-existing render/legacy and Tile contract diagnostics; owned Node tracer and data tests pass.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-10T07:45:45.249Z",
    "resolved_at": "2026-09-10T07:58:56.466Z"
  },
  {
    "id": 12,
    "kind": "unrun-verify",
    "phase": "03",
    "file": ".planning/phases/03-data-completion/deferred-items.md",
    "line": null,
    "description": "Repository type gate remains non-zero on pre-existing render/legacy diagnostics; Tile contract diagnostics are resolved.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T07:58:50.208Z",
    "resolved_at": null
  },
  {
    "id": 13,
    "kind": "deviation",
    "phase": "03",
    "file": "packages-user/data-common/src/store/tileStore.test.ts",
    "line": null,
    "description": "Applied ESLint/Prettier CRLF formatting required by the project after functional Tile tests passed.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T07:59:02.467Z",
    "resolved_at": null
  },
  {
    "id": 14,
    "kind": "stub",
    "phase": "03",
    "file": "packages-user/data-state/src/core.ts",
    "line": 166,
    "description": "Existing deferred serialized event registration and map-event-id binding TODO; preserved by Plan 03-03.",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-10T08:47:49.808Z",
    "resolved_at": "2026-09-10T12:20:54.566Z"
  },
  {
    "id": 15,
    "kind": "deviation",
    "phase": "03",
    "file": "packages-user/data-common/src/replay/array.ts",
    "line": null,
    "description": "Repaired replay parameter encoding so diagnostic params remain original and deterministic.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T09:18:58.279Z",
    "resolved_at": null
  },
  {
    "id": 16,
    "kind": "deviation",
    "phase": "03",
    "file": "packages-user/data-state/test/replayVerifier.ts",
    "line": null,
    "description": "Added a package-local verifier harness shared by Vitest and the Node runner to avoid composite-script import resolution.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T09:18:58.946Z",
    "resolved_at": null
  },
  {
    "id": 17,
    "kind": "deviation",
    "phase": "03",
    "file": "packages-user/data-state/test/fixtures/closed-loop.ts",
    "line": null,
    "description": "Applied repository Prettier/CRLF formatting to the fixed replay fixture and runner files.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-10T09:18:59.589Z",
    "resolved_at": null
  },
  {
    "id": 18,
    "kind": "deviation",
    "phase": "03",
    "file": "script/check-data-circular.ts",
    "line": null,
    "description": "Plan 03-15 scoped circular gate reports seven pre-existing legacy/render boundary cycles through data-state/src/legacy/move.ts; replay command class changes do not touch those imports.",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-11T06:27:22.412Z",
    "resolved_at": null
  },
  {
    "id": 19,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-system/src/combat/damage.test.ts",
    "line": null,
    "description": "06-01-1 suspected bug: calculateCritical yields info not matching nextValue (Finding #06-01-1)",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-14T00:54:02.628Z",
    "resolved_at": "2026-09-15T09:05:01.001Z"
  },
  {
    "id": 20,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-system/src/combat/mapDamage.test.ts",
    "line": null,
    "description": "06-01-2 suspected bug: MapDamage.deleteEnemy leaves enemy-sourced damage (Finding #06-01-2)",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-14T00:54:03.338Z",
    "resolved_at": "2026-09-15T09:05:02.090Z"
  },
  {
    "id": 21,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-system/src/combat/combat.test.ts",
    "line": null,
    "description": "06-01-3 suspected bug: CombatFlow.before truthy/falsy semantics inverted vs interface doc (Finding #06-01-3)",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-14T00:54:04.044Z",
    "resolved_at": "2026-09-15T09:05:02.930Z"
  },
  {
    "id": 22,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-common/src/common/mover.test.ts",
    "line": null,
    "description": "backward(count>1) 方向摆动、净位移为零(#06-08-1),已 it.skip 待用户确认",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-14T09:03:38.649Z",
    "resolved_at": "2026-09-15T12:58:50.953Z"
  },
  {
    "id": 23,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-common/src/replay/array.test.ts",
    "line": null,
    "description": "受阻塞缺口 G-06-04-A:多字节 bigint / 超 int32 int64 编解码缺陷 #06-04-1/#06-04-2 未修复,正确预期用例保持 it.skip",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-15T02:46:32.026Z",
    "resolved_at": "2026-09-15T10:51:28.234Z"
  },
  {
    "id": 24,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-base/src/enemy/manager.test.ts",
    "line": null,
    "description": "受阻塞缺口 G-06-03-A:复用映射未接入 createEnemy/createEnemyById(#06-03-1),四朝向复用生成独立怪物的正确预期用例保持 it.skip",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-15T02:46:32.772Z",
    "resolved_at": "2026-09-15T09:17:32.073Z"
  },
  {
    "id": 25,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-base/src/hero/saveLoad.test.ts",
    "line": null,
    "description": "受阻塞缺口 G-06-09-B:压缩档 loadDiff 未回退装备原始定义(#06-09-1),EquipmentState 百分比加成 Low/High 档正确预期用例保持 it.skip",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-15T03:31:00.000Z",
    "resolved_at": "2026-09-15T12:33:32.230Z"
  },
  {
    "id": 26,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-base/src/hero/saveLoad.test.ts",
    "line": null,
    "description": "受阻塞缺口 G-06-09-B:HeroEquipment.saveState 未深拷贝 equipped/slots(#06-09-2),经 HeroState 容器三档恢复装备映射的正确预期用例保持 it.skip",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-15T03:31:01.000Z",
    "resolved_at": "2026-09-15T12:33:33.035Z"
  },
  {
    "id": 27,
    "kind": "skipped-test",
    "phase": "06",
    "file": "packages-user/data-system/src/combat/context.test.ts",
    "line": 625,
    "description": "受阻塞缺口 G-06-01-D:deleteAura 后再次 buildup 不回到基础值(#06-15-1,与 #06-01-4 同根因),正确预期用例保持 it.skip 待用户确认",
    "status": "fixed",
    "reason": "",
    "recorded_at": "2026-09-15T05:23:29.159Z",
    "resolved_at": "2026-09-15T09:05:03.731Z"
  },
  {
    "id": 28,
    "kind": "deviation",
    "phase": "06",
    "file": "packages-user/data-state/test/saveablesReal.perf.ts",
    "line": null,
    "description": "stage-1 fixture seeds the minimum 1 equipment instance (plan said no side load) because HeroEquipsStore.loadState raises error 58 with an empty equipment list",
    "status": "open",
    "reason": "",
    "recorded_at": "2026-09-16T08:20:22.513Z",
    "resolved_at": null
  }
]