Skip to content

refactor(desktop): 应用契约与 fixture 只在 Rust Core,删除 shared/contracts 与 shared/fixtures 副本 - #1861

Merged
xiaoyumuxi merged 1 commit into
previewfrom
refactor/1853-contracts-from-core
Nov 13, 2026
Merged

xiaoyumuxi merged 1 commit into
previewfrom
refactor/1853-contracts-from-core

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Collaborator

关联 Issue / Linked issue

PR 类型 / Type

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

改动说明 / What changes

背景 / Why

应用契约和 fixture 在两个仓库各有一份:Core 的 rust/contracts/、rust/fixtures/ 由 Core 代码和测试读取;本仓库的 shared/contracts/、shared/fixtures/ 由桌面 Go 测试按 ../../../shared/fixtures/... 读取。两份没有同步机制,已经分叉:

  • Core#19 迁移契约时,rust-core-api.md 少了命令总表和 AI configuration 章节,本仓库的副本里还在(已由 Core#24 补回)。
  • Core#18、[Bug] 左侧Git提交文件无法全选 #19、fix:修复左侧Git提交文件无法全选问题 #23 删除 Agent、MCP、Java/Maven/JDT 命令后,Core 删了对应的 fixture,本仓库还留着 shared/fixtures/agent/、lsp/java-*.json、maven/、phpunit-project/ 等没有读者的副本。
  • 桌面测试读本仓库的副本,链接的却是 Core 的代码,两者可能来自不同时间点,测试照样通过。

本 PR 让 Core 成为唯一来源:删除本仓库的副本,桌面测试改读所链接的 Core 检出。

改动 / Changes

测试读取 Core 的 fixture

  • desktop/internal/contractfixture/contractfixture.go:新增 CoreFixtureEnvironmentVariable(LITHE_CORE_FIXTURE_DIR)和 CoreFixture(rel)。它和已有的 Path 共用 join,变量没设置时 panic,提示通过 desktop-go.sh 运行。
  • scripts/desktop/desktop-go.sh:在 LITHE_PLUGIN_CONTRACT_DIR 之后导出 LITHE_CORE_FIXTURE_DIR=<Core 检出>/rust/fixtures,两者来自同一份检出。
  • desktop/internal/{core,pluginservice,pluginsettings,settingswindow,workbench} 下 37 个测试文件(加上下一条的 ai_generation_test.go 共 38 个):os.ReadFile("../../../shared/fixtures/X") 和 filepath.Join("..", "..", "..", "shared", "fixtures", …) 改为 contractfixture.CoreFixture("X"),去掉不再使用的 path/filepath 导入。
  • desktop/internal/core/ai_generation_test.go:readSharedJSON 改名为 readCoreFixtureJSON,改从 Core 读取。
  • 生产代码只改注释:githubapi/transport.go、githubapi/types.go、core/ai_pull_request.go、core/github_checkout.go、core/history.go、core/ai_generation.go、core/github.go、workbench/build.go、workbench/aicommit_http.go,以及 core/plugin_diagnostics_test.go、core/gitconsole_test.go 里指向 shared/(contracts|fixtures)/ 的注释,都改成 Lithe-core-rust rust/(contracts|fixtures)/。每个路径都已核对在 Core 中存在。

删除副本

  • git rm -r shared/contracts shared/fixtures:删除 28 个契约文件和 295 个 fixture 文件(含 phpunit-project/)。
  • i18n 生成器的格式样例只给本仓库的 scripts/i18n/test-i18n.mjs 使用,Core 不读取,所以 shared/fixtures/i18n/ 移到 shared/i18n/fixtures/。test-i18n.mjs 的两处路径和 shared/i18n/README.md 同步修改。
  • .gitignore:去掉 !/shared/contracts/、!/shared/fixtures/,现在只放行 shared/i18n/ 和 shared/platform-feature-matrix/。从旧分支切过来时留在磁盘上的副本不会出现在 git status 里。

固定修订

资源复用清单

  • scripts/resources/worktree-resources.json:删除 phpunit-fixture 的排除条目(目录已不存在)。
  • docs/ci-builds.md:删除“PHPUnit 测试夹具的 shared/fixtures/phpunit-project/vendor 也由当前工作树独立安装”这句。

功能矩阵

  • 17 个能力 JSON 删除了当前证据中 44 条指向 shared/contracts、shared/fixtures 的路径。当前证据必须是本仓库里存在的路径,Core 里的文件无法在这里校验。删除后每个条目仍有其他证据。
  • debug-disassembly、debug-state、plugin-debug-adapters、run-java-test 的 verification 文字改成“Core 的 rust/(contracts|fixtures)/”。
  • legacy.* 证据固定在旧修订,不校验,保持原样。
  • verify-platform-feature-matrix-change.mjs:platformPaths 去掉 shared/contracts。
  • generate-platform-feature-matrix.mjs 规则 4:改成“新的共享行为先在 Rust Core 仓库的 rust/contracts/ 和 rust/fixtures/ 更新契约与 fixture”。

Agent Note、Skill 和文档

  • 新增 Note .agents/notes/implemented/architecture/2026-11-14-core-app-contracts-single-source.md,记录这次决策、备选方案、后果和引用约定。
  • 80 个 active Note 的引用按统一规则改写。规则在脚本里执行,逐条核对过目标存在:
  • 2026-11-08-viva-repository-ownership-and-sharing-boundaries.md:把“Core 命令的共享契约和夹具位于 shared/”改成只在 Core 维护,并链接新 Note。
  • 2026-11-12-viva-agent-conversation-removed.md、docs/viva-migration.md:补一句,说明剩下的 shared/fixtures/agent/、shared/contracts/agent-turn-policy.json 随本 PR 删除。
  • develop-lithe Skill:
    • 用词表“共享契约”一行说明只在 Core,桌面测试用 contractfixture.CoreFixture;
    • 目录表 shared/ 一行改成 i18n 和功能矩阵;
    • “新的 Core 命令或字段接入前补 fixture”改成在 Core 的 rust/fixtures/ 里补,并升固定修订;
    • 验证表“共享应用行为或 JSON fixture”一行写明 Core 与桌面两侧怎么跑。
  • lithe-code-review/references/local-review.md、docs/development/{document-encoding,windows-ai-commit,macos-plugin-api-plan,windows-plugin-parity-plan}.md:路径和链接改指 Core。

不在本 PR 范围内 / Out of scope


类型专属:fix

复现与根因

检查项

  • [N/A] 已先写回归测试,确认它在修复前失败、修复后通过:没有产品行为变化。测试改为读 Core 检出后,全部桌面测试在 Core main 上运行通过(见验证)。
  • 无法自动化时,已写明手动复现与验证步骤:见上面的复现说明;git ls-files shared/contracts shared/fixtures 输出为空。
  • 已搜索被修改函数、类型、契约字段的全部调用方:用 git grep 搜索全仓库 shared/contracts、shared/fixtures 和 "shared", "fixtures" 的引用,覆盖 Go 测试、脚本、资源清单、功能矩阵、Note、Skill 和文档。剩下的只有 archived Note、legacy 矩阵证据、插件契约的历史提及,以及已删除文件的历史正文。
  • [N/A] 已检查另一平台是否有同类缺陷:只有一个 Viva 桌面客户端,读取路径对所有平台相同。
  • 只改了修复所需的代码,没有夹带重构。
  • 修复改变了行为约束:决策记录在 .agents/notes/implemented/architecture/2026-11-14-core-app-contracts-single-source.md(架构决策,不是 bug-fix 分类)。

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 已更新 shared/platform-feature-matrix/features/<id>.json:只删除了无法在本仓库校验的证据路径,并改了 4 处 verification 文字,实现状态和验证状态都没有变。
  • 已运行 ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh(validated 223)和 node --test scripts/platform-feature-matrix/test-platform-feature-matrix.mjs(5/5)。
  • 没有提交 .artifacts/ 下生成的矩阵视图
  • [N/A] 没有更新矩阵的理由:已更新。

统一日志系统 / Structured logging

N/A:没有新增或改动日志事件和失败路径。

界面文案 / i18n

  • [N/A] 文案都走共享 i18n:没有新增界面文案,只移动了生成器测试的格式样例。
  • 已运行 node scripts/i18n/verify-app-language-localization.mjs 和 node scripts/i18n/generate-i18n.mjs --check,另外跑了 node --test scripts/i18n/test-i18n.mjs,确认它读得到移动后的样例。

逻辑归属 / Logic placement

  • 契约和 fixture 只在 Rust Core,平台层没有新增逻辑。
  • [N/A] 修改平台层已有的可共享逻辑:没有修改业务逻辑。
  • [N/A] 工具专属知识:没有涉及。

性能与内存 / Performance and memory

N/A:只改测试读取路径、文档和仓库结构,不影响运行时。

设置 / Settings

N/A:没有改设置。

插件契约 / Plugin contract

N/A:插件契约本来就只在 Core(LITHE_PLUGIN_CONTRACT_DIR 不变)。本 PR 升级固定修订是为了应用 fixture,不涉及插件契约、能力版本或宿主方法。

发行包与资源 / Bundle and resources

  • 运行时不向已安装的 app bundle 或 Windows 安装目录写入:./scripts/desktop/verify/verify-runtime-bundle-immutability.sh 通过。
  • 已同步 scripts/resources/worktree-resources.json(删除 phpunit-fixture 排除条目)和 docs/ci-builds.md;node --test scripts/resources/test-reuse-worktree-resources.mjs 37/37 通过。删除的是测试夹具,路由脚本里没有它的校验分支。

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


验证 / Verification

命令或操作 平台 结果
LITHE_CORE_RUST_DIR=<Core main f113e9e 检出> ./scripts/desktop/check.sh(gofmt、vet、vet -tags dev、go test ./...、buildinfo dev 测试) macOS arm64 exit 0:gofmt、vet 通过,54 个包 ok,0 FAIL
node scripts/desktop/validate-pins.mjs macOS core f113e9e reachable,pins valid
./scripts/agent-notes/verify-agent-notes.sh macOS ok: 220 active Agent Note(s) verified
./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh macOS validated 223 platform capabilities
node --test scripts/platform-feature-matrix/test-platform-feature-matrix.mjs macOS 5 pass / 0 fail
node scripts/i18n/verify-app-language-localization.mjs macOS passed
node scripts/i18n/generate-i18n.mjs --check macOS 通过
node --test --test-timeout=60000 scripts/i18n/test-i18n.mjs macOS 41 pass / 0 fail
node --test scripts/resources/test-reuse-worktree-resources.mjs macOS 37 pass / 0 fail
./scripts/desktop/verify/verify-runtime-bundle-immutability.sh macOS static checks passed
git ls-files shared/contracts shared/fixtures macOS 空

未能执行的检查和原因: 没有在 Windows 和 Linux 本地运行桌面测试。desktop-go.sh 在 Windows 上用 native_path 转换 LITHE_CORE_FIXTURE_DIR,和已有的 LITHE_PLUGIN_CONTRACT_DIR 写法相同;需要 ready 后由 CI 的 Windows、Linux 通道确认。

提交前确认 / Final checks

  • 分支从最新的 preview(36f0dbdb1)创建,目标分支 preview
  • 以 Draft 提交,本地验证通过后才标记 ready
  • 没有无关改动,没有提交产物、凭据、个人路径
  • 没有启动 Lithe 应用;测试进程随命令结束,没有残留

…hared/fixtures 副本 (#1853)

- 桌面测试改用 contractfixture.CoreFixture 读取所链接 Core 检出的 rust/fixtures,
  desktop-go.sh 导出 LITHE_CORE_FIXTURE_DIR
- 删除 shared/contracts(28 个文件)和 shared/fixtures(295 个文件),
  i18n 格式样例移到 shared/i18n/fixtures
- PINNED_CORE_REVISION 升到 Core main f113e9e(含 #23、#24、#25)
- .gitignore 只放行 shared/i18n 和 shared/platform-feature-matrix
- 资源复用清单删除 phpunit-fixture,功能矩阵删除无法本地校验的证据路径
- Note、Skill 和文档的引用改指 Core,新增 Note 记录决策
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 13, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 13, 2026 16:43
@xiaoyumuxi
xiaoyumuxi merged commit 540ca9e into preview Nov 13, 2026
4 of 8 checks passed
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