docs: update status — Phase 2 done, human jobid, priorities (2026-08-13)

- left_scheduler_work.md: Phase 2 implemented (SSE+WatchJobs+4 tools), add
  job_id_human fix + ListJobs filter fix + .mcp.json env-var note; refresh
  priority list (bug-1490/1494/Phase2 all done).
- Scheduler-Agent-设计文档.md: v1.3, status header reflects Phase 0-2 done +
  verified.
- cerebrum: user preference (apiserver owns data correctness, MCP is a thin
  reader); jobid dual-encoding lesson (reuse backend.FormatJobID).
- memory: session log.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
lei.chen 2026-08-13 03:35:00 +00:00
parent e5b3c42ab3
commit 8871f7e204
4 changed files with 29 additions and 15 deletions

View file

@ -1,9 +1,9 @@
# Unified Scheduler Agent Framework — 设计文档
> **项目代号**:scheduler-agent
> **文档版本**:v1.2
> **最近更新**:2026-08-01
> **文档状态**:实施中(Phase 0-1 代码完成;集群验证:读 + submit ✅,control 有 apiserver 预存 bug 待修)
> **文档版本**:v1.3
> **最近更新**:2026-08-13
> **文档状态**:实施中(**Phase 0-2 代码完成并集群验证** ✅;Phase 3-4 后端适配器未开始。Phase 0-1 E2E 2026-08-12 通过;Phase 2 SSE 事件流 + 4 高级工具 2026-08-12 实施并验证;人类可读 jobid 2026-08-13 落地)
---

View file

@ -1,7 +1,7 @@
# Scheduler 剩余工作清单(left_scheduler_work)
- 状态:持续更新
- 日期:2026-08-07
- 日期:2026-08-13
- 来源:项目自带 MD 设计文档分析(.kiro/steering、.kiro/specs、docs/、CLAUDE.md)
本文汇总 scheduler 相关的一切剩余/未完成/已知损坏的工作,按优先级排序。每项标注来源文档与状态。
@ -155,10 +155,18 @@ spec 声称 36/36 任务完成,但 re-audit(research.md)发现缺陷。来
|-------|------|------|
| Phase 0 | 只读 MCP Server:6 读工具、schedulerclient、`mcp_readonly` 角色、API Key 认证 | ✅ 2026-07-26 |
| Phase 1 | 4 写工具(submit/cancel/hold/release)、`general_serial` 模板、`mcp_operator`、`dry_run` 审查 | ✅ 2026-08-01(代码);**2026-08-12 完整集群 E2E 验证通过**:submit→运行→DONE、cancel(kill)→EXIT、读接口全通。注意:job control 动作是 kill/stop/resume/checkpoint(schedulerclient 已正确映射) |
| Phase 2 | SSE 事件流(`/xce/v1/events` + EventBroker)+ `WatchJobs()` + 4 高级工具 | ✅ **2026-08-12 实施并集群验证**(见下)|
**Phase 2 落地明细(2026-08-12)**:
- **apiserver**:`/xce/v1/events` SSE endpoint + `backend.Broker`(EventBroker,DefaultHandler 发布 job.created/updated/deleted/finished);RBAC `event:view`(mcp_readonly/mcp_operator/cluster_admin);whitelist 加 `/xce/v1/events`。
- **schedulerclient**:`WatchJobs(ctx)` 订阅 SSE 流;**顺带修复** `ListJobs` 的 filter 参数——apiserver 用 `filter=queue_name:eq:...`(field:op:value),原 `queue_name`/`submit_user` 参数被 400 拒绝(影响带过滤的列表 + estimate_wait_time)。
- **mcp-server**:14 工具(10 原有 + `scheduler_wait_job`/`scheduler_analyze_failure`/`scheduler_suggest_resources`/`scheduler_estimate_wait_time`)。
- **人类可读 jobid(2026-08-13)**:apiserver 响应加 `job_id_human`/`human_id`(`cluster-apiserver-时间戳-序号`,如 `1-0-1786585485-0`),复用 `backend.FormatJobID`——MCP 原来只返回裸 64 位数字(`73930964699447296`),xce_test/xcecli 只认连字符格式,导致跨工具无法引用。架构原则:**apiserver 负责数据正确性,mcp-server 只读取透传**。
- **Claude Code 集成**:`.mcp.json` 注册 `xce-scheduler` server,key 用 `${XCE_API_KEY}` 环境变量(不硬编码提交);apiserver 重启后 key 失效需重新生成。
**注意**:apiserver 在 controller 重启后**不会自动重新 join**(只重连 TCP,DataStore 保持陈旧为空)——controller 重启后需手动重启 apiserver 才会重新收到作业推送。这与 scheduler/worker 的重连缺口同类,属 component-failover-adoption 待办。
代码:`src/frontend/mcp-server/`(10 工具,~1300 行)、`src/frontend/schedulerclient/`(45 测试)、apiserver API Key + RBAC 支持。
代码:`src/frontend/mcp-server/`(14 工具)、`src/frontend/schedulerclient/`(~50 测试)、apiserver API Key + RBAC + SSE 支持。
### 1. 阻塞性 bug(影响 chatbot E2E 验证)
| Bug | 影响 |
@ -167,9 +175,10 @@ spec 声称 36/36 任务完成,但 re-audit(research.md)发现缺陷。来
| **bug-1494** | 作业全 PEND 不调度,Agent 提交流程无法完成。**已修复(2026-08-11)**:子问题一 dispatch-fail 重试(bug-1510)+ 子问题二 worker 重新 join 后 slots 不更新(见第一节) |
| **chatbot 过度建议** | ✅ 已缓解(3db216c):mcp-server 加 server instructions + 状态工具 report-only 描述,防止 LLM 把非 OK 状态当事故、主动给一堆排查建议 |
### 2. Phase 2:监控 + 纠错闭环(未开始,估 2-3 天)
- **SSE 事件流**(ADR-004 设计已完、未实现):apiserver SSE endpoint + EventBroker,schedulerclient `WatchJobs()`,mcp-server 事件接入。Agent 工作流:submit → watch → analyze → auto-handle
- 3 个高级工具:`scheduler_analyze_failure`、`scheduler_suggest_resources`、`scheduler_estimate_wait_time`
### 2. Phase 2:监控 + 纠错闭环(✅ 已实施 2026-08-12)
- **SSE 事件流**(ADR-004 已实施):apiserver `/xce/v1/events` + EventBroker、schedulerclient `WatchJobs()`、mcp-server 4 高级工具。t1 集群验证:SSE 流推送 PEND→RUN→DONE、WatchJobs 捕获完整生命周期、4 工具全部 live 工作。
- 高级工具:`scheduler_wait_job`、`scheduler_analyze_failure`、`scheduler_suggest_resources`、`scheduler_estimate_wait_time`(14 工具)
- Agent 工作流已打通:submit → wait_job → 取日志 → analyze(详见设计文档 §5.3)
### 3. Phase 3 / Phase 4:后端适配器(未开始)
- Phase 3:**LSF adapter**(CLI 解析优先,Python Sidecar 后续,估 +1 月)
@ -186,11 +195,12 @@ spec 声称 36/36 任务完成,但 re-audit(research.md)发现缺陷。来
---
## 建议优先级
## 建议优先级(2026-08-13 更新)
1. **bug-1490**(apiserver control HTTP 500)——阻塞 chatbot 写工具 E2E,小而明确,能立即修。
2. **bug-1494**(作业 PEND)——根因已定位(worker+scheduler 不自愈)。G-8 死代码(scheduler 作业更新路径损坏)很可能是元凶。
3. **msg-gap G-8/G-3/G-5**——小而明确,能立即修。
4. **component-failover-adoption**(scheduler 重连)——与 bug-1494 的 join 链路疑点直接相关。
5. scheduler-agent Phase 2(SSE 事件流)——依赖 bug-1490/bug-1494 先修好。
6. scheduler-framework 重构——大规划,建议等前 5 项稳定后再动。
1. ~~**bug-1490**~~ ✅ 已修复(c90e63e),写工具 E2E 通过。
2. ~~**bug-1494**~~ ✅ 已修复(bug-1510 + bug-1511,2026-08-11),作业全 PEND 解决。
3. ~~**scheduler-agent Phase 2(SSE 事件流)**~~ ✅ 已实施并验证(2026-08-12)。
4. **msg-gap G-8/G-3/G-5**——scheduler-controller 消息缺陷,小而明确,能立即修。
5. **component-failover-adoption**(scheduler/worker/apiserver 重启后自动重连)——仍是最重要基础设施缺口;apiserver 的 rejoin 缺口已实测确认。
6. **scheduler-framework 重构**——大规划,建议等前几项稳定后再动。
7. **scheduler-agent 下一步**:Phase 3 LSF adapter(估 +1 月),或先跑通 agent 工作流真实试用 + 补齐 3 个未决决策(LLM 选型/多集群 URM/air-gapped)。