diff --git a/contracts/capability/skill_v2.go b/contracts/capability/skill_v2.go new file mode 100644 index 0000000..d4a5bc5 --- /dev/null +++ b/contracts/capability/skill_v2.go @@ -0,0 +1,36 @@ +package capability + +type SkillID string +type SkillRevision struct { + SkillID SkillID + Revision int64 + Description string + Applicability ApplicabilitySpec + ImplementationRef string + ImplementationVersion string + DependencyRefs []string + SupportingExperienceRefs []SkillEvidenceRef + KnownFailureExperienceRefs []SkillEvidenceRef + ValidationEvidenceRefs []SkillEvidenceRef + QualityAssessmentRefs []string + EnvironmentVersionConstraints []string + LastValidatedAt int64 + Lifecycle SkillLifecycleStatus + SupersedesRevision int64 + RecordedAt int64 +} +type ApplicabilitySpec struct { + RequiredContextBindings []string + PreferredContextBindings []string + ExcludedContextBindings []string + RequiredWorldKinds []string + VersionConstraints []string + InputConditions []string + MinimumEvidenceFreshness string +} +type Skill struct { + ID SkillID + PrincipalID string + Name string + CreatedAt int64 +} diff --git a/dev/ACTIVE_TASK.json b/dev/ACTIVE_TASK.json index 4e5e8d6..72c44c9 100644 --- a/dev/ACTIVE_TASK.json +++ b/dev/ACTIVE_TASK.json @@ -1 +1 @@ -{"task_file":"dev/tasks/GEN2-012-add-typed-scoped-versioned-configuration-owner-and-bootstrap-boundary.json","task_id":"GEN2-012","task_revision":1} +{"task_file":"dev/tasks/GEN2-013-migrate-skill-v1-to-skill-v2-with-applicability-versioning-and-evidence.json","task_id":"GEN2-013","task_revision":1} diff --git a/modules/capability/domain/skill_v2.go b/modules/capability/domain/skill_v2.go new file mode 100644 index 0000000..d63de4b --- /dev/null +++ b/modules/capability/domain/skill_v2.go @@ -0,0 +1,16 @@ +package domain + +import ( + "fmt" + "git.cin.su/m/Assistant/contracts/capability" +) + +func ValidateSkillRevision(value capability.SkillRevision) error { + if value.SkillID == "" || value.Revision < 1 || value.ImplementationRef == "" || value.Lifecycle == "" || value.RecordedAt < 1 { + return fmt.Errorf("invalid skill revision") + } + if value.Lifecycle == capability.SkillValidated && len(value.ValidationEvidenceRefs) == 0 { + return fmt.Errorf("validated skill requires evidence") + } + return nil +}