test(work-graph): lock task evaluation wire contract #226

Merged
m merged 1 commits from codex/dev-000248-self-development-runtime-status into main 2026-08-23 17:37:46 +00:00
@@ -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)
}
}