Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
目录能否在树里浏览,与是否进入 Lithe 自有索引是两种不同的策略。
手动排除及 Git 自动排除由 Rust Core 判断,两端只存储项目偏好并触发刷新。
语言服务拥有自己的扫描器;Java 导入排除不能当作整个 Java 资源扫描已停止的证据。
手动排除也限制 Git 子仓库自动发现,但不直接过滤已纳入仓库的提交候选或未跟踪目录汇总。

## 问题

Expand Down Expand Up @@ -165,6 +166,22 @@ buffer、挂载状态及 attachment;不重启整个语言服务。
全局 Git 忽略文件仍通过激活、焦点和显式刷新补偿,不持续监听任意外部配置。
本轮不新增“恢复跟随 Git”菜单,也不迁移已丢失的历史角色和例外。

### 2026-11-03:缺省关闭与受控查询

未保存 Git 自动排除偏好的项目默认关闭,由 Core 在配置请求缺字段时解析。
两端只保存用户明确选择的布尔值;读取、打开项目、设置页和普通目录标记不补写默认值。
已有保存的 true/false 保持原意,不执行覆盖用户设置的一次性迁移。
配置和刷新返回实际生效值,设置控件在配置完成后呈现该值;没有生效值时禁用,
不能把暂存偏好或旧 Core 响应当作已确认的新状态。Git 元数据刷新也读取生效值。

忽略目录的批量 ls-files 必须经过已有 Git Host,保留选定可执行文件、请求超时、
取消与进程树清理。普通 Git 失败可显示部分结果,取消和超时必须原样终止请求。
说明提示保留作用范围、目录仍可浏览及取消排除例外;语言服务限制只写
“部分语言服务仍可能扫描已排除的目录”。前文 provider 适配和配置优先级仍属技术边界。

Windows 真实 JDT CI 只筛选真实 JDT 模块,普通 Core 全量由原 SharedRust 车道覆盖。
筛选为显式测试名称前缀,零命中失败并输出范围与计数;不增加时间预算。

## 考虑过的备选方案

- 复用隐藏路径:会隐藏目录,不能满足浏览与编辑需求。
Expand Down Expand Up @@ -419,6 +436,105 @@ macOS 使用最新构建的可执行及 Swift 资源,组装独立 QA bundle,
预算或 CI 跳过规则;按用户要求不在本机运行 Windows 测试,执行证据由修复
提交的 Windows CI 提供,不能沿用 `18841d18` 的部分成功结果。

## 2026-11-02:忽略的嵌套仓库、提交树与编辑器提示

自动排除以包含目录的 Git 仓库为准,不再因子目录带 `.git` 目录或 gitfile 而豁免。
父仓库的原生 `check-ignore` 判定与批量 `ls-files` 共同保护已跟踪后代和 submodule gitlink;
独立打开的嵌套根仍使用自己的策略。复现夹具覆盖自动开关、显式包含、手动排除和 gitfile。
Git 仓库发现独立接收手动排除快照,并通过原生 Git 判断忽略目录;不读取分析策略注册表,
分析开关和包含例外不影响 Git 根。提交状态与未跟踪目录展开不直接使用任何分析过滤器。
例如手动排除 `cache` 后,它不进入分析和搜索,但其已跟踪改动和未被 Git 忽略的新文件仍能提交。
不要用目录排除隐藏提交候选或改变汇总计数。Git 忽略仍由各仓库自己的原生 Git 状态决定;
父仓库忽略嵌套目录会阻止自动纳入;显式打开其中独立仓库时仍可管理。

打开 `.gitignore` 的横条调用只读 `workspace.ignoredDirectorySuggestions`。查询限目录、条目总数和深度,
按兄弟目录批量调用 Git,不读取文件正文、不跟随符号链接,也不展开已经发现的候选。
不完整或 Git 失败必须提示,不能当成“没有待排除目录”。关闭自动排除时仍可检查候选,
缓存的检查结果不得反向启用 provider 排除。只有用户确认后才把仍有效的所选目录保存为
手动排除;不再显示是应用存储内的项目偏好,不改用户的 `.gitignore` 或索引。
原生验收还发现候选缓存会使自动排除关闭时的状态汇总错误地标出 Git 排除原因,
虽然搜索库存和 provider 仍正确。configure 与 refresh 的状态汇总现在也受自动开关约束;
回归断言候选查询后的重复 configure 不改变有效原因、库存或租约版本。

显示沿用 JetBrains Islands 的 Non-Project Files 行底色:浅色 `#FFF9EB`,深色 `#291F1C`;
Git ignored 仍仅修改文件名颜色。选中行先保证既有选中色和文字对比度。出处固定为
JetBrains/intellij-community 的 `536da82a2cbce90820cbb0c158d91e78cda75d82`:
`NonProjectFilesScope.java` 选择 `FileColor.Yellow`,而 Islands 的
[`ManyIslandsLight.theme.json`](https://github.com/JetBrains/intellij-community/blob/536da82a2cbce90820cbb0c158d91e78cda75d82/platform/platform-resources/src/themes/islands/ManyIslandsLight.theme.json#L713-L718)
和 [`ManyIslandsDark.theme.json`](https://github.com/JetBrains/intellij-community/blob/536da82a2cbce90820cbb0c158d91e78cda75d82/platform/platform-resources/src/themes/islands/ManyIslandsDark.theme.json#L665-L670)
覆盖该颜色。首次实现误用了 `FileColorManagerImpl.java` 的旧主题回退值
`#FFFFE4`/`#4F4B41`,导致浅色偏黄;不能只读取作用域默认值而忽略目标主题覆盖。
用户的 PyCharm 浅色截图背景像素为 `#FFF9EB`,与 Islands 源码一致;两端同步采用这组值,
原有深浅色、选中/未选中及窗口焦点渲染回归验证实际行底色,保持选择色优先。
本次没有新增运行时资源目录;
查询只读取工作区与 Git,偏好沿用平台存储 adapter,不写发行 bundle,因此不改变签名或 delta 基线。

原生验收补充:macOS 提示必须保留空态也存在的容器,不能把首次查询的 task 挂在
完全为空的条件 Group 上。原生窗口挂载回归覆盖空态下启动首次查询;
夹具必须返回非零索引 revision,与生产已完成配置的状态一致。
项目树原有 Git 变更投影不包含 ignored,不能据此声称名称已经着色。Core 的逐层目录列表
现在按当前目录的原生 Git 批量返回 ignoredPaths;未知结果省略,Swift 只给名称着色。
该状态随懒加载、包压缩和可见行投影传递,不使用分析排除原因,也不影响 Git 提交候选。
忽略规则变更但库存文件未变时仍发布新的树装饰,保留库存 UUID,避免重新启动项目服务。
自动分析排除关闭时,Git 元数据事件先刷新既有 owner 的策略代际,再重列已加载层,
不重建未变化的文件库存。提示条依赖该代际重新查询,避免索引或 `.git/info/exclude`
变化后仍把已跟踪目录列为候选;刷新结果须保留工作区、owner 与策略身份检查。
遇到并发文件事件或目录展开时重试,
不覆盖后来加载的子节点。新文件先提交库存,再仅查询其可见父目录以补齐 Git 装饰,
不会为每个新文件重新扫描整个工作区;门控回归覆盖在途取消及连续创建。
Windows 多选排除先在内存准备完整标记和设置,全部写入成功后再广播;任何写入失败
恢复整组原值,保留选择弹窗,不把一次确认拆成多次已经生效的单目录操作。

PyCharm 2026.2.3 的同项目原生对照确认:手动排除后,普通未跟踪文件及目录仍出现在提交面板,
显式刷新和重新打开项目后结果相同。保持父 `.gitignore` 的 `projects/ShipFlow/` 不变,
将该目录登记为独立 VCS root 后,提交面板分别显示它的已跟踪修改与未跟踪文件。
因此区分分析排除、父仓库忽略、独立仓库映射,不能从“没有出现在外层未跟踪列表”推断
内部仓库已被禁用。提示条的候选查看、部分选择排除、项目级不再显示及名称/整行颜色也已对照。
测试项目的 `.gitignore` 和索引哈希不变;对照配置只写入隔离项目的 `.idea`。

最终运行补修源码通过 Core 全部 1,582 项与 macOS 相关 90 项逐项计时回归,包含原生挂载、
颜色刷新、并发创建/展开、Git 边界、懒加载和偏好。此前 Git 边界调整后的 Bun 31 项及
TypeScript 检查通过;前端此后未改变。较早 Core 1,581/Swift 75/Bun 57 报告不代替最终源码。
Core 曾在并行重编译时因无关的大转义清单 rebase 用例超时,停止竞争编译后按原预算全量通过。
最终包已替换 `/Applications/Lithe-Dev.app`,构建时间为 `2026-11-02T07:41:31Z`。
原生验收确认:自动开启时带独立 `.git` 的 ShipFlow 被分析排除,实际内容搜索仅返回 visible;
自动关闭并仅选择 ignored-choice 手动排除后,搜索保留 ignored-name-only 与 visible。
提示查看、部分选择、项目级不再显示及重启持久化通过;刷新提交面板后,manual-repo 和
ShipFlow 的已跟踪修改、未跟踪文件均仍存在。最终截图可区分 ignored-only 名称棕色与
手动排除的整行浅色底;候选查询后再刷新也不再错误显示自动排除原因。
运行中修改规则的界面截图因自动化连接不稳定未形成有效证据,颜色刷新以模型回归为依据。
验收前后 bundle 全部 1,426 项的内容、模式及符号链接目标一致,签名验证通过。
测试修改的 Dev 偏好精确恢复,QA 缓存归档;验收应用和辅助进程均已关闭,安装替换保留。
原始截图和逐项记录见 `.artifacts/workspace-exclusion-runtime/acceptance.json`。
本机 Swift 6.4.2/Xcode 27.2
不替代固定 CI 工具链或 Windows 原生验收;Windows 宿主的 macOS 检查仍只报与未修改基线
相同的两个平台专有 API 错误。本次本地 release 构建使用隔离安装的官方 Rust 1.95.0;
关闭本机符号裁剪以绕过 macOS 27 的 LINKEDIT 对齐加载问题,不改变仓库发布配置。

## 2026-11-02:Git 自动发现边界的后续调整

同一测试目录在 Lithe-Dev 自动纳入了 `test/test2`,PyCharm 则排除了其父目录 `test`。
后续修复让手动排除与 Git 忽略限制子仓库自动发现,详细依据和例外见
[Git 仓库发现与切换边界](../bug-fix/2026-10-04-git-repository-discovery-and-selection.md)。
这取代了此前“分析排除不影响仓库自动发现”的决定,但保留 Git 文件状态独立:
手动排除父仓库的普通目录后,里面的已跟踪改动与未被 Git 忽略的新文件仍可提交。
前文中 manual-repo、ShipFlow 的旧原生验收属于当时构建的证据,不能当作这次自动发现规则的验收。
新的发现请求只携带已保存的手动标记及显式根集合,不携带自动分析结果或包含例外。
因此关闭自动分析排除不会自动登记一个被 Git 忽略的 checkout,显式打开它才建立独立管理范围。

2026-11-03 第一组修复通过完整 Core 1586 项及 Rust↔Swift 桥接、索引 37 项逐项计时、
本机 Swift 6.4.2 的 63 项及前端 61 项。设置首次未取得生效值时明确显示未确认,
已成功配置后的保存失败保留最后确认值;中英回归覆盖失败和重试。固定工具链、
Windows 原生及新源码界面截图仍须按最终提交核对,不沿用历史验收结论。

两组整合开发构建的实际 Lithe-Dev 进一步确认:新项目的自动排除默认关闭,
打开设置不产生该项目偏好;显式开启保存 true,再关闭后回显 off。中英文说明均
显示精简后的语言服务限制,英文局部截图保留原像素并用红框标注。自动化在返回
项目时再次超时,多选排除与 Git 面板本轮原生复验保持 pending。应用运行前后
1434 项文件/符号链接、模式和内容哈希一致,签名通过;Git 忽略文件和索引未变,
开发偏好精确恢复,验收应用和辅助进程清理,临时 app 注册注销并删除。
证据在 `.artifacts/pr-repair-runtime/`,含源码补丁身份、二进制哈希、性能数据与清理记录。

## 适用范围

- `rust/lithe-core/src/project/indexing.rs`
Expand Down
Loading
Loading