AGC 列举 assets 先扫描全项目,临时 project.lock 消失会使无关目录读取失败 #552

Closed
opened 2026-09-30 15:53:42 +08:00 by lhk229 · 0 comments
Member

问题与证据

对固定目录的只读列举先递归全项目,对枚举项读取元数据发生在 scope/私有路径过滤之前。临时锁在 read_dir 与 metadata 之间被正常删除,就使整个工具失败。

情绪花灵安抚记-r17 的 tool-calls.jsonl:12,2026-09-30 03:07:40 UTC,仅请求:

{"path":"assets"}

实际返回「读取文件元数据失败:$PROJECT_ROOT.agent\project.lock:系统找不到指定的文件(os error 2)」。对应 .agent/runtime/errors/error-1790737660580405900-2.json:4。请求范围是 assets,失败项却是无关控制面锁。后续项目继续推进,本项是可恢复竞态,不宣称永久卡死。

当前代码

预期与验收

  • 列举 assets 时,不因无关 .agent/project.lock 的正常创建/删除失败。
  • 定向范围尽量先约束遍历;明确处理枚举后消失的非目标文件。
  • 用并发锁生命周期夹具复现 TOCTOU,不依赖低概率手动碰撞。
  • 目标范围的真实权限/IO 错误仍可诊断;不通过吞掉所有错误或跟随符号链接实现。
  • 保持私有控制面、敏感文件和链接边界,分页结果可解释。

此项是只读扫描竞态,与写入竞争的等待策略分别跟踪。

核查范围

2026-09-30 对九份项目导出做只读审计,代码基线 3540c5660fd294b70e054810b5384a2855908df5。本 Issue 仅登记问题,尚未实施修复。未重放项目付费操作,不提交原始会话、凭据或本地私密绝对路径。已排除 #529、#525、#518;偶发 Provider/网络错误不作为新增缺陷。

## 问题与证据 对固定目录的只读列举先递归全项目,对枚举项读取元数据发生在 scope/私有路径过滤之前。临时锁在 read_dir 与 metadata 之间被正常删除,就使整个工具失败。 `情绪花灵安抚记-r17` 的 `tool-calls.jsonl:12`,2026-09-30 03:07:40 UTC,仅请求: ```json {"path":"assets"} ``` 实际返回「读取文件元数据失败:$PROJECT_ROOT\.agent\project.lock:系统找不到指定的文件(os error 2)」。对应 `.agent/runtime/errors/error-1790737660580405900-2.json:4`。请求范围是 assets,失败项却是无关控制面锁。后续项目继续推进,本项是可恢复竞态,不宣称永久卡死。 ## 当前代码 - [`agent/direct_tool_bridge.rs:1291`](https://git.genarrative.world/git/GenarrativeAI/Genarrative/src/commit/3540c5660fd294b70e054810b5384a2855908df5/apps/ai-game-creator-shell/src-tauri/src/agent/direct_tool_bridge.rs#L1291):先 `list_local_project_files_at(root)`,随后才按 scope 过滤。 - [`project/filesystem.rs:43`](https://git.genarrative.world/git/GenarrativeAI/Genarrative/src/commit/3540c5660fd294b70e054810b5384a2855908df5/apps/ai-game-creator-shell/src-tauri/src/project/filesystem.rs#L43) 至第 60 行:每项先 `symlink_metadata`,失败用 `?` 终止,再计算相对路径、过滤私有目录。 ## 预期与验收 - [ ] 列举 assets 时,不因无关 `.agent/project.lock` 的正常创建/删除失败。 - [ ] 定向范围尽量先约束遍历;明确处理枚举后消失的非目标文件。 - [ ] 用并发锁生命周期夹具复现 TOCTOU,不依赖低概率手动碰撞。 - [ ] 目标范围的真实权限/IO 错误仍可诊断;不通过吞掉所有错误或跟随符号链接实现。 - [ ] 保持私有控制面、敏感文件和链接边界,分页结果可解释。 此项是只读扫描竞态,与写入竞争的等待策略分别跟踪。 ## 核查范围 2026-09-30 对九份项目导出做只读审计,代码基线 `3540c5660fd294b70e054810b5384a2855908df5`。本 Issue 仅登记问题,尚未实施修复。未重放项目付费操作,不提交原始会话、凭据或本地私密绝对路径。已排除 #529、#525、#518;偶发 Provider/网络错误不作为新增缺陷。
lhk229 added the
Priority
Medium
3
Kind/Bug
labels 2026-09-30 15:53:42 +08:00
lhk229 self-assigned this 2026-10-02 02:12:08 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#552