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) } }