Files
Assistant/tests/semantic_evolution/self_development_contract_test.go
m c60a575fda
CI / test (push) Successful in 1m3s
CI / test (pull_request) Successful in 57s
feat: add isolated governed scaffold candidate
2026-08-23 01:36:03 +03:00

36 lines
2.0 KiB
Go

package semantic_evolution_test
import (
"testing"
"time"
"git.cin.su/m/Assistant/contracts/work"
workdomain "git.cin.su/m/Assistant/modules/work/domain"
)
func TestSelfDevelopmentRollbackIsAvailableOnlyFromCanary(t *testing.T) {
gate := work.DevelopmentGate{ID: "dev-1", Stage: work.DevelopmentCanary, EvidenceRefs: []string{"obs"}, CanaryEvidence: "canary", RollbackRef: "rollback"}
if _, err := workdomain.AdvanceDevelopmentGate(gate, work.DevelopmentRolledBack); err != nil {
t.Fatal(err)
}
}
func TestExtensionProposalIsProposalOnlyAndDeduplicatesSignals(t *testing.T) {
proposal, err := workdomain.BuildExtensionProposal([]work.ExtensionEvidence{{Ref: "gap-1", SignalKey: "printer-driver"}, {Ref: "gap-2", SignalKey: "printer-driver"}}, work.ExtensionProposalRequest{
ID: "proposal-printer", DesiredOutcome: "review printer adapter", SmallestChangeLayer: "capability-adapter", AffectedOwners: []string{"capability"}, AffectedContracts: []string{"CapabilityImplementation@v1"}, RiskTier: "C", EvaluationPlan: []string{"contract tests"}, Alternatives: []string{"retain capability gap"}, RollbackPlan: "disable candidate", Assumptions: []string{"human promotion"}, CreatedAt: time.UnixMilli(7),
})
if err != nil {
t.Fatal(err)
}
if proposal.Stage != work.ExtensionProposalProposed || len(proposal.DeduplicatedSignalKeys) != 1 {
t.Fatalf("unexpected proposal stage/keys: %+v", proposal)
}
}
func TestDevelopmentScaffoldRequiresExplicitDeniedAccessPolicies(t *testing.T) {
_, err := workdomain.BuildDevelopmentScaffold(work.DevelopmentScaffoldRequest{ID: "s", ProposalRef: "p", BaseRepoRevision: "r", WorktreeRef: "isolated", TaskIntent: "test", Modules: []string{"work"}, AllowedPaths: []string{"modules/work/**"}, RequiredTests: []string{"go test ./..."}, ArtifactLineageRefs: []string{"p"}, ProtectedMainAccess: "DENIED", ProductionAccess: "DENIED", SecretAccess: "ALLOW", CreatedAt: time.UnixMilli(1)})
if err == nil {
t.Fatal("secret access must be denied explicitly")
}
}