单二进制三角色 + Dock 适配器 + Swarm stack 达到可部署态;mgr1 实测订阅经 central-proxy bootstrap,探活 alive=41/52。 Co-authored-by: Cursor <cursoragent@cursor.com>
25 lines
2 KiB
Go
25 lines
2 KiB
Go
// Package contract — resultshape.go:scheduler /result 线形状 golden 契约(ITER-1 F1)。
|
||
//
|
||
// T1 契约双端同源:scheduler(生产方)与 gateway(消费方)的单测均引用本文件
|
||
// 的 golden 常量断言形状,从机制上杜绝「单测各自伪造形状」的契约漂移复发。
|
||
// 语义(impl-receipt-w3 §4 + fail-w5-smoke-iter1.md 方案 A):
|
||
// - 终态(done/failed/dead):HTTP 200 + {request_id, status, envelope}——envelope
|
||
// 为统一信封原样嵌套(scheduler 不改写);
|
||
// - 非终态(queued/running):HTTP 202 + {request_id, status, position?}。
|
||
package contract
|
||
|
||
// ResultShapeDone 终态线形状 golden(status/envelope 键名 + 嵌套信封顶层键样例)。
|
||
// scheduler handleResult 与 gateway resultState 序列化/反序列化测试共用。
|
||
const ResultShapeDone = `{"request_id":"r1","status":"done","envelope":{"ok":true,"kind":"search","request_id":"r1","took_ms":1,"usage":{"credits":1,"engine":"e","tokens_estimate":1},"provenance":{"adapter":"a","proxy_exit":"direct","cached":false,"retrieved_at":null},"error":null}}`
|
||
|
||
// ResultShapeAccepted 非终态线形状 golden(202 body;position 为可选引导字段,
|
||
// 生产实现可省略——键集下限:request_id/status 必在)。
|
||
const ResultShapeAccepted = `{"request_id":"r1","status":"queued"}`
|
||
|
||
// ResultShapeFailed 失败终态线形状 golden(failed/dead 同构:200 + envelope 嵌套)。
|
||
const ResultShapeFailed = `{"request_id":"r1","status":"failed","envelope":{"ok":false,"kind":"search","request_id":"r1","took_ms":0,"usage":{"credits":0,"engine":"","tokens_estimate":0},"provenance":{"adapter":"","proxy_exit":"","cached":false,"retrieved_at":null},"error":{"code":"upstream","message":"x"}}}`
|
||
|
||
// ResultStatuses /result status 字段合法值(与 Job* 常量一致,golden 测试遍历用)。
|
||
var ResultStatuses = map[string]bool{
|
||
JobQueued: true, JobRunning: true, JobDone: true, JobFailed: true, JobDead: true,
|
||
}
|