force=true 重新索引会产生极不一致的垃圾文件/块数量

作者: BottaniCals创建于 2026年7月28日更新于 2026年7月28日

错误描述 index_codebase 使用 force=true 会产生严重不一致的垃圾结果 - 每次调用都返回不同的、毫无意义的文件/块数量,这不反映出正在被索引的代码库的实际内容。在同一个代码库上,clear_index + index_codebase(不使用 force=true)的路径始终会产生正确的数量。 这不是与 #295 相同的错误(该错误是关于快照 0/0 受损导致无限重新索引循环,已在 v0.1.7 中修复)。此处的错误是 force=true 会产生不正确的索引结果 - 每次运行都会产生不同的文件/块数量,而被索引的内容是垃圾(.venv/.pytest_cache/__pycache__/.egg-info/ 等),这些内容被代码库的 .gitignore 明确排除。 ## 重现步骤 我在 media-cli 代码库上运行了此操作(一个小型 Python 项目,57 个受 Git 追踪的文件:31 个 .py、18 个 .md、Makefile、pyproject.toml、脚本、测试、arr_cli/ 包和 .specs/ 文档)。代码库的 .gitignore 明确排除了: - .venv/venv/env/ENV/ - .pytest_cache/.coverage.mypy_cache/.ruff_cache/.tox/ - __pycache__/*.py[cod]*$py.class - *.egg-info/*.egg - build/dist/.eggs/ - .vscode/.idea/.DS_Store 测试序列: 1. 清除 + 默认重新索引:34 个文件 / 663 个块(正确 - 与应该被索引的 31 个 .py 和其他源文件匹配,每个文件约 19 个块,因为代码内容很大) 2. index_codebase(force=true) 运行 1:600 个文件 / 600 个块(不正确 - 文件数 = 块数 = 1 个块/文件 = 微小噪声) 3. index_codebase(force=true) 运行 2:200 个文件 / 200 个块(再次不同,每个文件的块数比例仍为 1:1) 4. index_codebase(force=true) 运行 3:663 个文件 / 663 个块(再次不同) 5. index_codebase(force=true) 运行 4:400 个文件 / 400 个块(再次不同) 6. 清除 + 默认重新索引(安全检查):34 个文件 / 663 个块(回到了正确的数量) ## 预期行为 force=true 应该使用与默认重新索引路径相同的文件选择逻辑来重新索引代码库。输出(文件数、块数、被索引内容)应在运行之间保持一致,并与不使用 force=trueclear_index + index_codebase 相等。 ## 实际行为 force=true 会产生随机垃圾结果: - 文件数在运行之间会大幅变化(600、200、663、400 在同一个代码库上) - 块数始终等于文件数(每个文件 1 个块),这表明被索引的内容是微小/空(与默认索引时 19 个块/文件的正确比例相比) - 1:1 的块/文件比率强烈表明强制重新索引正在索引应该排除的垃圾目录(.venv/.pytest_cache/__pycache__/.egg-info/ - 这些目录中的文件通常很小/空) - .gitignore 排除逻辑似乎不适用于强制重新索引路径 上

内容来源: zilliztech/claude-context