Mai
已确认- `delivery_update` 可以发很多次,但它不是终态。
- 只有 `delivery_result` / business failed 才算 business terminal。
- `business_update + platform_terminal` 仍然要收口 failed。
- 已 terminal 后再来 callback,只记 event。
- 后续会补强 `writeBusinessDelivery` 的对称去重测试。
`platform_terminal_callback` 不再只是 runner 崩掉时的报警。 它要变成控制面终态通知:Tobatsu 看到任务 `failed/cancelled`,上游就必须知道。
这不是 Mai 的状态判断问题。63e5 的 accepted envelope 里有 `platform_terminal_callback`。 真正的问题在 Tobatsu 的触发条件和 suppress guard。
Mai 带上 `platform_terminal_callback`。
configured=true · host=tool-test.fpai.io
临时脚本 import helper 时触发 `AttributeError`。
'NoneType' object has no attribute '__dict__'
脚本调用 `tobatsu-agent fail`。
transition.fail · actor=agent
进程退出码是 `0`,worker 写 `job.succeeded`。
run.status=success · exit_code=0
worker 没进 notifier;同 run agent fail 也会被 suppress。
platform_terminal_notification.* = 0
Mai 和 MB 都接受 always-send。差异在业务 callback 模型: Mai 有 `delivery_update`,MB 没有这层。
这是这次最重要的修正。不能写成“只要业务 callback 到过,就忽略 platform terminal”。 普通更新不算收口。
现在还没动代码。下面是已经和 Mai、MB 对齐过的待排期改动。 第一刀可以不等 MB 发 enum。
`job.succeeded + task.failed` 也要发 platform terminal。63e5 就是这个洞。
同 run 有 `transition.fail actor=agent`,只能当诊断,不能阻止发送。
发 `terminal_actor`、`terminal_event_type`、`terminal_summary`、`runner_status`。
先用 `terminal_without_agent_completion`。不要直接发 `agent_failed`。
platform terminal 也是外部请求,要带正常 `User-Agent` 和现有 retry。
这些是 MB 明确指出的 hard constraints。踩了就会变成 422、409 或 401。
不要先发 `agent_failed`。先用已有 `terminal_without_agent_completion`。
只允许 `failed` / `cancelled`。不要发 `done` 或 `succeeded`。
不能塞 parent id 或 job id。MB 会和 `agent_runs.tobatsu_task_id` 对比。
用上游 mint 的 callback token。不要换成 Tobatsu service token。
不新增 enum,也能把 63e5 这类问题讲清楚。 业务端拿状态收口,ops 看诊断字段。
{ "type": "tobatsu.platform_terminal", "task_id": "63e5e8a8-...", "run_id": "f89ac0c3-...", "state": "failed", "terminal_reason_kind": "terminal_without_agent_completion", "terminal_actor": "agent", "terminal_event_type": "transition.fail", "terminal_summary": "internal_error: ...", "runner_status": "success", "callback_kind": "platform_terminal", "caller_run_id": "gwr_ac58..." }
目前只完成协议对齐和可执行计划。Tobatsu 代码还没有动。