- Status: in_progress
- Actions taken:
- 复核
GamePackagePlugin/GamePackageForegroundRuntime/packageManagerService/AssetLoader/OptimizedImage链路,确认原生素材包会安装到.../current/assets,问题不在下载落盘本身。 - 修复
src/features/mobile-packages/packageManagerService.ts:hydrateInstalledNativeGamePackages()在没有预注册fallbackCache时也会构造兜底 state,确保已安装包仍能把assetBaseUrl注入到 AssetLoader override。 - 修复
src/components/common/media/OptimizedImage.tsx:开发态fetch -> blobworkaround 只保留给 public/assets/...,Android/_capacitor_file_/...本地包路径改为直接<img>加载。 - 修复
src/features/mobile-packages/nativeGamePackagePlugin.ts:原生 ack / listener 返回running/completed/cancelled时先归一化为前端合法状态,避免易桌游测试把下载按钮直接污染成灰态。 - 补回归测试:
src/components/common/media/__tests__/CardPreview.i18n.test.tsx与src/components/lobby/__tests__/GameDetailsModalJoinConfirm.test.ts。 - 将包含修复的
dist/覆盖到真机top.easyboardgame.app.debug当前 OTA 目录/data/user/0/top.easyboardgame.app.debug/files/versions/mhvPgIYOyN,重启后确认加载新 bundleindex-wN3ZSRu0.js。 - 真机打开
王权骰铸详情弹窗后,安装游戏包按钮已恢复为可点击态;截图路径:D:\\gongzuo\\webgame\\BoardGame\\temp\\mobile-debug\\dicethrone-modal-after-open.png。
- 复核
| Test | Input | Expected | Actual | Status |
|---|---|---|---|---|
| ESLint | npx eslint src/features/mobile-packages/packageManagerService.ts src/components/common/media/OptimizedImage.tsx src/components/common/media/__tests__/CardPreview.i18n.test.tsx src/components/lobby/__tests__/GameDetailsModalJoinConfirm.test.ts |
0 error | 0 error,OptimizedImage.tsx 有 1 条 react-refresh/only-export-components warning |
✅ |
| 图片链路回归 | node scripts/infra/vitest-cli-safe.mjs run src/components/common/media/__tests__/CardPreview.i18n.test.tsx --configLoader native --maxWorkers 1 |
通过 | 8 passed |
✅ |
| 启动期 hydration 回归 | node scripts/infra/vitest-cli-safe.mjs run src/components/lobby/__tests__/GameDetailsModalJoinConfirm.test.ts -t "mobile package bootstrap hydration" --configLoader native --maxWorkers 1 |
通过 | 1 passed, 54 skipped |
✅ |
| Timestamp | Error | Attempt | Resolution |
|---|---|---|---|
| 2026-04-07 | 启动期已安装游戏包在未注册 fallbackCache 时被直接跳过,资源 override 未生效 |
1 | hydrateInstalledNativeGamePackages() 对缺失 fallback 的游戏构造兜底 state 后继续 emit/apply override |
| 2026-04-07 | OptimizedImage 把 Android /_capacitor_file_/... 本地包路径误走开发态 fetch/blob workaround,图片停在加载态 |
1 | 将 workaround 收窄为“仅开发态 public /assets/...”,本地包路径直接 <img> 加载 |
| 2026-04-07 | 原生首次 ack 返回 running,旧前端把非法状态直接写进安装状态,导致下载按钮提前灰死 |
1 | nativeGamePackagePlugin.ts 归一化原生状态后再写入前端缓存,并已用真机新 bundle 确认按钮恢复可点 |
- Status: completed
- Actions taken:
- 复核
src/games/dicethrone/ai.ts、domain/executeTokens.ts、domain/commandValidation.ts、domain/tokenResponse.ts,确认 Monk 太极当前规则是“单响应窗口最多 1 次合法使用”。 - 修复
src/games/dicethrone/domain/systems.ts中TOKEN_RESPONSE_CLOSED未同步清空sys.responseWindow.current的状态残留问题。 - 更新
src/games/dicethrone/__tests__/basic-commands-coverage.test.ts中的太极回归,使其断言当前真实行为:单次 token 响应后skip-token-response,并在关闭窗口后恢复正常推进。 - 继续强化太极回归,补断言验证
skip-token-response后sys.interaction.current也被清空,且操作权仍回到玩家0,下一拍继续返回advance-phase。 - 同型扫描
ResponseWindowSystem后,补了一条锁定语义回归到src/games/dicethrone/__tests__/response-window-interaction-lock.test.ts:交互创建并锁定响应窗口期间,RESPONSE_PASS必须失败,且不得提前清掉sys.interaction.current/pendingInteractionId。 - 复跑 Dice Throne AI 关键回归,确认本地 AI 不再在太极响应链路上卡死。
- 复核
| Test | Input | Expected | Actual | Status |
|---|---|---|---|---|
| AI 基础命令覆盖 | node scripts/infra/vitest-cli-safe.mjs run src/games/dicethrone/__tests__/basic-commands-coverage.test.ts --configLoader native --maxWorkers 1 |
全部通过,且太极链路按当前规则关闭窗口并恢复推进 | 26 passed |
✅ |
| Token 响应窗口回归 | node scripts/infra/vitest-cli-safe.mjs run src/games/dicethrone/__tests__/token-response-window.test.ts --configLoader native --maxWorkers 1 |
响应窗口开闭与交接链路稳定 | 8 passed |
✅ |
| 响应窗口锁定回归 | node scripts/infra/vitest-cli-safe.mjs run src/games/dicethrone/__tests__/response-window-interaction-lock.test.ts --configLoader native --maxWorkers 1 |
交互锁定期间 RESPONSE_PASS 被拒绝,现有锁定/取消链路保持通过 |
7 passed |
✅ |
| Timestamp | Error | Attempt | Resolution |
|---|---|---|---|
| 2026-03-28 | 太极响应结束后 AI 仍看到残留 response window,继续跑出 response-pass |
1 | 在 TOKEN_RESPONSE_CLOSED 路径同步清空 sys.responseWindow.current |
| 2026-03-28 | 旧回归仍期待“双太极再 skip”,与当前 token 规则不符 | 1 | 按当前 getMaxTokenUseAmount / tokenUsageTotals 真相改写测试,断言单次 token 后直接 skip-token-response |
Status: Complete
-
[10:00] Action: 检查根工作区、规划文件占用情况与相关规范
- Result: 确认根工作区存在并行任务,且
task_plan.md/findings.md/progress.md已服务其他主题;已读取资产、录入、审计、测试、OpenSpec 规范 - Next: 创建独立 worktree 并初始化本任务规划文件
- Result: 确认根工作区存在并行任务,且
-
[10:05] Action: 创建独立 worktree 与分支
feat/smashup-base-faction-assets- Result: 新工作目录
D:\\gongzuo\\webgame\\BoardGame-wt-smashup-base-faction-assets已创建,工作区干净 - Next: 盘点现有 Smash Up 图片接入链路和目标素材清单
- Result: 新工作目录
Status: Complete
-
[10:08] Action: 初始化
task_plan.md、findings.md、progress.md- Result: 本任务已建立独立的磁盘规划上下文,后续发现与验证可持续追加
- Next: 扫描
public/assets、现有 Smash Up faction 资源与相关代码/脚本
-
[10:22] Action: 核对原工作区 Smash Up 新原图与现有压缩产物
- Result:
aiji_base.png与目标四派系基地匹配,但aiji.png实际是 Pretty Pretty 四派系卡图;旧cards5.webp/base4.webp不是本次目标内容 - Next: 用 TTS / Wiki 源数据锁定四派系的正式卡牌与基地清单,判断中文 cards 原图缺口是否阻塞实现
- Result:
-
[10:28] Action: 解析 TTS 源数据
2833984701.json- Result: 已确认 Ancient Egyptians / Cowboys / Samurai / Vikings 四个 kit 均存在,且能提取对应 bases / deck / titan / CustomDeck 信息
- Next: 按 Smash Up 专项规范运行 Wiki 爬虫,建立本次录入契约与 spec 范围
-
[10:40] Action: 起草并校验 OpenSpec change
add-smashup-oops-faction-intake- Result:
proposal.md/tasks.md/design.md/ spec delta 已创建,openspec validate add-smashup-oops-faction-intake --strict --no-interactive通过 - Next: 向用户确认 cards 原图来源;确认后再进入 apply 阶段
- Result:
Status: Complete
-
[10:48] Action: 用户修正并确认
aiji.png为正确图片- Result: 当前 worktree 中
public/assets/i18n/zh-CN/smashup/cards/aiji.png已变为 Oops, You Did It Again 四派系卡图 - Next: 重新核定 atlas 网格、切片顺序与卡牌索引
- Result: 当前 worktree 中
-
[10:54] Action: 直接查看并核对
aiji.png与aiji_base.png- Result: 已确认
aiji.png为7x7row-major(48 卡 + 1 尾格),aiji_base.png为2x4row-major(8 基地) - Next: 以该索引顺序生成 faction/base/card 接入清单
- Result: 已确认
-
[10:58] Action: 压缩 Smash Up 新原图
- Result: 已生成
cards/compressed/aiji.webp与base/compressed/aiji_base.webp - Next: 在 atlasCatalog / ids / static defs 中接入新 atlas
- Result: 已生成
-
[11:05] Action: 复核 TTS
2833984701.json的四个目标 kit- Result: 已确认四派系的英文卡名、卡牌数量与基地清单,足以作为 defId / count / canonical base name 的英文来源
- Next: 补 Wiki 抓取映射并开始正式录入
-
[11:40] Action: 完成 Oops 四派系静态接入
- Result: 已补
ids.ts、atlasCatalog.ts、4 个 faction 文件、8 个 base def、locale、factionMeta.ts,并修复registerPodBaseSkeletons()对非 POD 派系误生成_pod基地的问题 - Next: 跑 Vitest / typecheck / E2E 并处理截图异常
- Result: 已补
Status: Complete
-
[12:00] Action: 运行 Vitest、typecheck 与 OpenSpec 校验
- Result:
CardPreview.i18n、criticalImageResolver、factionSelection、cardI18nIntegrity、typecheck、openspec validate全部通过 - Next: 完成 E2E 证据与上传验证
- Result:
-
[12:10] Action: 排查 E2E 白板问题
- Result: 确认根因不是 atlas 索引,而是
AtlasCard用多层background-image充当 fallback,导致 Playwright 证据截图里 atlas 呈现白板 - Next: 修复渲染策略并复跑 E2E
- Result: 确认根因不是 atlas 索引,而是
-
[12:25] Action: 上传新 atlas 到 R2 并修复
AtlasCard渲染策略- Result:
aiji.webp与aiji_base.webp已上传到official/i18n/zh-CN/smashup/...,HEAD均为200;AtlasCard已改为选择单个已加载成功的 URL 作为最终背景图 - Next: 复跑 E2E 并留证
- Result:
-
[12:35] Action: 复跑 intake E2E 并自审截图
- Result:
Oops 四派系在派系选择与注入场景中都能显示资源已通过,派系选择与棋盘截图均显示真实卡图/基地图 - Next: 补 workflow / evidence 文档并回填计划文件
- Result:
-
[12:50] Action: 沉淀 workflow / contract / E2E evidence 文档
- Result: 已新增
docs/games/smashup/workflows/smashup-faction-intake.md、evidence/smashup/smashup-oops-faction-intake-contract.md、evidence/smashup/smashup-oops-faction-intake-e2e-test.md - Next: 整理最终交付摘要
- Result: 已新增
Status: In Progress
-
[13:42] Action: 为玩法补完创建 OpenSpec change
add-smashup-oops-faction-gameplay- Result:
proposal.md/design.md/tasks.md/ spec delta 已落盘,范围明确为四派系正式玩法、新交互类型 UI、统一审计与 E2E - Next: 结合用户最新指令确认实施顺序与阶段边界
- Result:
-
[13:47] Action: 根据用户要求收敛实施顺序与收尾方式
- Result: 已明确“一个一个派系实施,全部完成后再统一审计,然后端到端测新交互类型”;Gameplay 波次固定为
Ancient Egyptians → Vikings → Cowboys → Samurai - Next: 运行 OpenSpec 严格校验并回填 planning 文件
- Result: 已明确“一个一个派系实施,全部完成后再统一审计,然后端到端测新交互类型”;Gameplay 波次固定为
-
[13:49] Action: 运行
openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive- Result: 校验通过,proposal 进入可评审状态
- Next: 更新
task_plan.md / findings.md / progress.md,准备向用户汇报 proposal 核心范围与第一波实施入口
Status: In Progress
-
[14:10] Action: 实现 Ancient Egyptians 的埋葬/翻开主链路与专属能力
- Result: 已新增
src/games/smashup/abilities/ancient_egyptians.ts,接入Mummy / Pyramid Engineer / Priest of Anubis / Pharaoh / Lost Knowledge / Seal the Tomb / Tomb Trap / Blessing of Anubis / You Can Take It With You / Plague of Locusts / Mummy Strength / Ancient Curse,并在domain/bury.ts增加可复用的buildBuryCardEvents()/uncoverBuriedCard(),支持onUncover、非法时机翻开 special 直接弃置、onCardBuried / onBuriedCardUncovered触发。 - Next: 完成 bury UI、同步 locale / OpenSpec,并跑相关验证。
- Result: 已新增
-
[14:22] Action: 落地 bury UI 与 Ancient Egyptians 正确文本
- Result:
BaseZone.tsx已显示埋葬牌条带;控制者可见真实卡面并可检视,对手仅见隐藏占位与数量/控制者标识。public/locales/en/game-smashup.json与public/locales/zh-CN/game-smashup.json已修正 Ancient Egyptians 与base_star_portal文本。 - Next: 补最小 Vitest、复跑 typecheck / OpenSpec 校验。
- Result:
-
[14:38] Action: 补 Ancient Egyptians 最小测试并复核门禁
- Result: 已在现有测试文件补
buryEngine.test.ts与newBaseAbilities.test.ts,覆盖“翻开后只结算 uncover 文本并弃置”“从场上埋葬确实离场”“Pyramids / Star Portal 基地入口”;npx vitest run src/games/smashup/__tests__/buryEngine.test.ts src/games/smashup/__tests__/newBaseAbilities.test.ts通过,npm run typecheck通过,openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive通过。 - Next: 回填 planning / spec 后进入 Vikings。
- Result: 已在现有测试文件补
Status: In Progress
-
[15:05] Action: 按官方口径重建 Vikings 文本基线与能力范围
- Result: 已确认仓库原有 Vikings locale 与 Oops 官方规则书 / Fandom 口径冲突,当前实现不再沿用旧文本;
Huscarl / Shield Maiden / Raider / Valkyrie / Viking Funeral / Ransack / Pillage / Cast the Runes / Raiding Party / Berserk / Tribute / Combat Training / Drakkar / Longhouse均已切到官方语义。 - Next: 落能力文件、metadata 和基地触发实现。
- Result: 已确认仓库原有 Vikings locale 与 Oops 官方规则书 / Fandom 口径冲突,当前实现不再沿用旧文本;
-
[15:18] Action: 接入 Vikings ability 与静态 metadata
- Result: 已新增
src/games/smashup/abilities/vikings.ts并在abilities/index.ts注册;src/games/smashup/data/factions/vikings.ts已修正Huscarl / Raider为talent、Shield Maiden / Berserk为onPlay、Viking Funeral为ongoing且ongoingTarget: 'minion'。 - Next: 修正 locale、补最小行为测试并验证基地入口。
- Result: 已新增
-
[15:34] Action: 补 Vikings 最小测试并复核门禁
- Result: 已在
newFactionAbilities.test.ts覆盖vikings_huscarl / vikings_shield_maiden / vikings_pillage,在newBaseAbilities.test.ts覆盖base_drakkar / base_longhouse;npx vitest run src/games/smashup/__tests__/newFactionAbilities.test.ts src/games/smashup/__tests__/newBaseAbilities.test.ts通过,npm run typecheck通过,openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive通过。 - Next: 回填 planning 文件后进入 Cowboys。
- Result: 已在
| Question | Answer |
|---|---|
| Current Phase? | Phase 9 收尾阶段:统一审计、gameplay E2E 与 evidence 已完成,剩余是确认门禁与向用户汇报真实残留缺口 |
| Goal? | 在已完成 intake、四派系第一轮实现的基础上,完成统一 gameplay 审计、浏览器层新交互 E2E 和证据收口,并明确真实残留风险 |
| Key Knowledge? | 统一审计已通过;共享官方 duel 内核已落地并完成 Cowboys 浏览器 full-chain 出图验证,Stagecoach 仍是最小移动语义;Ancient Egyptians / Samurai 仍主要是交互注入型 E2E |
| Last Action? | 已修复 Deputy 目标选择后的阶段推进 bug,并复跑 newFactionAbilities / newBaseAbilities 与 Cowboys 决斗 E2E |
| Next Step? | 向用户汇报官方 duel 收口结果、截图证据绝对路径,以及仍然真实存在的 Samurai 专项 E2E 与 Stagecoach 语义缺口 |
Status: In Progress
-
[16:10] Action: 按官方口径修正 Cowboys 文本基线与 metadata
- Result: 已将
Deputy / Gunfighter / Pinkerton / Sheriff / Stagecoach / Run 'Em Off / Quick Draw / High Noon / Gold Strike / Gold in Them Thar Hills / Form a Posse / Dynamite Surprise / So-So Corral的中英文 locale 改回官方语义;src/games/smashup/data/factions/cowboys.ts已补special / ongoing / onPlaymetadata。 - Next: 收敛 duel MVP 实现,修复错误事件字段并补最小测试。
- Result: 已将
-
[16:24] Action: 落地 Cowboys 第一轮 duel / move / destroy / draw 实现
- Result:
src/games/smashup/abilities/cowboys.ts已接入Gunfighter / Quick Draw / High Noon / Run 'Em Off / Gold in Them Thar Hills / Form a Posse / Dynamite Surprise / Sheriff / Gold Strike / Saloon / So-So Corral;同时移除了旧错误的Saloon决斗内偷触发和Dynamite Surprise伪 buff 逻辑,并改用现有grantExtraMinion / grantExtraAction契约。 - Next: 在现有测试文件补 Cowboys 最小覆盖,并复跑门禁。
- Result:
-
[16:29] Action: 补 Cowboys 最小测试并复核门禁
- Result: 已在
newFactionAbilities.test.ts覆盖cowboys_gunfighter / cowboys_quick_draw / cowboys_high_noon / cowboys_gold_strike,在newBaseAbilities.test.ts覆盖base_saloon / base_so_so_corral;npx vitest run src/games/smashup/__tests__/newFactionAbilities.test.ts src/games/smashup/__tests__/newBaseAbilities.test.ts通过,npm run typecheck通过,openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive通过。 - Next: 回填 Cowboy 残留缺口后进入 Samurai。
- Result: 已在
Status: In Progress
-
[16:54] Action: 按官方口径修正 Samurai 文本基线与 metadata
- Result: 已将
Samurai-Chan / Ronin / Bushi / Shogun / Yokai Attack! / Way of the Warrior / Honorable Combat / Honor the Fallen / Honor the Ancestors / Heart of the Battle / Final Haiku / Code of Bushido / Shogun's Palace / Sakura Garden的中英文 locale 改回官方语义;src/games/smashup/data/factions/samurai.ts已补special / ongoing / onPlaymetadata。 - Next: 落地第一轮 duel / honor / destroy / ongoing draw 实现并接入注册入口。
- Result: 已将
-
[17:02] Action: 落地 Samurai 第一轮 duel / destroy / draw / counter 实现并复核门禁
- Result: 已新增
src/games/smashup/abilities/samurai.ts并在abilities/index.ts注册,接入Ronin / Samurai-Chan / Bushi / Shogun / Yokai Attack! / Honorable Combat / Code of Bushido / Heart of the Battle / Honor the Fallen / base_shoguns_palace / base_sakura_garden;已在newFactionAbilities.test.ts覆盖samurai_ronin / samurai_yokai_attack / samurai_honorable_combat / samurai_code_of_bushido / samurai_honor_the_fallen,在newBaseAbilities.test.ts覆盖base_shoguns_palace / base_sakura_garden;npx vitest run src/games/smashup/__tests__/newFactionAbilities.test.ts src/games/smashup/__tests__/newBaseAbilities.test.ts通过,npm run typecheck通过,openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive通过。 - Next: 继续补齐 Samurai 第一轮遗漏能力,再统一回填残留语义。
- Result: 已新增
-
[17:10] Action: 补完 Samurai 第一轮遗漏能力并复跑门禁
- Result:
src/games/smashup/abilities/samurai.ts已继续接入Honor the Ancestors / Way of the Warrior(+3 分支) / Final Haiku / Sakura Garden的第一轮能力;newFactionAbilities.test.ts已新增samurai_samurai_chan / samurai_honor_the_ancestors / samurai_shogun / samurai_final_haiku覆盖,newBaseAbilities.test.ts已补base_shoguns_palace / base_sakura_garden强化断言;npx vitest run src/games/smashup/__tests__/newFactionAbilities.test.ts src/games/smashup/__tests__/newBaseAbilities.test.ts通过,npm run typecheck通过,openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive通过。 - Next: 转入四派系统一审计与新交互 E2E 收口。
- Result:
Status: Complete
-
[17:18] Action: 运行四派系统一 gameplay 审计并修复显式硬错误
- Result: 已确认默认
vitest配置会排除*audit*.test.ts,必须改用vitest.config.audit.ts;npx vitest run src/games/smashup/__tests__/abilityBehaviorAudit.test.ts --config vitest.config.audit.ts --configLoader native最终21 passed。过程中额外发现cowboys_stagecoach存在abilityTags: ['onPlay']但未注册执行器的硬错误,现已补Stagecoach的 MVP 实现与newFactionAbilities.test.ts最小回归。 - Next: 跑浏览器层新交互 E2E,并输出证据文档。
- Result: 已确认默认
-
[17:32] Action: 跑通三条 Oops gameplay E2E 并留存截图
- Result:
e2e/smashup/smashup-phase-transition-simple.e2e.ts已新增Ancient Egyptians bury/uncover、Cowboys duel direct click、Samurai extra play三条用例;三条命令均通过,并生成对应的 before/after 显式证据截图。 - Next: 写统一 evidence,并把真实覆盖边界回填到 planning 文件。
- Result:
-
[17:40] Action: 汇总 gameplay E2E evidence 与残留风险
- Result: 已新增
evidence/smashup/smashup-oops-faction-gameplay-e2e-test.md,明确三条浏览器交互证据、截图绝对路径与限制说明;task_plan.md、findings.md、progress.md已同步回填统一审计入口、StagecoachMVP 范围,以及Ancient Egyptians / Samurai两条 E2E 属于“注入当前交互”而非 full-chain 的事实边界。 - Next: 复跑最终门禁,确认本轮可交付状态。
- Result: 已新增
-
[17:43] Action: 复跑最终门禁并确认收尾状态
- Result:
npm run typecheck通过,npx openspec validate add-smashup-oops-faction-gameplay --strict --no-interactive通过,npx vitest run src/games/smashup/__tests__/newFactionAbilities.test.ts --configLoader native通过(76 passed, 1 skipped),npx vitest run src/games/smashup/__tests__/abilityBehaviorAudit.test.ts --config vitest.config.audit.ts --configLoader native通过(21 passed)。 - Next: 向用户汇报已完成范围、证据落点与仍需后续补完的官方语义缺口。
- Result:
Status: Complete
-
[18:34] Action: 将 Cowboys 决斗浏览器用例升级为官方链路并补关键截图点
- Result:
e2e/smashup/smashup-phase-transition-simple.e2e.ts中的 Cowboys 用例已从“选中敌方随从后直接结算”升级为完整Pinkerton -> 决斗牌 -> Deputy -> 结算链路,并新增pinkerton / duel-card / deputy-card / deputy-target / resolve五张显式证据截图。 - Next: 运行用例并核对画面。
- Result:
-
[18:37] Action: 借助 E2E 暴露并修复 Deputy 收尾的真实链路 bug
- Result: 发现
smashup_duel_deputy_target在推进下一阶段时使用了弃牌前旧状态,导致Deputy已弃置却又被重新排入同一玩家提示;现已在src/games/smashup/domain/duel.ts中先模拟CARDS_DISCARDED + addTempPower再推进阶段,消除重复提示并确保决斗正常收口。 - Next: 复跑单测与 E2E。
- Result: 发现
-
[18:39] Action: 复跑决斗门禁并人工核图
- Result:
node .\\scripts\\infra\\vitest-cli-safe.mjs run src\\games\\smashup\\__tests__\\newFactionAbilities.test.ts src\\games\\smashup\\__tests__\\newBaseAbilities.test.ts --configLoader native通过;npm run test:e2e:ci:file -- smashup-phase-transition-simple.e2e.ts "Oops Cowboys 决斗交互应按官方链路完成 Pinkerton/决斗牌/Deputy/结算"通过;已人工核对五张截图,确认决斗横幅、Pinkerton 按钮、决斗牌跳过按钮、Deputy 选牌/选目标与结算后敌方离场全部符合预期。 - Next: 回填 evidence / planning 文件并向用户汇报。
- Result:
-
[21:10] Action: 收口 Cowboys 决斗链 i18n 混用
- Result: 已确认根因是
src/games/smashup/domain/duel.ts的阶段标题/跳过按钮仍是硬编码中文,而Board.tsx决斗横幅已走 locale;现已给交互选项补labelKey/labelParams渲染入口,补齐duel.ts的 locale key,并让PromptOverlay.tsx与Board.tsx的快捷按钮统一解析这些 key。npm run typecheck通过,newFactionAbilities + newBaseAbilities共123 passed, 1 skipped,npm run test:e2e:ci:file -- smashup-phase-transition-simple.e2e.ts "Oops Cowboys 决斗交互应按官方链路完成 Pinkerton/决斗牌/Deputy/结算"再次通过。 - Next: 提交、推送并为这轮 i18n 收尾补开新 PR。
- Result: 已确认根因是