Skip to content

fix(runtime): 修复显示边界、恢复流程与共享会话竞态 - #140

Merged
iamsyc merged 6 commits into
mainfrom
codex/fix-audit-findings
Sep 8, 2026
Merged

iamsyc merged 6 commits into
mainfrom
codex/fix-audit-findings

Conversation

@iamsyc

@iamsyc iamsyc commented Sep 6, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • 统一逐模式 HiDPI 的物理像素边界,创建、保存、Host 描述符和 Runtime 诊断使用同一份已校验尺寸。混合普通/HiDPI 模式及横竖屏组合分别取最大宽、高。
  • 整组重建中某块屏创建失败后,继续恢复其他有效配置;完成拓扑收敛后传播首个错误,保留编辑回滚和取消、重置、删除语义。
  • Relay 发布端编号在进程内递增,断线回调按身份在锁内关闭。旧 DELETE 和交错的旧断线回调不会关闭替换后的发布端。
  • 日志采集用独立线程排空 stdout,最多保留最后 512 KiB,再提取最后 300 行并脱敏;stderr 写入空设备,保留 8 秒超时、进程清理及采集失败仍可导出支持包的行为。
  • Host 握手读写移出协作线程池,避免阻塞超时与取消任务。修正慢预览测试的同步屏障,并让共享启动失败测试通过状态通知等待结果。

Root Cause

原分辨率公式按最大面积模式及全局 HiDPI 放大,且多个入口重复计算。整组恢复遇到首个创建错误就退出。房间局部计数器会复用身份,断线回调的身份检查与资源关闭又分为两步。日志先等待进程退出再读取会写满管道;同步调用方等待共享线程池中的读取任务还会发生线程饥饿。独立读取线程已通过远端堆栈和本地并发回归验证。

Runtime 诊断快照升级到 schema 5。持久化配置格式、Host 通信格式和共享 HTTP/WebSocket 协议保持不变,无新增依赖或兼容层。没有新增应用文案,已核对无需修改本地化资源。

Related Issues

来自本地代码审查,无关联 Issue。

Validation

当前提交:2cba884a2c6cd1213cb4619475cd24f91b9264b2,共 35 个变更文件。

  • 本地静态检查、763 项 Swift 测试、25 项 JavaScript 测试和 2 个 Go 包测试通过。
  • 本机 arm64 Debug 构建、arm64 Release 构建及产物检查通过;所需编译日志零错误、零警告。
  • 20 轮并发稳定性检查通过,含 40 次 Swift 测试执行及 2 个 Go 包的 race 检查。
  • 五个原始缺陷均保留旧实现失败、修复后通过的回归证据。新增日志并发回归在旧实现上挂起并捕获相同等待堆栈,修复后本地及远端均通过;Host 超时与预览测试同步也有单协作线程下的失败和通过证据。
  • 本地完整 UI 尚待环境恢复:完整回归实际执行了 12 项 UI 测试,其中 2 项被系统 Apple 账户登录弹窗遮挡。已保存失败录像,待手动关闭弹窗后复验,未将远端 UI 结果计为本地通过。
  • 最新远端检查已全部结束,必需的 ci-gate 通过:CI 34147132078。8 项成功;dependency-review 与 intel64 Release 按工作流规则跳过。临时堆栈采样已移除,工作流文件与基线一致。

- 统一逐模式 HiDPI 像素边界并同步 Runtime 诊断及事务证据
- 整组重建失败后继续恢复有效屏幕并保留取消与回滚语义
- 使用进程级发布端编号和锁内条件关闭隔离旧会话回调
- 并发有界采集诊断日志并补齐相关回归测试
@github-actions

github-actions Bot commented Sep 6, 2026 •

Copy link
Copy Markdown

CI Summary

Run: Open

Check Status Details
Change Scope ui_code code=true
ui=true
script=false
product=true
test=true
ci=false
release=true
dependency=false
tooling=false
docs_only=false
unknown=false
Required Gates derived static=true
dependency=false
unit=true
xcode=true
ui=true
release=true
Static runs for every PR. Unit, Xcode, UI, and release gates follow the changed paths.
Dependency Review skipped required=false
high and critical vulnerabilities block
Static Checks success required=true
actionlint, shellcheck, shfmt, SwiftFormat, SwiftLint, action pinning
Unit Tests success required=true
Swift tests: 763
Go packages: 2
Reason: passed
Artifact: unit-gate
Xcode Build success required=true
Debug build with zero warning scan
Artifact: xcode-build
UI Smoke success required=true
The PR UI job builds once, runs its selectors serially, and writes aggregate failure classification to ui-smoke-summary.json.
Artifact: ui-smoke-pr
Release Smoke success required=true
arm64=success
intel64=skipped
PR release smoke requires arm64 only.
Artifacts: release-smoke-arm64
Release verify summaries are produced by release.yml before publishing.
Artifacts link Open artifacts
CI Gate success single branch protection check

- 用独立 Dispatch 队列控制阻塞屏障和发布完成信号
- 保留慢消费者不会阻塞后续帧发布的断言
- 补充单协作线程红绿验证并通过完整 Swift 测试
- 在独立 Dispatch 队列执行管道读写,保证超时和取消任务能继续运行
- 按换行读取响应并覆盖跨多个缓冲区的就绪消息
- 通过单协作线程超时回归、完整 Swift 测试和本机 Debug 构建
- 单元门禁持续运行三分钟后采样测试进程并保存诊断附件
- 保留失败状态和原有检查,定位完成后移除临时采样
- 避免同步日志采集等待共享线程池导致死锁
- 添加可控屏障覆盖多命令并发排空大输出
- 移除已完成取证的临时 CI 堆栈采样
- 监听错误提示状态变更,消除固定轮询时限对调度速度的依赖
- 保留测试超时保护、错误内容及共享租约断言
@iamsyc
iamsyc merged commit fed5e2c into main Sep 8, 2026
10 checks passed
@iamsyc
iamsyc deleted the codex/fix-audit-findings branch September 8, 2026 02:13
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