修复 AGC 文件列举被无关临时锁删除打断(#552) #580

Merged
lhk229 merged 2 commits from fix/552-scoped-project-file-listing into master 2026-10-02 10:55:47 +08:00
Member

列举 assets 时,原实现先递归扫描整个项目,再过滤范围;.agent/project.lock 在枚举与读取元数据之间正常删除会使整次查询失败。

现在在读取条目元数据前裁剪目标范围与受保护路径,只遍历目标子树及必要祖先。枚举后消失的文件/目录仅跳过 NotFound,其余权限与 IO 错误仍返回;进入排队目录前复核符号链接与 Windows 重解析点。通用文件树保留原有可见范围,Agent 结果继续过滤、排序后分页。

通过通道协调真实项目写锁释放,确定性覆盖全量扫描的 TOCTOU 及定向 assets 扫描;另覆盖目录消失/类型变化、权限错误、私有路径、链接、引擎目录和分页。同步更新 AGC 契约与共享排障记录。

验证:

  • 15 条定向 Rust 测试通过:cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell -- --test-threads=1 project_file_listing generic_file_tools local_project_file_commands external_listing
  • 生产 Rust 检查通过:cargo check --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell
  • npm run check:encoding、npm run check:doc-index、git diff --check 通过。
  • 本地验证在 Linux 执行,未运行 Windows 专属运行时验证;分页仍是实时观察,不承诺跨请求快照一致性。

Fixes #552

列举 `assets` 时,原实现先递归扫描整个项目,再过滤范围;`.agent/project.lock` 在枚举与读取元数据之间正常删除会使整次查询失败。 现在在读取条目元数据前裁剪目标范围与受保护路径,只遍历目标子树及必要祖先。枚举后消失的文件/目录仅跳过 `NotFound`,其余权限与 IO 错误仍返回;进入排队目录前复核符号链接与 Windows 重解析点。通用文件树保留原有可见范围,Agent 结果继续过滤、排序后分页。 通过通道协调真实项目写锁释放,确定性覆盖全量扫描的 TOCTOU 及定向 `assets` 扫描;另覆盖目录消失/类型变化、权限错误、私有路径、链接、引擎目录和分页。同步更新 AGC 契约与共享排障记录。 验证: - 15 条定向 Rust 测试通过:`cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell -- --test-threads=1 project_file_listing generic_file_tools local_project_file_commands external_listing` - 生产 Rust 检查通过:`cargo check --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell` - `npm run check:encoding`、`npm run check:doc-index`、`git diff --check` 通过。 - 本地验证在 Linux 执行,未运行 Windows 专属运行时验证;分页仍是实时观察,不承诺跨请求快照一致性。 Fixes #552
lhk229 added 1 commit 2026-10-02 02:23:02 +08:00
修复项目文件列举被无关临时锁删除打断
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m8s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m26s
Project CI / Backend tests (pull_request) Successful in 4m21s
Project CI / Frontend tests (pull_request) Successful in 2m19s
Project CI / Native shell tests (pull_request) Successful in 6m35s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 10m35s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 10m43s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m43s
Project CI / Repository checks (pull_request) Successful in 2m16s
9fb37213d4
在读取元数据前按目标范围和受保护路径裁剪遍历
跳过枚举后消失的文件和目录并保留其它 IO 错误
补充真实写锁并发、范围过滤、分页与链接边界回归测试
同步 AGC 文件列举契约与共享排障记录
lhk229 added 1 commit 2026-10-02 10:55:37 +08:00
Merge branch 'master' into fix/552-scoped-project-file-listing
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m36s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m8s
Project CI / Backend tests (pull_request) Successful in 3m53s
Project CI / Frontend tests (pull_request) Successful in 2m5s
Project CI / Native shell tests (pull_request) Successful in 6m4s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 9m9s
Project CI / AI game creator shell web tests (pull_request) Successful in 1m55s
Project CI / Repository checks (pull_request) Successful in 2m31s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 11m18s
d79dd6e15e
lhk229 merged commit f2127a6489 into master 2026-10-02 10:55:47 +08:00
lhk229 deleted branch fix/552-scoped-project-file-listing 2026-10-02 10:55:47 +08:00
Sign in to join this conversation.