Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
2f8b0d5
feat(plugins): execute native build tasks in workspace providers (#1495)
Mucheen Oct 26, 2026
97783bb
Merge commit 'd369c9ab2f4385c1ac595aa46a9a5d2884709642' into codex/is…
Mucheen Oct 27, 2026
3e21778
feat(plugins): discover and execute native provider tests (#1495)
Mucheen Oct 27, 2026
ee0bdd5
Merge commit '32021a86f0c6c4ad2964dbbe3c2bb7854d84ad67' into codex/is…
Mucheen Oct 27, 2026
7e833e9
Merge preview baseline for provider run preparation
Mucheen Oct 27, 2026
0545723
feat(plugins): prepare and persist provider application runs (#1495)
Mucheen Oct 27, 2026
215f67d
feat(plugins): prepare native provider debug sessions (#1495)
Mucheen Oct 27, 2026
58ca81c
feat(plugins): share read-only provider model inputs (#1495)
Mucheen Oct 27, 2026
be5a105
Merge preview and verify native Provider workflows (#1495)
Mucheen Oct 27, 2026
0eca520
Merge preview TCP debugging while preserving Provider identities (#1495)
Mucheen Oct 28, 2026
9f702e1
fix(build): isolate producer revisions and own run saves
Mucheen Oct 28, 2026
1fe1e37
refactor(macos): route Agent builds through providers (#1495)
Mucheen Oct 28, 2026
ef72a23
refactor(macos): remove legacy Maven dependency consumers (#1495)
Mucheen Oct 28, 2026
a2bcb93
refactor(macos): read project toolchains from canonical storage (#1495)
Mucheen Oct 28, 2026
2b1ec72
feat(build): edit native configuration through provider facts (#1495)
Mucheen Oct 28, 2026
92668f5
feat(build): preserve independent options for each build root
Mucheen Oct 28, 2026
3f65dca
fix(runtime): migrate subproject tool paths to the canonical document
Mucheen Oct 28, 2026
26b8633
feat(build): resolve canonical toolchains and preserve provider runti…
Mucheen Oct 28, 2026
8214313
feat(build): preserve team preferences with sparse local overrides
Mucheen Oct 28, 2026
664e2ee
refactor(runtime): use provider projects and guard Maven data transfer
Mucheen Oct 28, 2026
27de68e
feat(build): accept provider-owned inline test reports
Mucheen Oct 28, 2026
18ce906
refactor(java): use current build imports for startup and run prepara…
Mucheen Oct 28, 2026
ac24a96
Merge preview and validate Stage D against the updated provider baseline
Mucheen Oct 29, 2026
aa4239e
fix(config): preserve malformed local preference sources
Mucheen Oct 29, 2026
4402742
feat(config): transfer legacy Maven runtime fields to private defaults
Mucheen Oct 29, 2026
acb38cc
feat(ide): expose native workflows and retire Maven Agent wiring
Mucheen Oct 29, 2026
8e399a9
refactor(maven): retire legacy project service and activate guarded c…
Mucheen Oct 29, 2026
7f2dfda
feat(tests): route exact Java Maven tests through the build provider
Mucheen Oct 29, 2026
0ba7928
feat(run): prepare Java resources through declared provider tasks
Mucheen Oct 29, 2026
7b90d7d
merge: integrate preview runtime routing and script layout with Maven…
Mucheen Oct 29, 2026
0266d69
test(java): verify Maven Provider resources through real JDT and JVM
Mucheen Oct 29, 2026
9506888
fix(java): prepare Run and JDT from the same Provider profile
Mucheen Oct 30, 2026
2926e87
feat(java): generate Run ownership from current Provider models
Mucheen Oct 30, 2026
fc0bdce
feat(maven): generate framework services from effective Provider models
Mucheen Oct 30, 2026
b70929c
feat(java): consume compiler requirements from current Provider models
Mucheen Oct 30, 2026
25ef13d
feat(maven): consume native Wrapper facts from Provider models
Mucheen Oct 30, 2026
dbb14a6
fix(run): reject generated configurations from stale Provider models
Mucheen Oct 30, 2026
1e66735
feat(maven): prepare services and module runs through typed Providers
Mucheen Oct 30, 2026
eceb3ac
merge: preserve Maven Provider workflows on preview memory detection
Mucheen Oct 30, 2026
6b35f4d
feat(maven): prepare JVM service debugging through Providers
Mucheen Oct 30, 2026
1a3f838
merge: preserve Provider imports and JVM debugging on shared Java pre…
Mucheen Oct 30, 2026
e7dc8be
docs(maven): record real framework JVM debugging evidence
Mucheen Oct 30, 2026
f70b171
feat(windows): add workspace Build Provider transport ownership
Mucheen Oct 30, 2026
ed10dc4
feat(windows): add current-model Build Provider workflows
Mucheen Oct 30, 2026
69c4dab
feat(windows): read native Build configuration without tool probes
Mucheen Oct 30, 2026
d66d79d
feat(windows): guard native Build configuration writes and readback
Mucheen Oct 30, 2026
b432021
feat(build): share team option validation and wire Windows workspace …
Mucheen Oct 30, 2026
9dbd6b8
feat(windows): edit native Build sources through confirmed workspace …
Mucheen Oct 30, 2026
9a769f5
feat(windows): present scoped Provider tasks and bounded dependency t…
Mucheen Oct 30, 2026
bfcd469
feat(windows): present canonical Build reports and revoke stale file …
Mucheen Oct 31, 2026
e1fa619
feat(windows): observe native Build sources through shared document l…
Mucheen Oct 31, 2026
884e9cc
feat(windows): launch saved Build Provider runs with scoped ownership
Mucheen Oct 31, 2026
611a4be
feat(build): prepare isolated runs with explicit tool selections
Mucheen Oct 31, 2026
efa33a5
docs: record isolated Run verification results
Mucheen Oct 31, 2026
9a81729
feat(windows): save Build targets through guarded Run workflows
Mucheen Oct 31, 2026
32f66d8
fix(build): make configuration edits provider owned and reports generic
Mucheen Oct 31, 2026
2c9454d
fix(debug): route provider service attachment through adapter registry
Mucheen Nov 1, 2026
dbd4f79
fix(run): generate opaque provider configurations from current targets
Mucheen Nov 1, 2026
b5ecdf9
fix(run): persist portable provider launch choices
Mucheen Nov 1, 2026
5a02244
Preserve saved identities when migrating Maven Run v2 configurations
Mucheen Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,42 @@ JDT 直启流程。继承插件的库模块、只有测试入口的模块和入
原问题换成一次不确定的错误运行。JDT 对模块化项目返回的
`module/name.Type` 会转换为 JVM 需要的 `-m module/name.Type`。

### 阶段 D 的 Provider 资源准备

macOS 已把资源步骤切入 Maven Provider 的公开项目任务:先保存文档、等待当前
Build 模型,再按模型中属于目标工程的源码角色选择主资源或主加测试资源任务。
其他工程发布的更深内容目录不能覆盖目标工程的源码角色。工作区通过符号链接
打开而 JDT 返回规范路径时,文件归属判断比较解析链接后的路径;工作区激活身份
仍比较原工作区及代次,不能把另一个打开操作当成当前操作。

Provider 完成后才请求 JDT 构建和运行路径,并把当前准备回执传给 Core,避免
Core 再规划一次资源进程。失败、取消、配置 ABA 或工作区替换均撤销回执。
Windows 现有消费者尚未切换,因此未带回执的共享启动计划继续保留原资源步骤。
这次切换没有新增资源目录、可复用缓存或发行包写入。

真实集成 `real_provider_resources_survive_jdt_build_and_reach_the_project_jvm` 通过
同一个生效 Profile 串起 Maven Provider、打包的 JDT LS 和真实项目 JVM。
场景使用嵌套 reactor、依赖模块及非标准主/测试源码和过滤资源根;在 JDT 导入后
修改资源,再分别启动主源码与测试源码入口,断言实际输出包含新资源和依赖模块值。
全部会话关闭后比较 Maven 插件包与 JDT 安装目录的 SHA-256 清单。
它证明这个明确输入组合可以协作,不能代替完整 UI、每个 Run 覆盖、正式发行组合
或 Windows 实机验收。后续增量已经把单次 Run 的 Profile 接进宿主:资源准备先用同一份已校验选项和工具
重新读取 Provider 模型,再选择源码角色及资源任务,并返回由 `build.languageImport`
产生的原样导入输入。临时模型、Profile 和工具都不写回 Build 默认值,不发布成默认
模型。JDT 冷启动直接使用这些输入;已运行会话原地更新,不能接收 Maven 输入的
旧会话按现有生命周期重启。下次默认入口发现重新应用当前 Build 输入,避免把
上次 Run 的 Profile 留成影子设置。

入口发现本身也等待 Core 的配置屏障(Maven Profile 任务和 JDT 项目配置任务),
而不是先问旧模型、再仅让构建等待。等待有 Java 构建期限和 128 项队列上限;
排队中的取消不写协议请求,超时、停用和关闭都终结对应等待。宿主在共享启动准备操作前后及用户处理构建错误后核对导入代次;导入变化会立即
取消这个操作,配置改回原值也不能恢复旧准备。
异步入口发现和 Java 命令经已有 Core 取消路径撤销单次操作,不停止共享语言服务。
真实 JDT 场景从没有入口的另一组源码根启动,再热切换到本次 Profile,并要求首次
查询直接得到新源码根入口,不能靠重试空列表隐藏配置竞态。

这仍不代表运行配置生成、框架启动规划、正式发行包或 Windows Provider 已迁移。

### 两端共用启动准备操作

Mac 和 Windows 调用同一个 `java.prepareLaunch` 操作,由 Core 串起入口选择、
Expand Down Expand Up @@ -299,6 +335,21 @@ Maven JDK、显式覆盖及资源步骤;#1133 的 Maven 原生资源步骤保

## 验证

2026-10-30 补充验证:Core/集成逐项计时 1398 项全部通过,真实 Profile 热切换→JDT→JVM 场景 14.249 秒;生产 macOS BuildSystemService 与真实 Maven Provider 验证临时 Profile 改变源码角色,宿主确实选择测试资源任务,返回同一导入值,默认模型/选项不变、进程释放且插件包 SHA-256 不变,2.763 秒通过。

- Provider 与真实 JDT/JVM 的新增集成显式设置 `LITHE_JDTLS_SMOKE_MAVEN_PACKAGE`
为开发包或正式包根目录,并同时设置既有 `LITHE_JDTLS_SMOKE_ROOT`、
`LITHE_JDTLS_SMOKE_JAVA`、`LITHE_JDTLS_SMOKE_PROJECT_JDK` 与
`LITHE_JDTLS_SMOKE_MAVEN`。不设置包路径时普通单元车道不启动外部工具;
明确设置后缺少工具或包必须失败,不能降级跳过。
通过 Rust 计时入口运行,真实工具场景沿用专属的 600 秒总预算:
`node .agents/skills/write-stable-tests/scripts/run-rust-tests-with-timing.mjs --manifest rust/lithe-core/Cargo.toml --test-budget lsp::interface::engine::real_jdt_tests::=600000 --report .artifacts/test-stability/stage-d-real-jdt-core.json`。
本机 1395 项通过,其中新增集成 35.983 秒,另两项真实 JDT 为 14.897/11.520 秒。
最后把临时目录所有权提前到首个 fixture 写入前;该场景再次逐项计时通过,含进程清理为 27.751 秒。
- 原生工程归属、链接路径及取消回归:
`./.agents/skills/write-stable-tests/scripts/test-stability-macos.sh -- --filter 'BuildSystemServiceTests|RunWorkflowCoordinatorTests|RunEntryPointTests'`。
本机 130 项计时通过,新增链接路径 3 毫秒,当前工程角色/撤销场景 15 毫秒。

- 资源处理参数与独立子项目兼容:`cargo test --manifest-path rust/Cargo.toml -p lithe-core --lib tests::run_configuration::`。
- macOS 服务会话消费前置步骤的顺序、失败阻止 JVM、Stop 取消和超时期限:
`macos/Tests/LitheExecutionModuleTests/ExecutionModuleTests.swift` 中的
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,61 @@ Windows 会先同步当前编辑文档再请求该操作。两端都不再解析
比对。输入指纹不再对全部 Java 源码做内容哈希(见
`.agents/notes/implemented/bug-fix/2026-09-22-run-panel-fingerprint-loading.md`)。

### 阶段 D 的运行生成归属

macOS 在生成配置前等待当前 Build 模型与导入,随后把模型的项目路径、Maven
reactor 根及该项目的主/测试源码根交给 Core。Core 只校验、选取上游已经发布的
归属,不再沿 Java 源码祖先寻找 POM,也不按 `src/test` 推断已提供模型的源码集。
同一工作区有两个独立 reactor、都含 `app` 和同名 Main 类时,用工作区内完整
模块路径区分配置;同一个 reactor 里原有配置 ID 保持稳定,避免丢失覆盖。原来已被合并成单个 ID 的多 reactor 记录无法确定归属时,旧覆盖由
现有 orphan 诊断保留,不能猜测性地挂到其中一个新配置。

`projectOwnership: []` 是明确的空模型,不能偷偷用 POM 补齐;不传该字段才保留
现有 Windows 消费者的兼容路径。快照未准备好、失效或截断时宿主拒绝生成,
工作区或 Build 代次变化后拒绝旧 JDT 答复。只转交声明 Java 导入的 Provider 模型,
其他构建插件不能凭共享目录占用 Java 项目。Maven 后端现在从生效的
`MavenProject.getBuildPlugins()` 识别框架,包含当前 Profile 和父 POM 继承;
仅放在插件管理(pluginManagement)中的插件不算已经应用。模型通过公开属性
`run.modelVersion` / `run.provider` 发布结果,宿主只投影项目名和服务标识。
Core 收到当前快照后关闭旧 POM 框架检测,只生成与既有配置 ID 一致的服务。
旧插件缺少模型版本时明确要求更新,不能退回宿主解析;后端缓存指纹包含扩展 JAR
字节,更新扩展也会使旧快照失效。Java 编译版本要求也改由 Maven 的执行计划计算器
(`LifecycleExecutionPlanCalculator`)及参数解析器提供:只计算到 `test-compile`,
不执行目标;在克隆的会话里检查所有实际 compiler execution 的 release,或
source/target,包含 Profile、继承、测试专用版本和自定义执行。不可解析时记录
诊断并保持未知,不能再按 POM 属性名猜测。Core 只校验标准化版本并取当前工程的
最高要求;本机 `.java-version` 不得降低已知编译下限。

编译计划接口在 Maven 内部包中,3.6.3 已提供相同签名;扩展仍按 3.6.3 编译,
升级时必须运行最低版本真实集成。已否决宿主正则和独立解析 compiler XML:它们
不能重现 execution 合并和参数默认值。模型使用原有 Maven 本地仓库解析描述符,
不新增缓存目录;状态和下载物不进入插件包,安装文件清单验证保持有效。
Wrapper 的存在和发行版本也由 Maven 后端读取选定 reactor 的原生文件后发布。
Java `Properties` 负责转义和注释语义,分发 URL 仅提取可识别发行文件名;自定义
文件名保持未知。读取有 1 MiB 硬上限,不执行脚本,不导出可能含凭据的完整 URL。
脚本与 properties 都参与后端指纹和宿主同步观察;脚本替换/删除必须撤销缓存。
宿主把脚本投影成工作区相对路径;两个独立 reactor 不共用全局 Wrapper,实际
Run 仍由平台按其 cwd 和工具选择解析。Windows `.cmd` 也参与生成指纹。
这些模型事实继续使用现有仓库、状态与包生命周期,不新增资源目录;Core 收到
快照时不读取 Wrapper 文件补齐。旧 Maven 启动规划仍待迁移,不能据此声称整个生成器已移出 Core。

生成文档还记录模型摘要(`generator.providerFingerprint`)。文件没有改变不代表
Profile 或插件仍然相同,所以检查与启动必须比较当前工程投影,不能只看文件指纹。
项目和源码根排序不影响摘要,工程名、归属、角色、框架及工具要求变化都会使它
过期;老文档缺少摘要时提示重新生成。摘要不含环境值或配置秘密。

macOS 在模型存储提交后发事件,Run 列表异步检查;工作区、生成或模型变化会撤销
旧答复;连续通知只保留一个在途检查和一次待处理读取,不累积后台文件检查。模型未加载、截断或失效时显示等待提示。真正启动前还要同步确认当前模型,
覆盖主 Run、服务单项/批量、Agent 共用入口和 Java Debug 准备,不能把屏幕上的
诊断当作授权。切回原 Profile 可以重新匹配同一份生成文档,但不能让旧异步任务
借 ABA 变化发布结果;操作代次与语义摘要解决的是不同问题。

正确例子:Maven 模型把 `custom-checks` 声明为测试源码,即按测试源码生成配置。
不要因为路径里没有 `test` 就改成主源码,也不要遇到损坏的 POM 就覆盖上游提供的
已验证工程归属。共享 fixture 在损坏 POM 下同时验证两条 reactor、同名类、自定义
源码角色和空模型;Swift 使用真实 Core bridge 验证同一份 fixture。该 fixture 只证明 Core 不解析 POM;
生产宿主仍须在 POM 变化后撤销旧模型,不能借此复用失效快照。

### Spring 服务也必须有已确认的入口

Maven 的 Spring Boot 插件可以由父模块继承;继承到插件的库模块不一定包含
Expand All @@ -112,8 +167,9 @@ JDT 已确认、被分类为 Spring Boot 的非测试入口,Core 才保留服
模块位置从已确认入口的源码集合推导,不依赖编辑器此次上传的文件列表是否完整。

JDT 尚未完成发现时,已有确认入口可沿用上次生成结果;没有上次结果就不虚构
服务。明确返回空入口后移除自动服务。用户主动保存的旧 Maven-goal 配置仍保留
兼容启动路径;这条规则只收紧自动发现。生成器 revision 同步增加,使旧缓存
服务。明确返回空入口后移除自动服务。用户主动保存的 Maven-goal 配置仍保留
原身份与参数;阶段 D 的 macOS 入口重新交给 Provider 准备,Windows 暂时保留
原共享调用。这条规则只收紧自动发现。生成器 revision 同步增加,使旧缓存
不能长期保留误识别的库模块。已有真实服务的 ID 不变,用户覆盖配置仍可关联。

### 不要这样做
Expand Down Expand Up @@ -151,6 +207,43 @@ JDT 尚未完成发现时,已有确认入口可沿用上次生成结果;没

## 验证

- 生成身份增量:1399 项普通 Core 计时通过,源码根排序与归属变化的最终定向
复验也通过;289 项 Swift(含迟到检查的输入/工作区/重置三种顺序、100 次通知
合并为一次后续读取)通过。新异步用例均为 1 毫秒,生产 Swift bridge fixture
42 毫秒,关闭时先移除订阅再停止 Provider,后续 4 项生命周期定向复验通过。
当前源码 SDK E2E 6 项、完整 Rust crates、Core/共享/服务/Windows 边界及最终
C ABI/24 项 Swift bridge 通过。首轮应用早期 AskPass 辅助进程未在 5 秒内连接,
串行复验在相同期限下 4.359 秒通过,没有延长超时。4 项真实 macOS Provider 集成通过;默认 Profile A→B→A 在 POM
不变时使已存生成过期/恢复,7.496 秒。另显式执行 3 项真实 JDT,含 Cargo
进程的计时 26.984/13.763/10.486 秒,验证过滤资源和运行路径仍到达实际 JVM,
退出后安装包清单不变。旧失败计时保留作诊断,后续 complete/native 报告是通过依据。
- Wrapper 增量:1399 项含真实 JDT 的 Core/集成、286 项 Swift、4 项生产
Provider 和完整 Rust/24 项 bridge 通过。共享 Core fixture 21 毫秒验证双根不
共用 Wrapper、单根 Windows 脚本及 `.cmd` 内容变化影响指纹;Swift fixture
33 毫秒。真实 Core→Maven 19 项、缓存 17 项、受控原生 16 项、常规 Maven
16 项通过;Wrapper 原生 properties、脚本缓存撤销和超限文件拒绝 3.739 秒。
后端指纹改为有单文件 64 MiB 上限的流式哈希,避免新增脚本输入触发整文件分配。
最终包再次执行 3 项真实 JDT,含 Cargo 启动的计时为 16.199/8.056/6.940 秒;
退出、安装目录文件清单和进程清理均通过。HTML 由现有有界进程/报告入口生成,
每项命令 600 秒期限,目标测试本身继续使用原有 JDT 操作期限。
- 编译要求增量:1399 项含真实 JDT 的 Core/集成计时、286 项 Swift、4 项生产
Provider 集成和完整 Rust/24 项 bridge 通过。真实 Core→Maven 18 项通过,
编译计划场景 2.964 秒,覆盖 Profile/testRelease、自定义 execution、模块覆盖、
Maven 将缺失表达式视为未设置、非法语言版本保持未知,以及损坏 POM 不改变
已提供要求。Core fixture 19 毫秒,生产 Swift bridge 21 毫秒。
Provider→JDT→JVM 场景 17.038 秒;普通入口与链接工作区分别 10.750/6.433 秒。
- 框架识别增量:1399 项 Core 计时、286 项 Swift、4 项生产 macOS Provider 集成、
C ABI/24 项 bridge 及完整 Rust crates 通过。共享 fixture 经 Core 22 毫秒和
真实 Swift bridge 32 毫秒验证;缺少后端元数据的模型拒绝生成,2 毫秒。
真实 Core→Maven 17 项通过,其中 Profile/继承、仅插件管理及损坏 POM 下的框架
配置生成 2.127 秒;退出后包文件清单不变。该轮普通 Core 计时没有启用真实 JDT,
真实 JDT 的证据仍是下述专用集成记录;不能把早退用例当成新的 JDT 运行证据。
- 2026-10-30 的归属生成增量通过 1399 项 Core/集成计时与 285 项 Swift 回归。
新共享 fixture 的 Core 用例 17 毫秒;Swift 使用生产存储和真实 Core bridge,验证
生成文档的 reactor、模块、同名配置 ID 与源码角色。Windows Cargo 检查与同一
preview 基线保持相同的两项 macOS 平台错误,无新增 Rust 调用类型错误,不代表
Windows 实机通过。当前源码快照的 SDK E2E 6 项通过。

- Rust 单元与契约测试覆盖入口点和测试项的版本化规范化、错误结果、Windows 路径、
Maven 多模块同名类,以及旧生成结果在 JDT 未就绪时的保留。
- 真实 JDT 测试使用 JDK 25 项目验证 `static void main()`、实例 main、紧凑源文件,
Expand Down
Loading