diff --git a/modules/work/domain/task_evaluation_json_test.go b/modules/work/domain/task_evaluation_json_test.go new file mode 100644 index 0000000..15225ca --- /dev/null +++ b/modules/work/domain/task_evaluation_json_test.go @@ -0,0 +1,25 @@ +package domain + +import ( + "encoding/json" + "testing" + + "git.cin.su/m/Assistant/contracts/work" +) + +func TestTaskEvaluationGraphAcceptsWirePayloadShape(t *testing.T) { + payload := []byte(`{"plan":{"graph_id":"graph-wire","profile":{"ID":"profile-wire","Revision":1,"CapabilityID":"creator-advisory","Stage":"GENERAL","BenchmarkVersion":"live-general-v1","RequiredCaseIDs":["case-ok"],"QualityWeightMillis":600,"ReliabilityWeightMillis":300,"LatencyWeightMillis":100},"binding_ids":["binding-wire"],"dispatch_ids":["dispatch-wire"],"idempotency_prefix":"idem-wire","budget":{"max_parallel":1,"max_attempts":1},"cases":[{"CaseID":"case-ok","Prompt":"Reply with exactly OK","EvidenceArtifactRef":"artifact-wire","Verification":{"Mode":"EXACT_TEXT","ExpectedText":"OK","MinimumQualityMillis":1000}}],"binding_revision":2126816167056902612,"actor_id":"domovoy-creator-actor","principal_id":"domovoy-creator-principal","scope_id":"domovoy-creator-scope"},"intents":[{"dispatch_id":"dispatch-wire","idempotency_key":"idem-wire-1234567890","delegation_id":"delegation-wire","run_id":"run-wire","implementation_id":"task-evaluator","implementation_revision":1,"source_revision":"live-quality-smoke","worktree_id":"qualification-live","verification_plan_ref":"verify-wire","created_at_unix_millis":1787500000000}]}`) + var request struct { + Plan work.TaskEvaluationGraphRequest `json:"Plan"` + Intents []work.AgentDispatchIntent `json:"Intents"` + } + if err := json.Unmarshal(payload, &request); err != nil { + t.Fatal(err) + } + if request.Plan.GraphID == "" || request.Plan.Profile.ID == "" || len(request.Plan.BindingIDs) != 1 || len(request.Intents) != 1 { + t.Fatalf("wire payload lost fields: %+v intents=%+v", request.Plan, request.Intents) + } + if _, err := BuildTaskEvaluationGraph(request.Plan); err != nil { + t.Fatalf("wire payload was rejected: %v request=%+v", err, request.Plan) + } +}