资源卡依赖关系及类型分类预览 #129
Reference in New Issue
Block a user
Delete Branch "codex/resource-management"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
完成资源卡按类型和按依赖分类展现的功能
请求修改。当前 head:2e0ef02fdac915971c047c7fcdf54b556baffe59。
阻塞项:
scripts/deploy/maintenance-on.sh 去掉 mv -T 后会跟随指向目录的目标符号链接。脚本返回成功并打印“已进入维护模式”,但 marker/page 没有替换,临时文件被移入链接目标目录;需要拒绝该目标或使用不会跟随目录链接的跨平台原子替换,并补回归测试。
manifest 版本追加不可变检查存在 TOCTOU。write_manifest 在读取旧版本前缀与安装临时文件之间没有 manifest 专用锁或 CAS;并发写可先安装新版本、再被通过旧检查的旧快照覆盖。需要让存储边界串行覆盖读取、前缀校验、安装和回读,并补并发测试。
项目工作台只消费打开项目时的 currentProjectContext.manifest;嵌入 Supervisor 只向外同步 preview、Runtime 摘要和 Agent 文本,没有同步更新后的 manifest。运行期间新增资产、任务状态和正式版本不会进入资源列表、依赖图或版本卡,必须重开项目才能看到。
其他需一并处理:
当前四项 CI 和 merge-tree 均通过,但现有测试没有覆盖上述并发、符号链接、实时 manifest 和可访问性边界。
请求修改。当前 head:4e70f3623b4a394a1ba178784fe9226761d67606。
上一轮的 Repository checks import 排序和 Supervisor Prompt 静态断言已由该 head 修复;当前仍有以下阻塞项:
P1:实时 manifest 数据源仍未接通。App.tsx:1294 的 game-creator-agent-runtime-update 监听只更新 Runtime/对话状态,事件 DTO(app/types.ts:423)也不携带 manifest;App.tsx:10443 只是把 App 当前已有的 manifest 转发给 WorkspaceLauncher。后台 task.update、canvas.asset_generate 或版本更新不会触发重新读取 manifest,因此运行中新增资产、任务和正式版本仍不会进入资源列表、依赖图或版本卡,必须重开项目。新增测试通过假 Supervisor 直接调用 onManifestChange,未覆盖真实 Runtime 事件链。
P1:producerMappingTruncated 的前端处理过宽。resourceDependencyGraphModel.ts:138-195 在截断时同时清空全部 task flow、producer assignment 和 dependencyDepths;但 Rust 当前实现及回归测试仍保留纯资源引用推导出的可信深度(resource_dependency_graph.rs:760-779、783-833)。工作台随后在 project-development/index.tsx:579-595 将这些资源降为深度 0,并可能重新持久化扁平自动布局,破坏可证明的引用关系布局。应只剔除不可信审计 producer 派生数据,保留精确 manifest/引用推导结果,并补 TS 回归。
P2:maintenance-on.sh 无 --page-file 时,trap 在 maintenance-on.sh:59 才注册,而 marker 临时文件在 :68 创建;目标为 marker 符号链接时 :75 直接失败,导致同目录遗留 enabled.tmp.*。现有 check-maintenance-page.mjs:175-201 只检查链接目标目录为空,没有检查 marker 同级临时文件清理。
P2:实时 manifest 真正接通后存在焦点竞态。project-development/index.tsx:978-1000 的 useLayoutEffect 依赖整个 focusedResource;每次 manifest 重投影生成新对象都会无条件把焦点抢回详情 region,用户操作音频/视频控件或关闭按钮时会被后台更新打断;若聚焦资源被删除,也没有可靠恢复到触发卡片。
P2:仓库提交规范仍未满足。历史中 b95da30721、c24e3010f8 为英文标题且正文为空,0b6be155dd 正文为空;PR 标题仍为英文 Codex/resource management,PR body 为空。
当前 PR mergeable=true,base 为 04251f42a7298fff6e1f5f010318b6663ad0af60;Run 634 的 Repository checks、Frontend tests、Backend tests 已通过,Native shell tests 当时仍在运行。
WIP: Codex/resource managementto WIP: 资源卡依赖关系及类型分类预览请求修改。当前 head:b42a83260cef10eb47e5b93516d50f87de697782;当前 master:0cc257ce6d80d44209321ebb8797d47c21fe7ba4。
阻塞项:
P1:必须按 master 的跨 boot GUI owner 登记模型解决 runner/client.rs:917-940 冲突。attach_external_agent_runner_gui_owner(event_sink) 需要把完整 event_sink_port/token 注册进 master 新增的 attachment state,再由 ensure_external_agent_runner 在复用 endpoint 和新 Runner 两条路径按 bootId 重放;attach RPC 必须同时确认 attached=true 与 eventSinkAttached=true,只有两项都成立才能记录 attached_boot_id。不能继续保留当前一次 ensure 后直接 attach 的实现,也不能只保留 master 的 attached 校验。请保留 master 的同 boot 幂等、新 boot 重挂、失败重试、AppData 隔离和 CLI 无副作用回归,并改为断言真实 sink port/token;补 eventSinkAttached 缺失或为 false 时同 boot 可重试的测试。
P1:manifest relay 测试共享全局 sink,存在并行测试永久阻塞。src/tests/mod.rs:17-49 配置全局 sink 后直接阻塞在 TcpListener::accept();runner/tests.rs:570-606 会通过另一条 attach 覆盖并清空同一全局 sink。并行执行时 relay 可能发往另一个测试的端口,前者随后永久等待。需要把 sink 做成可注入的局部测试状态,或让所有访问该全局状态的测试共用同一跨模块串行锁;accept 必须使用非阻塞/有界超时,并用 RAII 确保失败路径清理。
合并最新 master 后还要解决 docs/project-memory/shared-memory/pitfalls.md 冲突。当前 Run 654 的四项 CI 虽然全绿,但基于 master 移动前的 head;生成新 head 后必须重跑四项 CI。若最终不采用 squash merge,历史中 0b6be155dd、b95da30721、c24e3010f8 的提交格式仍需按仓库规范整理。