Imported from dust1/wod_local (
AGENTS.md). Install upstream withnpx skills add dust1/wod_local. Copyright stays with the author.
项目入口
这是 WOD 的本地配装与战斗模拟工具,使用 Node.js ESM、React 19、Vite 6 和 SQLite。探索只产生模拟结果与战报,不发放经验、金币或物品,也不受地城等级、准备时间或重复探索次数限制。原版玩法参考 docs/WOD教科书计划.docx;当前行为以代码和测试为准,差异见 docs/PROJECT_OVERVIEW.md。不要把原版 WOD 尚未实现的机制当作本工具目标。
进入项目先读本文件、docs/PROJECT_OVERVIEW.md、docs/ARCHITECTURE.md、docs/DEVELOPMENT_PLAN.md,再读任务涉及的代码与测试。先运行 git status,保留用户未提交的改动;修改后检查 git diff。
运行与验证
npm install;npm run db:verify校验data/game.sqlite与docs/database-schema.json。npm run dev启动本地 API 与 Vite(默认 4173);npm run admin启动配置界面。npm test跑 Node 测试;npm run build构建前端。涉及接口时再运行npm run test:api。- 数据库运行时不自动建表或迁移;不得用测试覆盖运行库。
代码地图与边界
src/是界面和 HTTP 客户端;server.mjs是协议入口。application/组织用例、校验和持久化调用;game/放不依赖 HTTP、React、SQLite 的规则与战斗引擎。gamedata/generated/是导入生成内容,不手改;gamedata/overrides/是有证据标记的本地修正;infrastructure/persistence/管 SQLite。tests/覆盖规则、用例、数据契约和接口。资源在public/assets/wod/。
使用 ESM、两空格缩进,变量/函数 camelCase、React 组件 PascalCase。注释解释原因。UI 不计算核心规则;同一规则只保留一个实现位置。先确认行为、影响范围和现有测试,再做小步修改、验证并勾选开发计划。新增内容先扩展现有配置和模块。
配装遵守“英雄唯一”(单角色至多一件)和“队伍唯一”(单账号所有角色合计至多一件)。物品剩余次数仅在本次模拟中减少至零;每地城次数跨房间/楼层累计,每战斗次数在新房间重置。模拟不写回仓库次数,也不计算装备耐久。
战斗对象统一为本地训练木桩;地城只组织模拟房间与战报,不追求原版怪物配置或数值。技能、物品效果仍按具体数据和证据完善。
发现技能、物品效果或计算结果的具体差异时,再修改相关公式和代码;不把原版 HTML 战报导入作为核验流程。保留本地模拟战报与回放校验。
防止膨胀
- 已有系统能完成的功能不新建系统;增加现有数据字段能解决的问题不新建对象体系。
- 已有模块加少量逻辑能解决的问题不新建 Manager;只有一个调用者的逻辑默认不建 Service;只有一个实现的行为默认不建 Interface。
- 不为未来可能的扩展预建复杂架构;同一种游戏规则必须有唯一实现位置,禁止复制已有业务规则。
- 新功能优先扩展已有数据驱动系统。新模块须能说清职责、为何现有模块不能负责、谁调用;否则不创建。
- 一项功能若需大量文件,重新检查设计。完成后检查重复代码、重复状态、新全局状态、双向依赖和无用中间层。
- 不为设计模式、文件数量或形式上的分层重构;不擅自升级技术栈、重写项目或改变未核实的 WOD 规则。
- 新增功能不是新增架构的理由。只有当前架构无法合理承载需求时,才允许增加新的架构概念。