上线验证时发现的(2026-08-17)。不紧急,但属于隐私承诺的缺口,该补。
现象
删掉一个 Sushi ID 账号,站级榜会级联清空(外键 ON DELETE CASCADE,验证过)。
但 Iron Tide 的 93 张详细榜是另一个数据库,没有任何外键关系——那个人的成绩、
以及我们存下来的 display_name,会继续留在榜上。
实测:删号后 Sushi ID 库是 0 users / 0 scores,Iron Tide 库里那条
player_id = sushi:<已删除的账号> 还在,照常显示名字。
为什么算问题
面板里对登录玩家写着「登录用的名字永远不会出现在任何榜上」,这条仍然成立。
但**「我删号了」这个动作没有传导到这里**——玩家会合理地以为删号就删干净了。
匿名档不受影响:面板里的「把我从榜上撤下来」是直接调本服务的,一直有效。
可能的做法
- 反向查询(改动最小):定期拿库里所有
kind=sushi 的 player_id 去问 Sushi ID
还在不在,不在就把这些记录置 hidden。需要 Sushi ID 加一个「这个账号还存在吗」的服务间接口。
- 删号时通知:Sushi ID 在
DELETE /auth/account 里回调各计分服务。更及时,但要引入 webhook 和重试。
- 不存 display_name,每次渲染榜单时现查。最干净,但每次看榜都要跨服务调用。
倾向 1——它不需要在删号这个关键路径上引入新的失败点,延迟几小时对这个场景可以接受。
相关
docs/LEADERBOARD.md 第 3.1 节(隐私)应当在修好之前写明这个限制
server-leaderboard/db.js 的 players.display_name
- Sushi ID:
VideoGameTips/sushigamelab api/app.js 的 /internal/runs/:runId(现成的服务间通道)
上线验证时发现的(2026-08-17)。不紧急,但属于隐私承诺的缺口,该补。
现象
删掉一个 Sushi ID 账号,站级榜会级联清空(外键
ON DELETE CASCADE,验证过)。但 Iron Tide 的 93 张详细榜是另一个数据库,没有任何外键关系——那个人的成绩、
以及我们存下来的
display_name,会继续留在榜上。实测:删号后 Sushi ID 库是
0 users / 0 scores,Iron Tide 库里那条player_id = sushi:<已删除的账号>还在,照常显示名字。为什么算问题
面板里对登录玩家写着「登录用的名字永远不会出现在任何榜上」,这条仍然成立。
但**「我删号了」这个动作没有传导到这里**——玩家会合理地以为删号就删干净了。
匿名档不受影响:面板里的「把我从榜上撤下来」是直接调本服务的,一直有效。
可能的做法
kind=sushi的 player_id 去问 Sushi ID还在不在,不在就把这些记录置
hidden。需要 Sushi ID 加一个「这个账号还存在吗」的服务间接口。DELETE /auth/account里回调各计分服务。更及时,但要引入 webhook 和重试。倾向 1——它不需要在删号这个关键路径上引入新的失败点,延迟几小时对这个场景可以接受。
相关
docs/LEADERBOARD.md第 3.1 节(隐私)应当在修好之前写明这个限制server-leaderboard/db.js的players.display_nameVideoGameTips/sushigamelabapi/app.js的/internal/runs/:runId(现成的服务间通道)