Skip to content

Update Changes section in summary#49

Merged
llsccm merged 8 commits into
mainfrom
dev
Jul 22, 2026
Merged

Update Changes section in summary#49
llsccm merged 8 commits into
mainfrom
dev

Conversation

@llsccm

@llsccm llsccm commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • 功能改进
    • 优化随机手牌转移的候选推断与座位覆盖,提升复杂暗牌/部分可见场景下的状态准确性。
    • 完善卡牌新增/扩展座位候选逻辑。
    • 支持已定位卡牌重新匿名化,保障后续状态一致性。
    • 优化座位布局尺寸与样式细节(文字颜色与容器宽度表现)。
  • Bug 修复
    • 修正特定角色/结果类型不再错误设置先手信息。
    • 修复手气卡回牌堆后仍可能以真实身份参与后续暗摸的问题。
  • 文档与测试
    • 更新匿名槽与验证归档说明,并补充相关回归测试用例。

llsccm added 7 commits July 20, 2026 21:14
- 跨座位残留候选不再误报 entityOverflow
- 全暗来源跳过无展示价值的 N 选 K,回退默认暗牌移动
- 有观测快照时用 O(1) total/unknown 判断,避免手牌全表扫描
- 补充清议弃牌堆回填与随机转移回归
* fix(tracker): secondary hand transfer

* chore: 修改 手牌框 UI 宽度
* fix(tracker): 手气卡回牌堆真正匿名化

resetKnownToUnknown 仅 isKnown=false 会在牌堆留下正 ID 未知槽,
后续暗摸会原样绑成正 ID 独占暗手并破坏 discardKnown 物化。

* fix(doudizhu): 不再用叫分结果误设先手

Type 44 只是叫分操作回包,不是最终地主结果;误用其 SeatID 设置先手。

* test(doudizhu): 对齐叫分回包不再设置先手的断言

Type 44/45 不再调用 setTrackerFirstHand,更新 roleSpellOptRep 回归。

* fix(tracker): 匿名化时经候选路径清空座位

直接清空 locationCandidates 不会同步 owner,seats 会回退旧座位。
@coderabbitai

coderabbitai Bot commented Jul 21, 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: 52ad01b0-6a0c-4613-8a41-4eca05d9f295

📥 Commits

Reviewing files that changed from the base of the PR and between dadadda and d781a04.

📒 Files selected for processing (2)
  • src/tracker/Room.ts
  • src/tracker/roomMovement.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/tracker/roomMovement.ts
  • src/tracker/Room.ts

📝 Walkthrough

Walkthrough

Tracker 更新了已定位身份的匿名化回收、随机手牌候选传播、座位候选扩展及相关测试;角色技能回包不再设置先手,并同步调整界面样式、DOM 判断和匿名槽归档文档。

Changes

Tracker 身份与候选传播

Layer / File(s) Summary
身份匿名化与未知状态回收
src/tracker/Room.ts, src/tracker/CardCounter.ts, src/tracker/roomMovement.ts, tests/tracker/trackerController.test.ts, tests/tracker/spellEffects.test.ts
已定位身份回收到匿名实体,状态索引同步更新,回牌堆及后续暗摸测试验证真实匿名状态。
随机手牌候选传播与类型契约
src/tracker/roomMovement/types.ts, src/tracker/roomMovement/candidates.ts, src/tracker/roomMovement.ts, tests/tracker/handCountObservation.test.ts
新增来源手牌观测字段,并按未知数量、唯一归属实体和覆盖关系生成随机转移候选。
座位候选扩展
src/tracker/Card.ts, tests/tracker/locationCandidates.test.ts, tests/tracker/secondaryRandomHandTransfer.test.ts
已有完整位置候选时,addSeat 会复制模板并追加目标座位候选。

角色技能回包处理

Layer / File(s) Summary
Type 44/45 结果处理
src/handler/CGsRoleSpellOptRep.js, tests/tracker/roleSpellOptRep.test.ts, src/tracker/MoveEventNormalizer.ts
Type 44 和 Type 45 不再通过回包设置先手,并更新对应测试和协议常量注释。

界面样式与文档记录

Layer / File(s) Summary
界面布局与尺寸调整
html/iframe.html, src/draw.js, src/dom.js, src/tracker/state.ts
更新红牌颜色、容器宽度、默认手牌框宽度及座位 UI 条件判断。
匿名槽归档说明
docs/agents/card_tracker.md, docs/agents/testing.md
验证记录改为引用本地匿名实体归档,并补充阶段停用及目录忽略说明。

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant moveKnownCardsForContext
  participant Room
  participant CardCounter
  moveKnownCardsForContext->>Room: anonymizeLocatedIdentity(card)
  Room->>CardCounter: releaseLocatedIdentityToUnknown(card, previousCardID)
  Room-->>moveKnownCardsForContext: previousCardID
  moveKnownCardsForContext->>moveKnownCardsForContext: reset card and record resetKnownCardIDs
Loading

Possibly related PRs

  • llsccm/tracker#48:同样涉及回牌堆身份匿名化及 Type 44/45 先手处理。
  • llsccm/tracker#46:同样调整随机手牌转移中的来源观测和候选传播逻辑。
  • llsccm/tracker#47:同样修改 Card.addSeat 和位置候选扩展测试。
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% 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 Update Changes section in summary Jul 21, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/tracker/Room.ts (1)

535-547: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

notifyCardChanged 会立即撤销 releaseLocatedIdentityToUnknown 刚做的 dirty 清理。

releaseLocatedIdentityToUnknown 末尾 this.dirtyCards.delete(card) 意味着"该卡状态已手动同步完毕",但紧随其后调用的 this.notifyCardChanged(...) 内部会 markCounterDirty(card),把它重新放回 dirtyCards。目前因为调用方(roomMovement.ts)紧接着执行 card.reset(),且真正的 counter.update() 总在 reset 完成之后才跑,两次计算结果一致,不会有实际问题;但这是一处脆弱的顺序耦合——一旦未来在 anonymize 与 reset 之间插入任何触发 counter.update() 的读操作,该卡会被重新算成 APPEARED 而非 UNKNOWN

建议把 counter.releaseLocatedIdentityToUnknown(...) 调整到 notifyCardChanged(...) 之后执行,使"已同步"的删除操作始终是最后一步。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/tracker/Room.ts` around lines 535 - 547, 在包含 card-identity-anonymized
通知的流程中,将 counter.releaseLocatedIdentityToUnknown(card, previousCardID) 移到
notifyCardChanged(card, ...) 之后执行;保留无 counter 时调用 markCounterDirty(card) 的分支,并确保
releaseLocatedIdentityToUnknown 的 dirty 清理成为最后一步。
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/agents/card_tracker.md`:
- Line 235: 将匿名槽归档 plans/anonymous-entity-and-slot.md 纳入仓库可访问的位置并确保纳入版本控制;同步更新
docs/agents/card_tracker.md 第235行和第271行、docs/agents/testing.md
第136-138行中的引用,使三处链接都指向新的有效归档路径。

In `@src/tracker/roomMovement.ts`:
- Around line 698-712: The anonymization failure fallback in the known-card
reset flow is silent. In the resetKnownToUnknown branch of
moveKnownCardsForContext, when anonymizeLocatedIdentity returns null, add a
trackerLogger.warn that reports the card/index inconsistency before resetting
the card; preserve resetKnownCardIDs handling and do not introduce additional
behavior changes.

---

Nitpick comments:
In `@src/tracker/Room.ts`:
- Around line 535-547: 在包含 card-identity-anonymized 通知的流程中,将
counter.releaseLocatedIdentityToUnknown(card, previousCardID) 移到
notifyCardChanged(card, ...) 之后执行;保留无 counter 时调用 markCounterDirty(card) 的分支,并确保
releaseLocatedIdentityToUnknown 的 dirty 清理成为最后一步。
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0b831e8d-89f6-4dbb-82fe-a0be71a54cb4

📥 Commits

Reviewing files that changed from the base of the PR and between ae69c0a and dadadda.

📒 Files selected for processing (20)
  • docs/agents/card_tracker.md
  • docs/agents/testing.md
  • html/iframe.html
  • src/dom.js
  • src/draw.js
  • src/handler/CGsRoleSpellOptRep.js
  • src/tracker/Card.ts
  • src/tracker/CardCounter.ts
  • src/tracker/MoveEventNormalizer.ts
  • src/tracker/Room.ts
  • src/tracker/roomMovement.ts
  • src/tracker/roomMovement/candidates.ts
  • src/tracker/roomMovement/types.ts
  • src/tracker/state.ts
  • tests/tracker/handCountObservation.test.ts
  • tests/tracker/locationCandidates.test.ts
  • tests/tracker/roleSpellOptRep.test.ts
  • tests/tracker/secondaryRandomHandTransfer.test.ts
  • tests/tracker/spellEffects.test.ts
  • tests/tracker/trackerController.test.ts

Comment thread docs/agents/card_tracker.md
Comment thread src/tracker/roomMovement.ts
- resetKnownToUnknown 时 anonymize 失败记录 card/index 不一致
- releaseLocatedIdentityToUnknown 移到 notifyCardChanged 之后
@llsccm
llsccm merged commit 2345210 into main Jul 22, 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