Skip to content

fix(java): 防止乱序进度阻断冷索引动作恢复 - #13

Merged
1lck merged 1 commit into
mainfrom
codex/java-progress-ordering
Nov 14, 2026
Merged

1lck merged 1 commit into
mainfrom
codex/java-progress-ordering

Conversation

@1lck

@1lck 1lck commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

关联 Issue / Linked issue

Refs 1lck/Lithe-IDEA#1832
决策说明:1lck/Lithe-IDEA#1893

PR 类型 / Type

  • fix:缺陷修复

改动说明 / What changes

背景 / Why

并发处理 JDT 进度通知时,完成更新可能先于较早的进行中更新获得锁,已结束任务因此重新变成活动任务。冷索引后的运行动作会一直为空。

改动 / Changes

  • 为每个服务器代际保留最近 128 个完成任务 ID,按完成顺序淘汰;较晚执行的旧进行中通知不重新激活这些任务。
  • 重复完成不推进完成计数,避免它被误认为新的恢复机会。
  • 增加确定性乱序与有界历史回归;三次刷新预算、活动任务上限和已有代际隔离保持不变。
  • 准备未公开的 1.1.3 预发布说明和清单;不移动已推送的 1.1.0–1.1.2 标签,不覆盖发布包。
  • 明确二进制依赖类跳转及 JSP 中 Java 补全、跳转尚未接通。

不在本 PR 范围内 / Out of scope

修复 .class 内容提供者、JSP 语言支持或调大现有超时;本次不宣称整体内存或响应速度提升。

类型专属:fix

复现与根因

  • 完成 build → 晚到的 build 进行中 → index 进行中 → 查询暂时失败 → index 完成。修复前仍认为 build 活跃而不恢复,修复后触发恢复。
  • 引入:b4819dc(fix(java): stabilize Windows launches and cold-index run actions #9)的 active_work 集合不记终态。官方 Rust SDK 65cf823 的通知回调在独立工作线程执行,互斥锁不保证线序。
  • Windows 草稿 1.1.2 实包实测 Gradle 导入与编译完成,但 188.95 秒后动作仍为空;此现象与该竞态一致,单次日志不单独证明其调度顺序。Maven 58.84 秒通过。修复后的 Windows 实包仍需复验。
  • 两个平台共用插件代码,纯回归不依赖平台调度。

检查项

  • 先写回归,在修改生产代码前确认失败:late build update must not block recovery;修复后通过。
  • [N/A] 不需要以手动步骤代替自动化。
  • 已核对 ActionQueryRetry、通知入口、成功重置和服务器/工作区代际的调用方。
  • 两个平台使用同一实现,没有宿主语言特判。
  • 只改本缺陷、测试及待发布版本说明。
  • 原 Note 的补充由主仓库 #1893 配套提交(源码和决策资料分属两仓库)。

范围检查 / Scope checks

功能矩阵 / Feature matrix

N/A:本 PR 在独立插件仓库,不改客户端平台实现;不把尚未验收的原生窗口标记为 verified。

统一日志系统 / Structured logging

沿用 SDK 的 deferred/recovered/exhausted/limit 结构化类别,无新日志接口和输出。重复通知不生成新的恢复事实。高频成功不记 INFO;无自由文本 stderr 或私有数据。宿主旧日志门禁脚本已移除,其等价门禁仍未完成,不记作通过。

界面文案 / i18n

N/A:没有新增运行时界面文案;只改双语预发布说明。

逻辑归属 / Logic placement

JDT 任务终态与恢复属于 Java 插件。宿主、Core 和公共 API 未改;契约及 Rust SDK 仍固定 65cf823,API/能力版本仍为 0。

性能与内存 / Performance and memory

新增每工作区/服务器代际至多 128 个完成 ID(单 ID 由现有入口限制 128 字节),完成顺序淘汰;代际变更重置、上下文消失删除。无新线程、进程、计时器、轮询或跨边界完整数据复制。只扫描固定上限的队列,不宣称整体性能收益。

设置 / Settings

N/A:没有设置变化。

插件契约 / Plugin contract

N/A:不改协议、能力、权限、SDK、宿主方法或通知。

发行包与资源 / Bundle and resources

沿用只读插件包;无新增下载、磁盘资源或可写路径。macOS 重新组装和包验证通过,发布工作流继续先创建草稿,实包验证后才公开。

无用代码与重构 / Dead code and refactoring

无新无用代码;本轮发现的既有宿主校验归属另见主仓库 #1892,不在这里处理。

验证 / Verification

  • 修复前精确乱序回归失败,修复后通过。
  • cargo test --workspace --locked:380 项通过。
  • cargo fmt --all --check、clippy 全 targets -D warnings、SDK lock 校验通过。
  • Rust 逐项计时:19 个 run 回归通过,HTML/JUnit 记录于本地 java-progress-ordering 报告。
  • 测试静态门禁对本插件工作树检查为 0 新违规,未添加豁免。
  • Node 包许可测试 3 项通过;macOS arm64 包重新构建、校验通过。
  • 修复后的 macOS 实包 Gradle/Maven 补全、编译、运行、断点调试通过,分别 36.64 秒与 18.03 秒。

实际发布草稿验证:1.1.3 的 macOS Gradle/Maven 分别 35.88/17.63 秒通过;Windows MSVC 包分别 108.07/54.62 秒通过(x64 工具运行于 ARM Windows VM)。校验了三个平台包的 GitHub digest、SHA 文件和 82 项许可清单,Windows PE 不依赖编译器运行库。原生窗口与全部日志/取消路径仍未完整验收;Windows 追加独立冷启动 93.16 秒通过;VM 已停止,Java 1.1.3 / Gradle 1.0.0 已公开为预发布。

提交前确认 / Final checks

  • 从插件最新 main 创建独立 codex 分支(插件仓库无 preview)。
  • 先 Draft;本地检查通过后 ready。
  • 不提交附件、个人路径、构建产物、诊断包或凭据。
  • Windows 验证会话已结束并确认 VM stopped。

@1lck
1lck marked this pull request as ready for review November 14, 2026 04:21
@1lck
1lck merged commit 6706d3c into main Nov 14, 2026
3 of 4 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