onesvm-browser-server/server/internal/contract/resultshape.go
chii eb972dfa93 feat: 落地 browser-server 控制面并打通 mgr1 海外订阅
单二进制三角色 + Dock 适配器 + Swarm stack 达到可部署态;mgr1 实测订阅经 central-proxy bootstrap,探活 alive=41/52。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 15:05:12 +08:00

25 lines
2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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,
}