Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
42871f2e47 | ||
|
|
6ea1d4b729 | ||
|
|
c6d1ebf36f |
@@ -0,0 +1,61 @@
|
|||||||
|
package capability
|
||||||
|
|
||||||
|
type ReflexID string
|
||||||
|
type ReflexLifecycle string
|
||||||
|
type ReflexKind string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ReflexCandidate ReflexLifecycle = "CANDIDATE"
|
||||||
|
ReflexValidating ReflexLifecycle = "VALIDATING"
|
||||||
|
ReflexActive ReflexLifecycle = "ACTIVE"
|
||||||
|
ReflexDegraded ReflexLifecycle = "DEGRADED"
|
||||||
|
ReflexStale ReflexLifecycle = "STALE"
|
||||||
|
ReflexSuspended ReflexLifecycle = "SUSPENDED"
|
||||||
|
ReflexRetired ReflexLifecycle = "RETIRED"
|
||||||
|
ReflexDeterministicCode ReflexKind = "DETERMINISTIC_CODE"
|
||||||
|
ReflexRule ReflexKind = "RULE"
|
||||||
|
ReflexWorkflow ReflexKind = "WORKFLOW"
|
||||||
|
ReflexQueryTemplate ReflexKind = "QUERY_TEMPLATE"
|
||||||
|
ReflexSmallModelChain ReflexKind = "SMALL_MODEL_CHAIN"
|
||||||
|
ReflexBoundedAdapter ReflexKind = "BOUNDED_ADAPTER_OPERATION"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ShadowPolicy struct {
|
||||||
|
Enabled bool
|
||||||
|
SampleRateMillis int64
|
||||||
|
ComparatorRef string
|
||||||
|
MaxShadowCostMicros *int64
|
||||||
|
EligibleErrorCostClasses []string
|
||||||
|
}
|
||||||
|
type RevalidationPolicy struct {
|
||||||
|
MaxAgeMillis *int64
|
||||||
|
RevalidateOnDependencyRevisionChange bool
|
||||||
|
RevalidateOnWorldVersionChange bool
|
||||||
|
RevalidateAfterFailureCount *int64
|
||||||
|
RevalidateAfterCorrectionCount *int64
|
||||||
|
SampleAuditRateMillis *int64
|
||||||
|
}
|
||||||
|
type Reflex struct {
|
||||||
|
ID ReflexID
|
||||||
|
PrincipalID string
|
||||||
|
SourceSkillRef SkillID
|
||||||
|
CreatedAt int64
|
||||||
|
}
|
||||||
|
type ReflexRevision struct {
|
||||||
|
ReflexID ReflexID
|
||||||
|
Revision int64
|
||||||
|
SourceSkillRevision int64
|
||||||
|
Kind ReflexKind
|
||||||
|
Applicability ApplicabilitySpec
|
||||||
|
ImplementationRef string
|
||||||
|
ImplementationVersion string
|
||||||
|
ArtifactDigest string
|
||||||
|
DependencyRefs []string
|
||||||
|
ValidationEvidenceRefs []SkillEvidenceRef
|
||||||
|
KnownFailureExperienceRefs []SkillEvidenceRef
|
||||||
|
Shadow ShadowPolicy
|
||||||
|
Revalidation RevalidationPolicy
|
||||||
|
LastValidatedAt int64
|
||||||
|
Lifecycle ReflexLifecycle
|
||||||
|
RecordedAt int64
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package self
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type AssessmentID string
|
||||||
|
type LearningLedgerEntryID string
|
||||||
|
type AssessmentState string
|
||||||
|
|
||||||
|
const (
|
||||||
|
AssessmentCandidate AssessmentState = "CANDIDATE"
|
||||||
|
AssessmentConfirmed AssessmentState = "CONFIRMED"
|
||||||
|
AssessmentMonitoring AssessmentState = "MONITORING"
|
||||||
|
AssessmentResolved AssessmentState = "RESOLVED"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CompetenceAssessment struct {
|
||||||
|
ID AssessmentID
|
||||||
|
PrincipalID string
|
||||||
|
SubjectRef SemanticReference
|
||||||
|
Revision uint64
|
||||||
|
ContextMatcher []string
|
||||||
|
QualityMillis int64
|
||||||
|
ReliabilityMillis int64
|
||||||
|
ConfidenceMillis int64
|
||||||
|
EvidenceRefs []SemanticReference
|
||||||
|
LastValidatedAt int64
|
||||||
|
AssessedAt int64
|
||||||
|
SupersedesRef *SemanticReference
|
||||||
|
}
|
||||||
|
type WeaknessPattern struct {
|
||||||
|
ID AssessmentID
|
||||||
|
PrincipalID string
|
||||||
|
Revision uint64
|
||||||
|
PatternKey string
|
||||||
|
ContextMatcher []string
|
||||||
|
FailureMode string
|
||||||
|
DetectionEvidenceRefs []SemanticReference
|
||||||
|
State AssessmentState
|
||||||
|
RecordedAt int64
|
||||||
|
}
|
||||||
|
type DependencyAssessment struct {
|
||||||
|
ID AssessmentID
|
||||||
|
SubjectRef SemanticReference
|
||||||
|
DependencyRef SemanticReference
|
||||||
|
ImpactClass string
|
||||||
|
CurrentEffect string
|
||||||
|
EvidenceRefs []SemanticReference
|
||||||
|
AssessedAt int64
|
||||||
|
}
|
||||||
|
type ImprovementNeed struct {
|
||||||
|
ID AssessmentID
|
||||||
|
PrincipalID string
|
||||||
|
SubjectRef SemanticReference
|
||||||
|
ProblemSummary string
|
||||||
|
EvidenceRefs []SemanticReference
|
||||||
|
ExpectedBenefit string
|
||||||
|
Priority int
|
||||||
|
State string
|
||||||
|
CreatedAt int64
|
||||||
|
}
|
||||||
|
type LearningLedgerEntry struct {
|
||||||
|
ID LearningLedgerEntryID
|
||||||
|
PrincipalID string
|
||||||
|
ImprovementNeedRef *SemanticReference
|
||||||
|
ObservedProblem string
|
||||||
|
EvidenceRefs []SemanticReference
|
||||||
|
Diagnosis string
|
||||||
|
Hypothesis string
|
||||||
|
ProposedChangeRef SemanticReference
|
||||||
|
ExpectedImprovement string
|
||||||
|
ActualEvaluationRefs []SemanticReference
|
||||||
|
DevelopmentGateRef *SemanticReference
|
||||||
|
BeforeVersionRefs []SemanticReference
|
||||||
|
AfterVersionRefs []SemanticReference
|
||||||
|
Decision string
|
||||||
|
SideEffects []string
|
||||||
|
RollbackRef *SemanticReference
|
||||||
|
RecordedAt int64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a CompetenceAssessment) Validate() error {
|
||||||
|
if a.ID == "" || a.PrincipalID == "" || !a.SubjectRef.Valid() || a.Revision < 1 || a.ConfidenceMillis < 0 || a.ConfidenceMillis > 1000 || len(a.EvidenceRefs) == 0 || a.AssessedAt < 1 {
|
||||||
|
return fmt.Errorf("competence requires evidence")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (l LearningLedgerEntry) Validate() error {
|
||||||
|
if l.ID == "" || l.PrincipalID == "" || l.ObservedProblem == "" || len(l.EvidenceRefs) == 0 || l.Decision == "" || l.RecordedAt < 1 {
|
||||||
|
return fmt.Errorf("learning ledger entry is incomplete")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
BEGIN;
|
||||||
|
SET ROLE self_role;
|
||||||
|
CREATE TABLE IF NOT EXISTS self.competence_assessments (assessment_id TEXT PRIMARY KEY, principal_id TEXT NOT NULL, subject_ref JSONB NOT NULL, revision BIGINT NOT NULL CHECK(revision>0), context_matcher JSONB NOT NULL, confidence_millis BIGINT NOT NULL, evidence_refs JSONB NOT NULL, assessed_at_unix_millis BIGINT NOT NULL);
|
||||||
|
CREATE TABLE IF NOT EXISTS self.learning_ledger (entry_id TEXT PRIMARY KEY, principal_id TEXT NOT NULL, observed_problem TEXT NOT NULL, evidence_refs JSONB NOT NULL, diagnosis TEXT NOT NULL, hypothesis TEXT NOT NULL, decision TEXT NOT NULL, recorded_at_unix_millis BIGINT NOT NULL);
|
||||||
|
GRANT SELECT, INSERT, UPDATE ON self.competence_assessments, self.learning_ledger TO self_role;
|
||||||
|
RESET ROLE;
|
||||||
|
COMMIT;
|
||||||
@@ -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-015-add-evidence-backed-self-foundation-and-learning-ledger.json","task_id":"GEN2-015","task_revision":1}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package domain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"git.cin.su/m/Assistant/contracts/capability"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ValidateReflexRevision(v capability.ReflexRevision) error {
|
||||||
|
if v.ReflexID == "" || v.SourceSkillRevision < 1 || v.Kind == "" || v.ImplementationRef == "" || v.Lifecycle == "" || v.RecordedAt < 1 {
|
||||||
|
return fmt.Errorf("invalid reflex revision")
|
||||||
|
}
|
||||||
|
if v.Lifecycle == capability.ReflexActive && len(v.ValidationEvidenceRefs) == 0 {
|
||||||
|
return fmt.Errorf("active reflex requires evidence")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func ReflexFallback(d capability.FastPathDecision) string {
|
||||||
|
if d.Decision == capability.FastPathApplied {
|
||||||
|
return "reflex"
|
||||||
|
}
|
||||||
|
return "skill->reasoning"
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package domain_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.cin.su/m/Assistant/contracts/capability"
|
||||||
|
"git.cin.su/m/Assistant/modules/capability/domain"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestReflexActiveRequiresEvidenceAndFallbacks(t *testing.T) {
|
||||||
|
v := capability.ReflexRevision{ReflexID: "r", SourceSkillRevision: 1, Kind: capability.ReflexRule, ImplementationRef: "rule", Lifecycle: capability.ReflexActive, RecordedAt: 1}
|
||||||
|
if domain.ValidateReflexRevision(v) == nil {
|
||||||
|
t.Fatal("active reflex without evidence")
|
||||||
|
}
|
||||||
|
v.ValidationEvidenceRefs = []capability.SkillEvidenceRef{"eval"}
|
||||||
|
if err := domain.ValidateReflexRevision(v); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if domain.ReflexFallback(capability.FastPathDecision{Decision: capability.FastPathEscalate}) != "skill->reasoning" {
|
||||||
|
t.Fatal("missing escalation")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package domain
|
||||||
|
import("git.cin.su/m/Assistant/contracts/self")
|
||||||
|
func ValidateCompetence(v self.CompetenceAssessment) error{return v.Validate()}
|
||||||
|
func ValidateLearning(v self.LearningLedgerEntry) error{return v.Validate()}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
package domain_test
|
||||||
|
import("testing"; selfcontract "git.cin.su/m/Assistant/contracts/self"; "git.cin.su/m/Assistant/modules/self/domain")
|
||||||
|
func TestCompetenceCannotBeSelfDeclaredWithoutEvidence(t *testing.T){v:=selfcontract.CompetenceAssessment{ID:"a",PrincipalID:"p",SubjectRef:selfcontract.SemanticReference{OwnerNamespace:"capability",SemanticKind:"skill",StableID:"s"},Revision:1,ConfidenceMillis:1000,AssessedAt:1};if domain.ValidateCompetence(v)==nil{t.Fatal("unsupported competence accepted")};v.EvidenceRefs=[]selfcontract.SemanticReference{{OwnerNamespace:"epistemics",SemanticKind:"evaluation",StableID:"e"}};if err:=domain.ValidateCompetence(v);err!=nil{t.Fatal(err)}}
|
||||||
Reference in New Issue
Block a user