package main import ( "testing" "time" "git.cin.su/m/Assistant/contracts/work" ) func TestDevelopmentGateControllerRequiresSequentialVerifiedEvidence(t *testing.T) { now := time.UnixMilli(10) gate, err := prepareDevelopmentGate(work.DevelopmentGate{ID: "gate-1", Revision: 1, Stage: work.DevelopmentEvidenceCollected, EvidenceRefs: []string{"evidence-1"}}, now) if err != nil { t.Fatal(err) } gate.ProposalRef = "proposal-1" gate, err = advanceDevelopmentGate(gate, work.DevelopmentProposalCreated, now) if err != nil || gate.Revision != 2 { t.Fatalf("proposal transition failed: %#v %v", gate, err) } gate.TaskPacketRef = "task-1" gate, err = advanceDevelopmentGate(gate, work.DevelopmentTaskAdmitted, now) if err != nil { t.Fatal(err) } gate.WorktreeRef = "isolated-worktree" gate, err = advanceDevelopmentGate(gate, work.DevelopmentIsolated, now) if err != nil { t.Fatal(err) } gate.ProducerRunRefs = []work.AgentRunID{"producer"} gate.VerifierRunRefs = []work.AgentRunID{"verifier"} gate.VerificationEvidence = "verification-1" gate, err = advanceDevelopmentGate(gate, work.DevelopmentVerified, now) if err != nil { t.Fatal(err) } if _, err := advanceDevelopmentGate(gate, work.DevelopmentPromoted, now); err == nil { t.Fatal("promotion bypassed canary") } }