Files
Assistant/modules/work/domain/self_development_test.go
m 1ccd43c552
CI / test (push) Failing after 15s
CI / test (pull_request) Failing after 14s
feat(work): add governed self-development gate
2026-08-22 13:46:01 +03:00

29 lines
1.4 KiB
Go

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