Skip to content

Refine round and phase lifecycle handling and add event decorators#56

Merged
llsccm merged 6 commits into
mainfrom
dev
Jul 24, 2026
Merged

Refine round and phase lifecycle handling and add event decorators#56
llsccm merged 6 commits into
mainfrom
dev

Conversation

@llsccm

@llsccm llsccm commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • 新功能
    • 新增“巧织”与“思泣”相关牌面追踪和来源推断。
    • 优化回合与阶段提示,支持阶段链式展示及战法状态重置。
    • 改进暗置标记、匿名占位及整手揭示后的牌位收敛。
  • 问题修复
    • 修复公共区牌堆洗牌、牌堆回补和明牌展示顺序异常。
    • 修复公共区域事件被错误识别为手牌子区的问题。
    • 改善无效回合数据、缺失牌实体及公共区刷新场景的处理。

llsccm and others added 6 commits July 22, 2026 21:30
* fix(tracker): 确定明牌离开牌堆时占位不顶回原槽

MoveType=18 暗拿后明牌再出现时,暗占位不得 replaceCard 污染牌底/牌顶已确认段;
恢复 insertUnknownPlaceholderIntoPile,公共区残留回补与 swap 路径对齐。

* fix(tracker): 木马迁座后全明快照收敛弱候选

装备容器迁座后 FromID 可能仍是旧座位,首次揭示明牌时用目标 mark 匿名槽物化;
全明快照按协议 CardIDs 收敛弱候选。测试不再预置快照明牌为已知 mark。

* chore(tracker): 清理牌底/木马修复的小冗余

去掉重复 missingIDs 与 knownIDs 校验,insertUnknownPlaceholderIntoPile 改用 Zone 类型。
* fix(tracker): 恢复匿名牌堆洗牌后的暂停追踪

匿名负 ID 牌堆洗牌时,从未定位身份和状态索引恢复暂停追踪实体。分类仅以小规模剩余牌堆排除身份,并在弃牌重置循环中统计匿名占位,避免对大弃牌堆计算差值。

* fix(tracker): 区分洗牌中的 APPEARED 暗身份

将 CardCounter APPEARED 桶中的未明示正 ID 归入 appearedHiddenIdentityCards,并补充木牛流马暗标记洗牌回归,锁定暂停结果与诊断分类。
空弃牌堆的首次洗牌不再执行协议牌堆身份分类;补充首次洗牌回归,并让暂停追踪相关用例明确先构造弃牌堆回收。
* wip: 思泣 巧织

* fix(tracker): 木马弱候选整手揭示反向收敛,思泣/巧织诊断瘦身

木马(木牛流马 mark:700)弱候选与已知牌来源物化冲突修复:
- A(时序): 新增 resolveHiddenMarkCandidatesFromFullHandReveal,在
  resolveKnownMoveCards 之前对整手完整揭示做局部反向收敛——不在揭示 ID
  里的候选明牌解到 mark,被挤出的匿名占位挤回来源手牌,消除 createExternal
  与"明牌未找到可立即置换的手牌占位"告警。
- B(占位守恒): bindConfirmedMarkCardToMarkSpace 的 player-mark 占位回收
  改为挤回 sourceSeat 手牌而非丢 outside(容器投影仍回 outside)。
- 复现守卫: tests/tracker/trojanFullHandReveal.test.ts。

技能打磨:
- SiQi: 移除牌底端点诊断脚手架与 afterMove 二次对账(连带删 Room.moveCards
  死钩子),收敛为单条 debug 日志,功能推断不变。
- QiaoZhi: 删除纯诊断的 getAnonymousHandEntityIDs / anonymousHandEntityIDsBefore
  与 getUnknownPlayerCards,结算日志精简;差集反推逻辑不变。

全量 284 条 tracker 测试通过;typecheck/lint/build 清洁。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(tracker): 收口 nitpick:共享 move 事件工具与占位筛选

- 抽出 getRaw/getCount/hasPositiveID 到 moveEventUtils
- 整手揭示回收占位对齐 mark/spellID 筛选
- 巧织正常跳过日志降为 debug;公共区 subZone 注释客观化

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* fix(tracker): centralize hidden mark placeholder reconciliation

* fix(tracker): warn on unrecoverable mark overflow
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2727ab30-d5e6-48b2-a365-83dc3415fd9d

📥 Commits

Reviewing files that changed from the base of the PR and between 2345210 and 251bfb1.

📒 Files selected for processing (31)
  • docs/agents/card_tracker.md
  • docs/agents/lifecycle.md
  • src/handler/GsCGamephaseNtf.js
  • src/handler/MsgGameTurnNtf.js
  • src/handler/PubGsCMoveCard.js
  • src/handler/spellEffects.js
  • src/tracker/Game.ts
  • src/tracker/MoveEventNormalizer.ts
  • src/tracker/Room.ts
  • src/tracker/gameState.ts
  • src/tracker/roomMovement.ts
  • src/tracker/roomMovement/hiddenMarks.ts
  • src/tracker/roomMovement/sources.ts
  • src/tracker/runtime/moveEventHandlers.ts
  • src/tracker/skill/QiaoZhi.ts
  • src/tracker/skill/SiQi.ts
  • src/tracker/skill/moveEventUtils.ts
  • tests/tracker/anonymousPileSpike.test.ts
  • tests/tracker/gamePhase.test.ts
  • tests/tracker/gameTurn.test.ts
  • tests/tracker/hiddenMarkCandidates.test.ts
  • tests/tracker/knownDiscardConfirm.test.ts
  • tests/tracker/markSpaceReconcile.test.ts
  • tests/tracker/moveEventNormalizer.test.ts
  • tests/tracker/pileDisplayOrder.test.ts
  • tests/tracker/qiaoZhi.test.ts
  • tests/tracker/room.import.test.ts
  • tests/tracker/siQi.test.ts
  • tests/tracker/spellEffects.test.ts
  • tests/tracker/trojanFullHandReveal.test.ts
  • tests/tracker/viewDirtyRender.test.ts
💤 Files with no reviewable changes (3)
  • src/tracker/Game.ts
  • src/handler/spellEffects.js
  • src/tracker/gameState.ts

📝 Walkthrough

Walkthrough

本次变更细化回合与阶段生命周期处理,移除 GameState 中的 DOM/战法清理职责;重构暗标记候选、匿名占位和牌堆洗牌逻辑;新增巧织、思泣移动事件装饰及对应测试覆盖。

Changes

记牌器生命周期与移动追踪

Layer / File(s) Summary
回合生命周期与阶段渲染
src/handler/*, src/tracker/Game.ts, src/tracker/gameState.ts, tests/tracker/gamePhase.test.ts, tests/tracker/gameTurn.test.ts
handleGameTurnhandleGamePhase 接管轮次、阶段清理、战法状态更新及渲染调度;GameState 保留纯状态推进,并新增阶段链显示与输入校验测试。
暗标记候选与名额守恒
src/tracker/Room.ts, src/tracker/roomMovement.ts, src/tracker/roomMovement/hiddenMarks.ts, tests/tracker/hiddenMarkCandidates.test.ts, tests/tracker/markSpaceReconcile.test.ts, tests/tracker/trojanFullHandReveal.test.ts
完整手牌揭示和观察快照会先收敛弱候选;已知牌物化、hand/mark 互斥集合及匿名占位回收统一通过标记空间守恒处理。
洗牌与公共牌堆回补
src/tracker/Room.ts, src/tracker/roomMovement/sources.ts, tests/tracker/anonymousPileSpike.test.ts, tests/tracker/pileDisplayOrder.test.ts
洗牌重新分类未定位和暂停追踪身份;公共牌堆占位回补时避开顶部连续明牌段,并更新脏区与展示顺序断言。
技能移动事件装饰
src/tracker/runtime/moveEventHandlers.ts, src/tracker/skill/*, src/handler/spellEffects.js, tests/tracker/qiaoZhi.test.ts, tests/tracker/siQi.test.ts
移动事件工具函数集中到 moveEventUtils;新增巧织差集确认和思泣红牌来源筛选,并移除旧的 3543 副作用处理器。
事件归一化与验证
src/tracker/MoveEventNormalizer.ts, tests/tracker/moveEventNormalizer.test.ts, tests/tracker/knownDiscardConfirm.test.ts, tests/tracker/viewDirtyRender.test.ts
公共区事件不再伪造手牌子区;缺失实体确认、公共区脏渲染和已知牌补建路径补充了测试覆盖。

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Protocol
  participant MoveEventHandlers
  participant QiaoZhi
  participant SiQi
  participant Room
  Protocol->>MoveEventHandlers: dispatch spell move event
  MoveEventHandlers->>QiaoZhi: route spellID 3544
  QiaoZhi->>Room: confirm displayed-card difference
  MoveEventHandlers->>SiQi: route spellID 3543
  SiQi->>Room: attach sourceCards and combinationID
Loading

Possibly related PRs

  • llsccm/tracker#54:涉及同一批暗标记候选收敛、移动事件归一化及巧织/思泣处理链路。
  • llsccm/tracker#55:涉及相同的 reconcileMarkSpace 与整手揭示占位回收逻辑。
  • llsccm/tracker#53:涉及相同的回合与阶段处理职责拆分。
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.70% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title Check ✅ Passed Title check skipped as CodeRabbit has written the PR title.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot changed the title @pr Refine round and phase lifecycle handling and add event decorators Jul 24, 2026
@llsccm
llsccm merged commit 1f5938a into main Jul 24, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant