Skip to content

[V1 Purity] 将 Artifact 收敛为单一持久化来源 #140

Description

@leecyang

问题

当前任务产物先持久化到 task-scoped 文件目录,随后由 ArtifactResourceService 扫描任务、读取文件、计算哈希并复制到 learner-scoped Artifact 存储;两套目录还分别对应公开读取入口。这形成了“旧生成存储 → 投影桥 → 新资源存储”的双写和双读结构。

实施要求

  • 定义唯一 ArtifactStoragePort 与唯一 Artifact 数据库记录,作为产物内容和元数据的事实来源。
  • Agent/provider 构建期间只允许使用不可公开访问的临时 scratch directory。
  • 成功生成后一次性、原子地发布到唯一 Artifact 存储,并在数据库中创建 Artifact 记录。
  • AgentTask snapshot/event 只引用 artifact_id,不得保存第二套可直接读取的持久文件路径。
  • 删除 GeneratedArtifactSource、任务扫描投影、active/archived task 回扫及两份文件之间的复制同步。
  • 删除 /api/agent-tasks/{task_id}/artifacts/{kind} 直读入口,只保留 Workspace-scoped Artifact API。
  • 失败或取消任务必须清理 scratch 目录,不产生半发布 Artifact。

验收条件

  • 生产代码中只有一个 Artifact 内容存储实现和一套公开读取 API。
  • 不存在 task-scoped 持久产物目录、投影扫描或复制桥。
  • Artifact 发布具备原子性:数据库记录与内容对象不会出现单边成功。
  • 同一任务重试或重复 command 不会创建重复 Artifact。
  • Task snapshot 和事件仅暴露稳定 artifact_id。
  • 集成测试覆盖成功发布、失败清理、重复提交、内容缺失和跨 Workspace 隔离。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions