Skip to content

fix(core): 修复索引刷新取消语言服务启动及 Git 排除缓存失效 - #1773

Draft
AACS111 wants to merge 1 commit into
1lck:previewfrom
AACS111:fix/issue-1749-indexing-policy-changed
Draft

AACS111 wants to merge 1 commit into
1lck:previewfrom
AACS111:fix/issue-1749-indexing-policy-changed

Conversation

@AACS111

@AACS111 AACS111 commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

关联 Issue / Linked issue

PR 类型 / Type

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

改动说明 / What changes

背景 / Why

Java 冷启动可能跨越多次目录监听刷新。旧启动检查把扫描代际退休直接当成索引策略变更,使 Maven 导入不断被 Indexing policy changed 取消。逐目录启动 Git 又延长了初始化窗口。

改动 / Changes

  • 按仓库、目录层级批量查询 Git 忽略状态,并以已跟踪后代保护目录;保持嵌套仓库边界与排除树剪枝。
  • 准备过程中仅对代际退休做有上限的重试,保留调用方主动取消。
  • 启动检查保存初始排除集合,在同一配置安装身份、同一策略且新排除集合相等时接续新代际;配置替换、工作区关闭和真实排除变化仍取消启动。
  • 刷新只携带已访问目录名作为批量查询候选,不复制旧排除结论。由 Git 重新核验外部忽略文件、配置 include、worktree 元数据及索引变化。
  • 新建或移除嵌套仓库后重新判断目录归属;重新排除父目录时不发布冗余的子目录排除项。
  • 补充批量遍历、已跟踪内容保护、仓库子目录、接续/取消和两项缓存失效回归;外部规则夹具使用 Git 可识别的 Windows 路径。
  • 更新现有目录索引决策笔记和功能矩阵,原生产品验收状态保持 pending。

不在本 PR 范围内 / Out of scope

不调整界面、插件协议、工具自身配置解析器、测试预算或已有日志检查器。真实 Maven/JDT 冷启动与 macOS 产品验收尚未完成,因此保留 Draft。

类型专属:fix

复现与根因

  • 原问题:Windows 打开较大 Maven 多模块工程,目录事件刷新扫描代际,旧上下文 check() 取消已耗时较长的 Java 启动;期望无实际策略变化时继续启动。
  • 引入相关启动检查的提交:50b4ebe0f(feat(workspace): 支持目录索引排除并统一 Git 设置入口 #1597),已通过 git log -S prepare_provider_exclusions 核对。
  • 本次缓存补修:先准备 Git 排除,再在已排除目录内创建仓库,或修改 core.excludesFile 的内容/来源;旧文件 stamp 无法覆盖这些变化,刷新后仍沿用旧结论。
  • 影响平台:共享 Rust Core,两端共用;问题报告来自 Windows。

检查项

  • 两项新增回归已确认修复前失败;路径:rust/lithe-core/src/project/indexing.rs。嵌套仓库用例失败于刷新后仍有排除项,外部规则用例在修正 Windows 路径夹具后失败于规则修改后仍有排除项。修复后结果见验证表。
  • 已搜索被修改函数、类型的调用方;变更限于 Core 内部接口,没有新增跨语言或插件协议。
  • 已检查另一平台:两端使用同一 Core 实现,无需复制平台修复。
  • 只处理本次索引刷新与缓存缺陷,没有夹带无关重构。
  • 已更新所属现有架构 Note:.agents/notes/implemented/architecture/2026-10-28-workspace-indexing-exclusions.md,避免另建重复决策文档。

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 更新 workspace-indexing-exclusions.json;保留两端真实实现和 pending 验收状态。
  • 功能矩阵校验通过;本次没有平台实现路径变更,平台 change gate 不适用。
  • 没有提交 .artifacts/ 生成视图。
  • [N/A] 矩阵豁免:本次已更新能力记录。

统一日志系统 / Structured logging

  • 复用既有 Core 请求和 Git 子进程轨迹,无新增日志事件、写入器或手工日志入口。
  • 没有新增重复终态、高频 INFO 或源码、凭据、命令输出记录。
  • 日志事件生成检查通过。
  • 全仓日志用法检查未通过:当前 Windows CRLF 检出多处现存问题。两个改动 Rust 文件按同样换行方式比较,未新增违规;engine.rs 基线和当前 CRLF 均有 2 项、LF 均为 0,indexing.rs 均为 0。没有修改检查器或豁免名单。

界面文案 / i18n

N/A:未新增界面或用户文案。

逻辑归属 / Logic placement

  • 确定性策略及生命周期逻辑保留在 Rust Core;没有平台接入或共享协议变化。
  • [N/A] 平台逻辑迁移:本次没有平台逻辑变更。
  • Git 忽略语义交给真实 Git,没有新增工具名特判或第二套配置来源解析器。

性能与内存 / Performance and memory

  • 没有新增运行时、空闲轮询或预启动;候选仅来自已有目录决策,完成核验后清空。
  • 跨刷新只携带目录名;Git/文件系统 I/O 不在策略注册表锁内执行;按仓库批量查询,避免逐目录启动 Git。
  • 未完成真实 Maven 冷启动的改动前后性能/内存基线,不把回归测试耗时当作产品性能验收。

设置 / Settings

N/A:未新增或编辑设置,测试仅在独立临时仓库写 Git 配置。

插件与共享契约 / Plugin and shared contracts

N/A:无公开协议、宿主方法或 SDK 改动。

发行包与资源 / Bundle and resources

N/A:没有产品资源、安装目录写入或构建资源下载变化。运行时 bundle 检查已尝试,但脚本依赖 zsh,在本机 Git Bash 的路径展开处终止;不声称通过。

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

  • 删除本次缓存方案替换后不再使用的文件 stamp 和 gitdir 指针解析 helper。
  • [N/A] 未发现并确认本次范围以外需要另报的无用代码或重构项。

验证 / Verification

命令或操作 平台 结果
两项新增回归,原始生产逻辑 Windows / Rust MSVC 预期失败;外部规则夹具修正后重新验证了失败原因
官方逐项 Rust 计时入口,库目标 project::indexing::tests:: Windows / Rust MSVC 33/34 通过;两项新增回归通过(4.339s / 3.978s)。原有目录动作用例仍在15秒预算下超时;本轮清理/输出管道等待使记录约302秒,已确认残留Git退出并清理临时目录。原始生产代码单独运行同样超时(约16.2秒)
同入口,lsp::interface::engine::tests::indexing_ Windows / Rust MSVC 9/9 通过;覆盖首次Git解析、实际策略变化取消和watcher更新送达,最慢6.637秒
原有目录动作 fixture,用原始生产逻辑单独运行 Windows 15 秒预算超时,约 16.2 秒完成进程清理;未扩大预算
verify-test-stability.mjs --platform all Windows 通过
rustfmt --check / git diff --check Windows 通过
功能矩阵校验、Agent Note 校验、日志事件生成检查 Windows 通过
全仓日志用法检查 Windows 现存/CRLF 问题;同换行基线对比见上

报告保存在本地 .artifacts/test-stability/review-1749-*.{json,html,junit.xml},未提交构建产物。

**未能执行的检查和原因:**完整注释门禁缺少 Ruby;macOS/zsh/Swift 桥接及真实 Windows Maven/JDT 产品流程未验收。独立运行 cargo rustdoc --lib -- -D missing_docs -D rustdoc::broken_intra_doc_links 通过;不代替完整Ruby门禁。

提交前确认 / Final checks

  • 保留用户指定分支,已在提交前快进到当时最新 preview:4a029e09f;目标分支 preview。
  • 以 Draft 提交;保留上述验证缺口,不标记 ready。
  • 没有提交工具、缓存、日志、.artifacts/、凭据或个人路径。
  • 没有启动 Lithe 应用;本次测试的子进程由有界测试入口负责回收。

批量核验 Git 排除并允许无实际策略变化的启动接续;刷新仅复用目录候选,补充嵌套仓库及外部忽略规则回归,同步决策笔记和功能矩阵。
@ghfind-review ghfind-review Bot added the review: low ghfind author score; see https://ghfind.com label Nov 6, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant