[Code Review] 2026-09-29 前后端代码质量评审:问题总览与修复路线图 #516
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
概述
这次评审的对象是基线提交
e475c2e(refactor(scene): separate pure backend simulation from frontend rendering and modularize act-scene & net-scene),覆盖四块:scripts/net-*.ts、src/net/*src/game/**、src/scene/backend/*、src/sim/*src/scene/frontend/*、src/render、src/ui、src/frontend方法是静态阅读、AST/正则度量、实跑
tsc/vitest,外加 3 个运行时复现脚本(脚本附在对应的子 issue 里)。所有行号以e475c2e为准,链接都是该提交的永久链接。结论
工程底子不错:
@ts-ignore;D2Rng是精确的 64 位 LCG;但
e475c2e的"前后端分离"主要是拆文件,职责和状态并没有分开:这三点是现象,不是原因。 根因是项目从没规定"游戏状态归谁",涉及前后端两边的功能都靠"两边各写一笔"来打补丁(详见 #520)。多数问题早于 e475c2e,那次拆分只是把双写代码原样搬进了
backend/和frontend/目录。另外,中继服务器和联机层有两个可以直接利用的问题:一个包就能打崩中继,联机输入可以伪造。
实跑结果
npx tsc --noEmitnpx vitest run关键度量
src/453 个文件;仓库 TS/HTML 约 52.8 万行(含测试、脚本和 >11 万行生成/转录数据)anysrc约 620 处,其中skill-caster.ts113 处、item-bridge.ts71 处!game/**1303 处(drlg 占 944 处,属 C 指针风格)?? 字面量默认值game/**约 1050 处window/globalThis.__d2*键,后端逻辑也在读isEn ? … : …(含其他按语言判断的三元表达式约 320 处)子 issue
P0:建议优先修
7bc21df)995f594)7367f2a)206b59e)231d375)112c128)462fdc7)58cbc88)97abcb3)3465c80)P1
P2
new Function、tsconfig修复路线图
Phase 0 止血(1–2 天)
AudioManager(#528)。deleteAtlas(#529)。Phase 1 状态归一(1–2 周)
PlayerState,HUD 只读;喝药、拾取、交易都改为引擎命令(#520、#526)。onTick里发生;模拟中去掉随机数和墙钟;掉落时序与美术加载解耦(#523)。Phase 2 架构收敛(持续)
runScene改为SceneController;去掉桶导出和window.__d2*(#527、#526)。与现有 issue 的关系
WorldView解耦):和 #520、#526 方向一致。建议先完成 #520,WorldView才有唯一的数据源可读。embedded-drop-tables与.r8,#532 覆盖三个 meta 文件与 sourcemap。做得好的(请保持)
exactOptionalPropertyTypes,tsc 0 error,没有@ts-ignore。D2Rng是精确的 64 位 LCG,每只怪物有独立种子;单机掉落路径 fail-fast。GameLoop固定 25Hz,时钟可注入,积压的 tick 有上限。SpriteRenderer生命周期完整:纹理注册表、删除前 flush、disposed守卫、context-lost 监听解绑。chat-commands.ts的"纯函数 + 适配器"写法;协议定长二进制并用ProtocolError区分错误;MemoryHub能逐 tick 驱动多 peer 的异常场景。appearanceSeq、travelling这类正确的异步守卫,只是还没推广开。约定
AGENTS.md在独立 worktree 中修复;合入前npm run typecheck0 error、npx vitest run全部通过。P0 问题全部修复完成汇报
本单下的 10 个 P0 子 Issue 已全部修复并关闭,推送至
main(c2c1d28..5de27f8):7bc21dftests/p0-517-relay-hardening.test.ts995f594tests/p0-518-lockstep-security.test.ts7367f2atests/p0-520-player-state.test.ts206b59etests/p0-521-gold-duplication.test.ts231d375tests/p0-522-ground-items.test.ts112c128tests/p0-523-determinism.test.ts462fdc7tests/p0-524-parity.test.ts58cbc88tests/p0-528-audio-singleton.test.ts97abcb3tests/p0-529-async-lifecycle.test.ts3465c80tests/p0-530-missile-art-failfast.test.ts5de27f8tests/e2e-p0-516/验证结果
npm run build(tsc && vite build):0 错误通过scripts/audit-levels-browser.ts):136/136 个关卡 ID、365/365 张地图零错误通过