Skip to content

fix(plugins): 插件的测试、功能矩阵和翻译只在插件仓库,宿主零依赖 - #1915

Merged
xiaoyumuxi merged 1 commit into
previewfrom
docs/plugin-owned-tests-matrix-i18n
Nov 14, 2026
Merged

xiaoyumuxi merged 1 commit into
previewfrom
docs/plugin-owned-tests-matrix-i18n

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进
  • fix:缺陷修复
  • docs:文档、Agent Note、Skill 等规则文件
  • release:稳定版发布准备

改动说明 / What changes

背景 / Why

Java Support、Maven、Gradle、Cargo、LLDB 等插件已拆到独立仓库,宿主仓库里却还留着它们的内容:

  • 测试:13 个测试文件(20 个测试函数)读取 LITHE_JAVA_PLUGIN_PACKAGE、LITHE_RAW_CARGO_PLUGIN_ARCHIVE 等环境变量指向的真实插件包或插件仓库检出,没设置就跳过。CI 从不设置这些变量,所以它们在 CI 里一次都没跑过;本地结果又取决于开发者手里的插件版本。几个单元测试还拿真实插件 ID io.github.lithe-idea.* 当测试数据。
  • 功能矩阵:35 条条目只描述插件能力(Java 调试、Spring 索引、Gradle 导入、Cargo 构建等),51 条宿主条目的证据或说明引用了插件测试、插件包或插件仓库,metadata.json 还有 plugin-provided 状态。插件发版时宿主矩阵收不到通知,这些记录只会越来越旧。
  • 资源说明:资源复用清单、下载缓存校验和 docs/ci-builds.md 仍登记 JDT LS、JDK、JFR 录制、JDT Maven settings 副本等插件资源,以及 Java 反编译补丁和 Cargo、Go、PHP 插件的构建步骤。
  • 翻译:宿主词条写进了插件专属说法,例如构建配置权限的说明写着“读取并修改项目的 Java、Maven 与构建选项”。实际上这个权限只控制 Core 的 lithe_build_configure(设置一个已声明的构建选项)。

本 PR 把规则写成强制要求:具体插件的代码、测试(含端到端测试)、测试夹具、功能矩阵、翻译和构建资源说明只在插件自己的仓库;宿主和 Core 对任何具体插件零依赖。同时清理现存的违规内容。

改动 / Changes

规则(Skill、PR 模板、Agent Note)

  • develop-lithe:
    • 原则从七条改为八条,新增第 8 条“插件归属”。
    • 新增“插件归属与宿主零依赖”一节,内容包括:插件专属内容和合成插件的定义;8 条规则;提交前必须为空的 rg 自查命令;自查命令覆盖不到的情况。
    • 归属表补上插件仓库和 shared/ 两行。
    • i18n 一节说明插件文案由插件包的 l10n/<语言>.json 自己翻译;第十节说明宿主矩阵只记宿主能力和通用扩展点;最终交付检查加上插件归属。
    • 修正日志参考页路径:shared/logging/events 改为 rust/logging/events,references/logging.md 同步。
  • create-lithe-plugin:
    • 新增原则第 8 条“只在插件仓库”。
    • 步骤重新编号,新增“翻译”(第 6 步)、“测试”(第 8 步)、“插件自己的功能矩阵”(第 9 步);验收项和交付报告同步补充。
    • 删除已不存在的 Plugins/mac/README.md 引用,日志路径改为 rust/logging。
  • lithe-code-review:
    • review-policy.md 新增第 18 项检查、验证表一行,以及“插件归属与宿主零依赖”一节,违规按 P1 阻塞处理。
    • local-review.md 要求每次审查都读这一节并运行自查命令。
    • output-template.md 的范围说明增加“插件归属”一行。
    • SKILL.md 更新描述和链接。
  • write-stable-tests:新增“Plugins in host tests”一节,宿主测试只用合成插件(dev.lithe.test.<名称>)、Core 契约 fixture 和插件市场索引快照。
  • .github/pull_request_template.md:新增“插件归属 / Plugin ownership”检查组(5 项);功能矩阵和 i18n 两组的说明同步。
  • 新 Agent Note .agents/notes/implemented/architecture/2026-11-14-plugin-owned-tests-matrix-i18n.md 记录决策、被否方案(环境变量开关、子模块或 CI 下载插件包、保留 plugin-provided、宿主代维护插件词条)和后果。
  • 15 个历史 Note 中引用已删测试、矩阵条目和资源排除项的地方,加删除线或注明“已随插件归属规则移出宿主”,原有上下文保留。跨平台矩阵 Note 删除了 plugin-provided 状态的说明。

测试

  • 删除 13 个依赖真实插件的测试文件:
    • pluginservice/javae2e_test.go、javamanifest_test.go
    • projectgen/maven_integration_test.go
    • workbench/debug_native_e2e_test.go、java_binary_e2e_test.go、java_gradle_e2e_test.go、java_legacy_e2e_test.go、java_performance_e2e_test.go、java_plugin_e2e_test.go、java_unmanaged_e2e_test.go、java_web_e2e_test.go、official_cargo_test.go、official_plugins_e2e_test.go
  • 单元测试里的真实插件 ID 改为合成 ID dev.lithe.test.sample:core/marketplace_test.go、plugininstall_test.go、pluginpkg/extract_test.go、pluginpkg/install_test.go、plugintrust_test.go、workbench/editoractions_test.go。

功能矩阵

  • 删除 35 条插件能力条目:build-provider-jvm-debug、cargo-build-plugin、database-(6 条)、debug-java-runtime、docker-compose、editor-ide-settings-import、go-support-plugin、java-(13 条)、maven-user-settings-editing、mybatis-navigation、php-optional-plugin、php-run-test、run-java-long-classpath、run-java-test、spring-*(3 条)、windows-java-new-menu。
  • 修改 51 条宿主条目:去掉引用插件测试、插件包、插件仓库或具体插件名的证据和说明,改用通用说法,主要涉及 verification(46)、notes(15)、evidence(13)、capability/area/owner。没有改动任何 implementationStatus 或 verificationStatus。其中 11 条的 legacy.notes/legacy.verification 也去掉了具体插件名。
  • metadata.json 删除 plugin-provided 状态。
  • 与 feat(plugins): 同一语言只由一个已启用插件提供语言服务器 #1910 的冲突:feat(plugins): 同一语言只由一个已启用插件提供语言服务器 #1910 在 plugin-extension-management.json 写入的“同一语言只由一个已启用插件提供语言服务器”验收步骤保留,示例插件名改为插件 A、B;Store 收录进度(Lithe-store#62、fix: improve Git log performance and graph lanes #63)删除,这属于插件的发布状态。

资源与构建文档

界面文案

  • desktop.ideApi.allowConfigureHelp:
    • 中文从“允许客户端读取并修改项目的 Java、Maven 与构建选项。”改为“允许客户端修改项目的构建选项。”
    • 英文从 “Lets the client read and change the project's Java, Maven and build options.” 改为 “Lets the client change the project's build options.”
    • 已重新生成 desktop/internal/i18n/shared.generated.go。

不在本 PR 范围内 / Out of scope


类型专属:fix

复现与根因

检查项

  • 已先写回归测试,确认它在修复前失败、修复后通过;测试路径与修复前的失败输出:回归测试就是 scripts/resources/test-verify-download-cache.mjs 本身,修复前的失败输出见上文 ENOENT,修复后输出 “Download cache verifier tests passed.”;插件归属的回归防护是 develop-lithe 自查命令,本 PR 修复后结果为空
  • [N/A] 无法自动化时,已写明手动复现与验证步骤:全部可自动验证
  • 已搜索被修改函数、类型、契约字段的全部调用方(含另一平台、插件、SDK、脚本和按字符串分发的调用):删除测试后 go vet 和全部相关包编译、测试通过,没有遗留辅助函数引用;已在 .agents/、docs/、shared/、scripts/ 中搜索被删测试名、矩阵 ID 和资源 ID,引用处已改为删除线或注明
  • 已检查另一平台是否有同类缺陷(有则本 PR 一并修复,或已提交 Issue):Viva 两端共用 desktop/ 的同一份代码和测试,没有单独的 Windows 实现
  • [N/A] 只改了修复所需的代码,没有夹带重构;修复过程中发现的其他问题已提交 Issue:按维护者要求,清理过程中顺手能修的过时内容在本 PR 一并修掉(日志参考页路径、Plugins/mac/README.md 引用、Epic(0.7.0): 基于 Viva 框架的跨平台方案的迁移(#1794) #1799 后残留的旧客户端断言);发现了但没有处理的旧客户端 i18n 词条见“不在本 PR 范围内”
  • 修复改变了行为约束或容易复发,已在 .agents/notes/implemented/bug-fix/ 记录:这是长期的归属规则而不是单个缺陷,Note 放在 .agents/notes/implemented/architecture/2026-11-14-plugin-owned-tests-matrix-i18n.md

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/<id>.json:两端的实现状态和验证状态、证据路径、owner、验证动作都如实填写;没有运行验证的保持 pending:删除 35 条插件条目,51 条宿主条目只改证据和说明文字,没有改任何状态
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh;改了平台实现路径的,还运行了 ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的,理由:本 PR 更新了矩阵

插件归属 / Plugin ownership

  • 已在仓库根目录运行 develop-lithe 第三节“插件归属与宿主零依赖”的自查命令,结果为空
  • 新增或修改的测试只使用测试内联的合成插件、Core 契约 fixture 或插件市场索引快照;没有读取具体插件的插件包、仓库检出、构建产物或清单,没有使用真实插件 ID,没有“缺少插件时跳过”的测试
  • 没有为具体插件提供的能力新建或更新宿主功能矩阵条目;宿主条目的证据和验证动作不引用插件的测试、插件包或插件仓库
  • 插件文案没有写进 shared/i18n/;插件的构建步骤、资源路径和补丁没有写进 scripts/resources/、docs/ci-builds.md、Agent Note 或 Skill
  • [N/A] 修改了通用扩展点、可能影响已发布插件的,已在受影响插件的仓库运行它的测试:没有修改任何扩展点或宿主行为,只删除和改写了测试与文档

统一日志系统 / Structured logging

N/A:没有新增或改动日志事件、终态或失败路径。只修正了 Skill 里日志参考页的路径。

界面文案 / i18n

  • 宿主文案都走共享 i18n:在 shared/i18n/ 补齐中英词条,运行 node scripts/i18n/generate-i18n.mjs 并提交生成结果,没有手改生成文件;Viva 代码通过 desktop/internal/i18n/ 的接口读取
  • 插件提供的文字(清单标题和说明、插件界面、插件后端消息)由插件自己翻译,没有写进 shared/i18n/
  • 已运行 node scripts/i18n/verify-app-language-localization.mjs 和 node scripts/i18n/generate-i18n.mjs --check,没有放宽脚本或扩大豁免名单

逻辑归属 / Logic placement

N/A:没有新增或修改业务逻辑。

性能与内存 / Performance and memory

N/A:没有改动运行时代码。

设置 / Settings

N/A:只改了一条权限说明的文字,设置项、默认值和读写行为都没变。

插件契约 / Plugin contract

N/A:没有改契约、能力版本、插件函数协议或宿主方法。

发行包与资源 / Bundle and resources

  • 运行时不向已安装的 app bundle 或 Windows 安装目录写入;新增的资源路径已说明生命周期、所有权和可写位置,并运行 ./scripts/desktop/verify/verify-runtime-bundle-immutability.sh:没有新增资源路径,已运行
  • 新增或修改宿主自身的下载、解压、生成或缓存资源的,已同步 scripts/resources/worktree-resources.json、scripts/resources/reuse-worktree-resources.mjs 的校验路由、对应测试和 docs/ci-builds.md“独立工作树的本地编译”一节:删除的插件资源在这四处同步删除

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

  • 本次改动导致变成无用的代码已在本 PR 删除:插件资源的校验路由、复用条目和对应断言已删除
  • [N/A] 本次之前就存在的无用代码或可重构之处,已提交带 refactor 标签的 Issue,没有在本 PR 顺手处理:按维护者要求,顺手能修的过时内容当次修掉,不逐条建单;不在本次处理范围的旧客户端 i18n 词条见“不在本 PR 范围内”

验证 / Verification

命令或操作 平台 结果
rg -n -i 'io\.github\.lithe-idea\.|lithe-idea/lithe-plugin-|PLUGIN_(ARCHIVE|MANIFEST|PACKAGE)\b|"plugin-provided"' desktop scripts shared .github docs/ci-builds.md -g '!desktop/internal/core/testdata/marketplace/**' macOS arm64 输出为空
./scripts/desktop/desktop-go.sh vet 与 test -count=1 覆盖 core、plugininstall、pluginpkg、plugintrust、workbench、pluginservice、projectgen、pluginmanager、pluginsettings、settingswindow、i18n macOS arm64 vet 通过;11 个包全部 ok(rebase 到 b582e206a 后重跑)
./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh macOS arm64 validated 189 platform capabilities
./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD macOS arm64 通过
./scripts/agent-notes/verify-agent-notes.sh macOS arm64 224 个 Note 通过
node scripts/i18n/generate-i18n.mjs --check macOS arm64 中英各 11126/11126
node scripts/i18n/verify-app-language-localization.mjs macOS arm64 通过
node --test scripts/resources/test-reuse-worktree-resources.mjs macOS arm64 32/32 通过
node scripts/resources/test-verify-download-cache.mjs macOS arm64 修复前:ENOENT 退出 1;修复后:通过
./scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS arm64 通过
./.agents/skills/write-stable-tests/scripts/verify-test-stability.sh macOS arm64 通过
make -C desktop fmt-check macOS arm64 通过
node --test scripts/i18n/test-i18n.mjs macOS arm64 41/41 通过

未能执行的检查和原因:

  • Windows:没有在 Windows 上运行。改动只涉及删除测试、文档、共享数据和一条文案;Draft 阶段只跑 desktop-ci.yml 的 Linux 检查(含 Linux 上的 vet 和测试),macOS、Windows 两条要等标记 ready 后才运行。
  • 没有启动应用核对修改后的权限说明文案(IDE API 设置页),文字来自 i18n 生成结果,已通过 i18n 检查。
  • 被删测试对应的真实插件流程没有在插件仓库里运行,覆盖情况由插件维护者确认。

提交前确认 / Final checks

  • 分支从最新的 preview 创建;目标分支:feat、fix、docs 为 preview,release 以发布流程要求为准(已 rebase 到 b582e206a)
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交 .build/、target/、dist/、.artifacts/ 等产物,没有凭据、个人路径和未脱敏的日志或截图
  • 本次构建、测试或预览启动的 Lithe 应用和子进程已全部关闭,没有进程残留(本次没有启动 Lithe 应用)

- develop-lithe 新增“插件归属与宿主零依赖”一节和自查命令;create-lithe-plugin、
  lithe-code-review、write-stable-tests 与 PR 模板同步改写,违反即 P1 阻断
- 删除 13 个依赖真实插件的宿主测试文件,单元测试改用 dev.lithe.test.sample
- 删除 35 条插件能力矩阵条目和 plugin-provided 状态,51 条宿主条目去掉插件证据
- 资源复用清单、下载缓存校验和 docs/ci-builds.md 移除 JDT LS、JDK、JFR、Maven
  等插件资源;修复 test-verify-download-cache 读取已删除 Windows 工作流的问题
- 构建配置权限说明去掉 Java、Maven 字样
- 新增 Agent Note 记录决策,历史 Note 中的已删引用加删除线或注明
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant