Skip to content

feat(scheduled-task): expose creatorUserId in the task resource - #159

Open
sunSUNQ wants to merge 12 commits into
ora-space:mainfrom
sunSUNQ:feat/566-scheduled-task-contracts
Open

sunSUNQ wants to merge 12 commits into
ora-space:mainfrom
sunSUNQ:feat/566-scheduled-task-contracts

Conversation

@sunSUNQ

@sunSUNQ sunSUNQ commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Refs ora-space/circus#566。

#445 剩余契约义务(承接清单 6)的最小正确收口,7 项全部落地:

  1. D7 失效事件:任务写操作后发 space.scheduled_tasks_updated Space 事件(任务列表/历史刷新)。
  2. D6 历史投影映射:completed→succeeded、failed/cancelled 原样、非终态→running;failed·timeout 仍只由截止事实 + cancelled 决定。
  3. 读取校验绑定 issue:绑定 issue 已删除则任务/历史读取 404 not_found。
  4. D1 模型选择持久化:迁移 0063 加 model 列;create/update/read 处理 model,改 model 递增 revision。
  5. 撤销同意后重新同意:enable 接受新 approval,撤销后重新启用恢复 consent。
  6. D5 风险说明与显式同意:前端表单展示风险说明 + 勾选同意后提交(复用既有 consent API)。
  7. creatorUserId 暴露:任务资源与契约增加 creatorUserId。

契约:internal/contract/openapi.go + api/openapi.json 同步(新增 creatorUserId/model 与事件枚举 space.scheduled_tasks_updated)。

测试:integration/scheduled_task_contract_obligations_test.go 覆盖 model 持久化+revision、撤销后重同意、绑定 issue 删除后读取 404。

待办(依赖工具链,CI/owner 侧执行)

  • task openapi + task frontend:generate 再生成前端 client(本地无 Go 1.27.1 / 前端工具链,api/openapi.json 为手工同步)。
  • 前端 model 选择输入框(依赖再生后的 client 类型,暂不手改)。
  • 前端 npm run check 与测试(D5 表单改动需补一条表单测试)。

@HappyAuratus HappyAuratus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结论:Request changes。审查 commit:e9b29ba3aae15ee0fb768ab3acc7a012c6609c9e。

  1. [P1] model 请求过不了真实 HTTP 边界(internal/core/scheduled_task_api.go:77,145)。本次新增读取 model,但 internal/api/router/router.go:179,182 的 POST/PATCH Fields 没有 model,实际请求在 router.go:397–409 被返回 400 unknown_field。OpenAPI 和生成 client 的请求类型也没有 model;新增 integration 测试直接调用 Store.Public,绕过了这个边界。请同步路由输入、契约、生成产物和前端模型选择,并补真实 HTTP create/update 测试。

  2. [P1] 重新同意也过不了 HTTP 边界(internal/core/scheduled_task_api.go:238–243)。撤销后 enable 新增要求 approval,但 /enable 路由 Fields 仍为 nil,携带 approval 会被拒为 unknown_field,不携带则 approval_policy_invalid。前端 enable 也只发 {}。请接通输入契约及重新同意 UI,并以实际 HTTP 验证 revoke → fresh consent → enable 的闭环。

  3. [P1] 停用创建仍会在没有明确同意时记录授权(frontend/src/features/scheduled-tasks/scheduled-task-form.tsx:259,387–396)。默认 enabled=false 时风险说明/checkbox 隐藏且创建可提交;api.ts:64 却无条件发送 approval,服务端创建同时写入 unattended_policy 和 consented_at。随后启用可复用这份并非用户明确给出的授权。请让持久化授权严格对应用户显式同意,覆盖停用保存、启用、重新同意路径;现有新增测试仅检查文案出现,没有验证提交门禁或请求。

  4. [P1] 已保存模型不参与运行绑定(internal/core/scheduled_task_api.go:115–120,188–192)。本次只有表列、CRUD 和 revision 变化;scheduled_task_worker.go:183–208 的资格检查及 snapshot/enqueue 从未读取 task.model,仍根据当前个人默认/agent 配置绑定。因此模型 A 的任务即使成功存下,触发时仍可能用 B,修改个人默认后也会漂移。请把任务选择接入模型资格检查和运行输入冻结,并测试默认变化及任务后续编辑不会改变既有运行的模型。

  5. [P2] 新失效事件没有刷新任务列表/历史(internal/core/public.go:244–245)。事件不带任务标识,SpaceEvent schema 也未声明任务标识;更直接的问题是 frontend/src/features/spaces/use-space-events.ts:81–114 没有该事件分支,落到仅刷新 me/spaces 的 fallback。另一个标签页修改/删除任务后,已打开任务列表及历史保持旧数据。请按 D7 补足标识和前端消费,并增加实际缓存失效测试。

已完整检查本 PR 九个改动文件及相邻 router、worker、前端 API/SSE 消费路径;GitHub 当前 checks 全绿,但上述边界没有被新增的直接 Store.Public 测试覆盖。以上问题应在本交付修复后复审,不能把必要的请求契约及前端接线转交 CI/owner 执行。

@sunSUNQ

sunSUNQ commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

已处理的 3 项 Go 接线(commit \6d873a9\):

  1. POST/PATCH 路由 Fields 放行 \model\(P1-1 Go 侧)。
  2. /enable\ 路由 Fields 放行 \�pproval\(P1-2 Go 侧)。
  3. \SpaceEvent\ 增加 \scheduledTaskId\(P2-5 Go 侧)。

未完成、不冒称已解决:

  • worker \ ask.model\ 资格校验与实际运行绑定(P1-4,最实质)。
  • 前端显式同意闭环、模型选择表单、SSE 消费 \scheduledTaskId\(P1-3 / P1-1 前端 / P2-5 前端)。
  • OpenAPI 与前端 client 正式再生成。
  • 真实 HTTP / worker / 前端直接测试。

当前缺少的验证环境:本地只有 Go 1.27.0 且离线(\go\ 指令要求 1.27.1,自动下载失败),无法本地编译 Go 改动、跑 \ ask openapi\ / \ ask frontend:generate\ 或 PostgreSQL integration。剩余完整清单见 circus#566。

本 PR 保持 OPEN / needs-author,不把部分完成标记为全部解决。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants