package domain import ( "testing" "git.cin.su/m/Assistant/contracts/work" ) func TestGovernedSelfDevelopmentRequiresIndependentVerifierBeforeCanary(t *testing.T) { gate := work.DevelopmentGate{ID: "dev-1", Stage: work.DevelopmentEvidenceCollected, EvidenceRefs: []string{"obs-1"}, ProposalRef: "proposal-1", TaskPacketRef: "task-1", WorktreeRef: "worktree-1", ProducerRunRefs: []work.AgentRunID{"producer"}, VerifierRunRefs: []work.AgentRunID{"verifier"}, VerificationEvidence: "verify-1", CanaryEvidence: "canary-1", PromotionRef: "promotion-1"} for _, stage := range []work.DevelopmentStage{work.DevelopmentProposalCreated, work.DevelopmentTaskAdmitted, work.DevelopmentIsolated, work.DevelopmentVerified, work.DevelopmentCanary, work.DevelopmentPromoted} { var err error gate, err = AdvanceDevelopmentGate(gate, stage) if err != nil { t.Fatalf("stage %s: %v", stage, err) } } if _, err := AdvanceDevelopmentGate(gate, work.DevelopmentRolledBack); err == nil { t.Fatal("promoted gate must be terminal") } } func TestGovernedSelfDevelopmentRejectsSameProducerAndVerifier(t *testing.T) { gate := work.DevelopmentGate{ID: "dev-1", Stage: work.DevelopmentIsolated, EvidenceRefs: []string{"obs-1"}, ProducerRunRefs: []work.AgentRunID{"same"}, VerifierRunRefs: []work.AgentRunID{"same"}, VerificationEvidence: "verify-1"} if _, err := AdvanceDevelopmentGate(gate, work.DevelopmentVerified); err == nil { t.Fatal("same run cannot verify its own output") } }