Skip to content

R21 审查修复批:并发/越权/i18n/SSE 十九项加固 - #17

Merged
mycyg merged 5 commits into
mainfrom
fix/r21-review-hardening
Aug 4, 2026
Merged

R21 审查修复批:并发/越权/i18n/SSE 十九项加固#17
mycyg merged 5 commits into
mainfrom
fix/r21-review-hardening

Conversation

@mycyg

@mycyg mycyg commented Jul 27, 2026

Copy link
Copy Markdown
Owner

对 origin/main(R20 wave5 合流后)做的一轮全量代码审查(6 路子系统并行审查 + 逐条复核)产出 19 项真实发现,本 PR 按四个互斥文件域全部修复并配套单测。

批A fix(api,db)——并发/越权/数据可见性

  • proactive intent 投递前 DB 级原子领取(created→delivering,迁移 0070),同 suppression_key 并发调用/恢复扫描不再双投 Cuu 消息与行动卡
  • event_outbox:重试封顶 10 次转 failed 死信(迁移 0071)、published 行 7 天定期清理、发布统计只计真更新
  • 工作项评论取最新 200 条窗口(原升序封顶会永久隐藏第 201 条起的最新评论)
  • 工作区审计流分页补 id 次级排序键
  • 项目归档/删除收口 NULL workspace 旁路:admin 特权要求确证同租户,孤儿行仅 owner 可管理
  • 停用善后认领退回+审计日志并入同一事务,重试真收敛
  • claim() workspaceId 兜底对齐 assign()

批B fix(web)

  • P2-09 语言同步告警竞态:改为壳层渲染完成后再渲 notice(在飞 PATCH 复用),快速失败不再静默丢告警
  • 会话加参与者选择器分页拉全量,>100 人工作区不再静默截断
  • 预算策略行保存后版本号 pill 同步刷新

批C fix(ui,web-runtime,desktop-webview)

  • 桌面回收站英文界面套用 restoreBlockedReasonEn,不再泄漏中文原值
  • 撤销失败后保持武装态,「点此重试」单击即真重试
  • live-runtime 同 URL 复用比较 key/eventTypes 不一致即重建流
  • 桌面 Cuu 流退避计数改在真收到数据后清零,accept-即断正常指数退避

批D fix(desktop, Rust)

  • SSE worker 等令牌分支补 select! 兜底轮询,notify_waiters 丢失唤醒不再永久卡死推流
  • 通知分级补 proposal.merged(含中英 fallback 文案)
  • 畸形 ID 优雅降级到兜底路由,不再断整条 SSE 连接

docs

  • DEPLOY.md 单实例假设表补 event_outbox drain 行(proactive 已改 DB 级领取故摘除)

验证

  • pnpm -r typecheck / lint / test 全绿(4699 pass, 0 fail)
  • cargo fmt --check / clippy --all-targets -D warnings / cargo test(124 pass)全绿
  • 新增/更新单测覆盖每项修复的失败场景

🤖 Generated with Claude Code

mycyg and others added 5 commits July 27, 2026 18:20
- proactive intent 投递前 DB 级原子领取(created→delivering,迁移0070),双并发/恢复扫描不再双投 Cuu 消息与行动卡
- event_outbox 重试封顶10次转 failed 死信(迁移0071)+published 行7天定期清理+发布统计只计真更新
- 工作项评论改取最新200条窗口(desc+id tie-break 后反转),超量不再丢最新评论
- 工作区审计流分页补 id 次级排序键,同时间戳翻页不丢行
- 项目归档/删除收口 NULL workspace 旁路:admin 特权要求确证同租户,孤儿行仅 owner 可管理
- 停用善后认领退回+审计日志并入同一事务,重试真收敛
- claim() workspaceId 兜底对齐 assign()(项目侧回退),NULL 不再误 409

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- P2-09 语言同步告警改为壳层渲染完成后再渲(在飞 PATCH 复用不重发),快速失败不再静默丢告警
- 会话加参与者选择器改用分页拉全量的 fetchWorkspaceRosterMembers,>100人工作区不再静默截断
- 预算策略行保存成功后同步刷新版本号 pill

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 桌面回收站英文界面套用 restoreBlockedReasonEn 映射(导出共享),不再泄漏中文原值
- 撤销失败后保持武装态,「点此重试」单击即真重试(带超时回 idle)
- live-runtime 同 URL 复用比较 key/eventTypes,不一致重建流,消除旧闭包陷阱
- 桌面 Cuu 流退避计数改在真收到数据后清零,accept-即断服务端正常指数退避

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Suspend 等令牌分支补 select! 兜底轮询,notify_waiters 丢失唤醒不再永久卡死推流
- urgency/fallback 文案补 proposal.merged(对齐 webview 打扰策略分类)
- route_for_notification 畸形 ID 优雅降级到兜底路由,不再断整条 SSE 连接

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
主动性 intent 投递/恢复已改 DB 级原子领取(R21 批A),从单实例假设中摘除并留对照注记。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mycyg
mycyg merged commit 95a2f7d into main Aug 4, 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