Skip to content

feat(core): #1662 车道 B Git 写入下沉(GIT-21/22) - #1755

Merged
1lck merged 3 commits into
previewfrom
feat/issue-1662-b-git-writes
Nov 5, 2026
Merged

1lck merged 3 commits into
previewfrom
feat/issue-1662-b-git-writes

Conversation

@1lck

@1lck 1lck commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

引用 #1662(车道 B:Git 写入)。完成 GIT-21、GIT-22;GIT-20 已在 #1688/#1690 完成,本 PR 在其基础上做。

改动

  • 新 Core 命令:git.planDiffBlocks、git.applyDiffBlock、git.stageGutterChange(rust/lithe-core/src/git/diff_blocks.rs)。Core 读取 HEAD→worktree 与 HEAD→index 两份完整文件 diff,计算块 ID、checked / indeterminate、暂存造成的坐标偏移、include / exclude / rollback 三类 patch 并自己持有;返回内容不含 patch 文本,只含块描述和快照令牌 token。
  • 写入安全边界:git.applyDiffBlock 在仓库写锁内重新规划,令牌不一致返回 GIT_DIFF_BLOCK_STALE;git.stageGutterChange 复核索引与已保存文件仍显示编辑器比较过的行,否则返回 GIT_GUTTER_CHANGE_STALE。均保留快照校验,没有放宽。
  • GIT-22:回滚(git.applyDiffBlock 的 rollback 与 git.apply 的 discard 模式)在写锁内用 git check-attr 复核 filter / working-tree-encoding,不安全时返回 GIT_HUNK_ROLLBACK_UNSAFE。git.apply 删除 unidiffZero 参数(--unidiff-zero 不再使用),回滚始终带上下文并由 git apply 校验。
  • 完整文件 hunk:git.diff(includeFileSections + 完整上下文)由 Core 拆成 Git 默认 3 行上下文的 hunk,每个 hunk 带字节保真 patch 和 lineStart / lineEnd;无法拆分时不提供可写 hunk(fail closed)。
  • Windows 删除旧实现(无双写 / fallback):commit-diff-blocks.ts 的块规划、lossy-rollback-attrs.ts(自拼 check-attr)、lossy-rollback-patch.ts(U0 patch 切片)、gitGutterChangeHunk(gutter patch 拼接)、git-diff-api.ts 的 writePatch / 原始 patch 重读 / isWorktreeWritePatchCurrent,以及 Tauri host platform.rs 的 hunk_patch 重建。hunk 写入只接受 Core 返回的 rawPatch。
  • Windows 接入:新增 git-diff-block-api.ts;commit-diff-review 改为读 Core 计划、按 blockId + action + token 写入;gutter 暂存改调 git.stageGutterChange;core-result-adapter 适配 git.planDiffBlocks 并透传 hunk 行范围;monaco-diff-rows 使用 Core 的 hunk 范围与 patch。
  • 文档 / 矩阵:shared/contracts/rust-core-api.md 追加三个命令与错误码;shared/fixtures/git/diff-blocks-v1.json 新增共享 fixture;功能矩阵 editor-git-gutter-stage / git-diff-review / git-status-commit 的证据路径更新。

整文件写入与回滚不安全提示

  • git.applyDiffBlock 新增 includeFile / excludeFile(blockId 可选):整文件暂存/取消暂存同样带 token,在写锁内重新规划,不一致返回 GIT_DIFF_BLOCK_STALE。校验只在 Core,Windows 不再保留 TS 快照比对。fixture 新增 wholeFileWriteCases,Rust 测试 whole_file_inclusion_is_bound_to_the_planned_token。
  • 新增词条 git.diff.rollbackUnsafe(中英),块评审和 hunk 回滚遇到 GIT_HUNK_ROLLBACK_UNSAFE 时显示这一具体原因,不再是通用写入失败。

两端行为变化

  • Windows:含 CR 的文件现在也可以按块暂存 / 取消暂存(此前仅整文件),因为 patch 由 Core 保留原始字节;filter / working-tree-encoding 文件仍禁止块回滚,回滚被拒绝时显示专门的不安全提示。块写入遇到文件已变化时显示原有的过期提示。
  • macOS:无代码改动(本来就直接消费 Core hunk,也没有块评审 / gutter 暂存入口)。受益于 git.apply discard 在 Core 内复核属性;被拒绝时 GIT_HUNK_ROLLBACK_UNSAFE 作为错误信息返回。

验证

通过:

  • cargo test --lib git(395 passed,含 git_diff_blocks 10 项:fixture、真实 Git 的 include / exclude / rollback、CRLF 字节往返、eol / filter 属性、写前文件变化被拒)
  • verify-rust-core-comments.sh、verify-shared-contracts.sh、verify-service-boundaries.sh、verify-core.sh、verify-windows-boundaries.sh、verify-platform-feature-matrix.sh
  • i18n --check 与 app-language 检查(新增 git.diff.rollbackUnsafe)
  • Windows tsc --noEmit(仅 frontend/editor 既有的 textmate 依赖缺失错误);相关 bun 测试逐文件通过(monaco-diff-hunk-actions、monaco-diff-rows、commit-diff-review、use-commit-diff-review、git-gutter-changes、core-result-adapter.* 等)

未通过 / 未执行:

  • verify-rust-core.sh:失败于 cargo fmt --check,涉及 build_systems.rs、declarative_plugins.rs、marketplace_plugins.rs、plugin_editor_resources.rs 的既有格式问题,非本 PR 文件;本 PR 的 diff_blocks.rs / git_diff_blocks.rs 已格式化。
  • cargo check --bin lithe-windows 在 macOS 主机上只出现 std::os::windows / as_raw_handle 两个既有平台错误,无新增;platform.rs 的 Rust 测试因此无法在本机编译,需看 Windows CI。
  • test-macos.sh 未执行(本机非 macOS 构建环境,macOS 无代码改动);未做 Windows / macOS 实机验证。

🤖 Generated with Claude Code

@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 5, 2026
1lck and others added 3 commits November 5, 2026 01:16
- Core 新增 git.planDiffBlocks / git.applyDiffBlock / git.stageGutterChange:由 Core 计划提交评审块、持有 include/exclude/rollback patch,并在仓库写锁内校验快照令牌后写入
- 完整文件 diff 的 hunk 由 Core 按 Git 默认上下文拆分,并返回逐 hunk 字节保真 patch 与 lineStart/lineEnd
- git.apply discard 在写锁内检查 filter 与 working-tree-encoding,删除 unidiffZero 参数
- Windows 删除 TS 侧块规划、gutter patch 拼接、check-attr 与 U0 patch 切片,以及 Tauri host 的 hunk_patch 重建
- 新增共享 fixture 与 Core 集成测试,更新功能矩阵与 rust-core-api 契约

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- git.applyDiffBlock 新增 includeFile / excludeFile,blockId 可选;写锁内重新规划,令牌不一致返回 GIT_DIFF_BLOCK_STALE,校验统一在 Core,不恢复 TS 快照比对
- Windows 整文件暂存/取消暂存改走 Core 令牌写入
- 新增 git.diff.rollbackUnsafe 中英文案,块评审与 hunk 回滚遇 GIT_HUNK_ROLLBACK_UNSAFE 时显示该原因
- 共享 fixture 增加 wholeFileWriteCases,补 Rust 与 Windows 测试

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@1lck

1lck commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

本地验证(代替 GitHub macOS / Windows CI)

本 PR 与 #1760、#1755、#1753、#1759、#1756、#1758、#1757 一起,在本地集成分支 integration/issue-1662-round1 上按合并顺序集成后,按 ci-macos.yml / ci-windows.yml 的步骤在维护者的 Mac 和 Windows 机器上完整验证,未使用 GitHub 的 macOS / Windows runner。

macOS(本机,macOS 26.6 arm64)

Windows(lithe-dev,Windows Server)

  • 通过:依赖安装、verify-windows-boundaries.ps1、共享编辑器测试、PHP 插件构建与隔离验证、ci-windows.yml 中各组 bun 测试、dist 验证、Rust 测试(shared、shared-hosts、MCP stdio、agent-host、git-host、ide-host、project、terminal、windows)。
  • 发现并已修复的回归(均为测试替身未跟上新的 Core 契约,生产代码无回归):bun run typecheck 3 个 TS 错误与 3 个 agent 测试文件(feat(core): #1662 车道 F Agent/AI 下沉(AGT-03/04/07~09/11~13/18) #1757)、git-workspace-status-panel.test.tsx(feat(core): #1662 车道 A Git 流程下沉(GIT-24/25/28/29) #1753)。
  • lithe-windows memory::platform::tests::current_process_private_working_set_is_available 失败,干净 preview 基线同样失败,属于该 Windows Server 环境的既有问题。
  • 跳过:real-jdt(机器无 JDK 21/25 与 Maven)、需要 GPU 或交互桌面的 GUI 验证、GitHub 专属的缓存/上传/gate 步骤。

合并前每个 PR 已 rebase 到最新 preview,并重新执行编译、i18n、verify-core、verify-shared-contracts 等快速检查。

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