# Texas / 通用问题 — 分析与实施计划索引 > 本目录对应一次用户集中反馈(10 个编号问题 + 1 个通用登录问题)。 > 所有问题均基于对现有代码(`packages/engine`、`packages/ui`、`packages/server`、`apps/web`)的精读定位, > 每个文件给出**根因** + **拟采用的修复方案**。 ## 问题清单与优先级 | 编号 | 主题 | 文件 | 范围 | 优先级 | |------|------|------|------|--------| | 1 | 改名后牌桌 UI 不刷新 | [01-rename-not-refreshing.md](./01-rename-not-refreshing.md) | UI / engine | P0(最影响体验) | | 2 | 删除房间 / 房主心跳 / 房主退出自动关房 / 踢人 | [02-room-delete-host-heartbeat-kick.md](./02-room-delete-host-heartbeat-kick.md) | server / ui(通用,全部游戏) | P0(基础设施) | | 3 | 结束后未重置房间;德州有人筹码≤0 给补码/退出;其他游戏无限轮回 | [03-reset-room-rebuy.md](./03-reset-room-rebuy.md) | engine / ui(通用 + holdem) | P1 | | 4 | all-in 与比牌归属权问题 | [04-allin-hand-comparison.md](./04-allin-hand-comparison.md) | engine(holdem) | P1 | | 5 | 打牌顺序(标准德州顺序 + 每次 raise 后顺序) | [05-betting-order.md](./05-betting-order.md) | 调查 + engine(holdem) | P1 | | 6 | 结算开最大人的牌;All-in 必须翻两边牌,不盖自己的牌 | [06-showdown-reveal-cards.md](./06-showdown-reveal-cards.md) | ui / engine(holdem) | P2 | | 9 | 筹码滑块分段,每段 5,每 5 一段 | [09-chip-slider-segments.md](./09-chip-slider-segments.md) | ui(holdem) | P2 | | 10 | 每人筹码区增加“总已下”,累计每次下注 | [10-chip-total-bet.md](./10-chip-total-bet.md) | ui / engine(holdem) | P2 | | 8(通用) | 用户登录:名称+密码身份加入 | [08-user-login.md](./08-user-login.md) | server / ui(通用) | P2(独立大功能) | | 8/2 延伸 | 登录落地 + 踢人修正 + 单房间约束 + 管理员越权 + UI 清理 | [12-auth-kick-single-room.md](./12-auth-kick-single-room.md) | server / ui / engine(通用) | 已完成(本会话) | | 9(UI 收尾) | 登录后自动跳转对局 + 动态欢迎界面(无"欢迎"字样)+ 游戏列表排序(德州第一/Mill 第二) | [13-login-redirect-welcome-gamelist.md](./13-login-redirect-welcome-gamelist.md) | apps/web(通用) | 已完成(本会话) | > 注意:编号按用户原始序号,缺失的 7 是用户未给出。问题 8 虽编号靠后,但是“通用问题”,与 2 同属 server 基础设施。 ## 关键架构事实(定位依据) - **boardgame.io 0.50.2**:Lobby REST 仅有 `create/join/leave/playAgain/update`,**没有 delete / heartbeat / kick**。 - `leave`:最后一个玩家离开时 `db.wipe(matchID)` 删除房间(`server.js:2331`)。 - `update`(`/games/:name/:id/update`):只改 `metadata.players[playerID].name`,**不触碰游戏状态 G**。 - **两个名字来源(问题 1 根因)**: 1. Lobby `metadata.players[pid].name`(房间列表 pill 显示用) 2. 游戏内 `G.players[pid].name`(牌桌 HoldemBoard 显示用,由 `sitDownMove` 写入) 二者相互独立,改名只更新了 (1)。 - **`server` 对象**(`Server()` 返回值)暴露 `app / db / auth / router`,可在 `packages/server/src/index.ts` 里给 `server.app` 挂自定义 koa 路由: - 删除房间:`server.db.wipe(matchID)`(配合 `server.db.setMetadata` 清 metadata)。 - 心跳/在线:在 `metadata` 或一张内存表里记录 `lastSeen[pid]`。 - 踢人:复用 `metadata.players[pid]` 清 name/credentials + 同时在 G 里把该座位 `seated=false`。 - **Holdem 行动权机制**(`holdem.ts`):`ActivePlayers.ALL` + move 内 `isActor` 校验; 推进用 `advance()` → `events.endTurn({next})` 或 `endPhase()`;首行动者 `G.firstToAct` 由 phase.onBegin 设置。 - **改名信任模型**:现有 `sitDownMove` 已直接信任客户端传入的 `playerID`(`move` 内 `me = playerID ?? ctx.currentPlayer`), 故新增的 `rename` move 沿用同一信任模型即可(局域网/单机休闲场景可接受)。 ## 实施顺序建议 1. **基础设施(server)**:问题 2(删除/心跳/踢人)+ 问题 8 登录的账号后端 → 影响全局。 2. **UI/engine 联动**:问题 1(改名刷新)→ 依赖 server 名字打通。 3. **游戏内循环**:问题 3(重置/补码/轮回)、问题 4(all-in 比牌)、问题 5(顺序核实+修正)。 4. **展示细节**:问题 6(亮牌)、问题 9(滑块分段)、问题 10(总已下)。 5. **登录前端**:问题 8。 详见 [11-implementation-plan.md](./11-implementation-plan.md)。