687 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			687 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package storage
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	slurpContext "chorus/pkg/slurp/context"
 | |
| 	"chorus/pkg/ucxl"
 | |
| )
 | |
| 
 | |
| // DatabaseSchema defines the complete schema for encrypted context storage
 | |
| // This includes both relational and document-based structures for hybrid storage
 | |
| 
 | |
| // ContextRecord represents the main context storage record
 | |
| type ContextRecord struct {
 | |
| 	// Primary identification
 | |
| 	ID          string       `json:"id" db:"id"`                     // Unique record ID
 | |
| 	UCXLAddress ucxl.Address `json:"ucxl_address" db:"ucxl_address"` // UCXL address
 | |
| 	Path        string       `json:"path" db:"path"`                 // File system path
 | |
| 	PathHash    string       `json:"path_hash" db:"path_hash"`       // Hash of path for indexing
 | |
| 
 | |
| 	// Core context data
 | |
| 	Summary      string `json:"summary" db:"summary"`
 | |
| 	Purpose      string `json:"purpose" db:"purpose"`
 | |
| 	Technologies []byte `json:"technologies" db:"technologies"` // JSON array
 | |
| 	Tags         []byte `json:"tags" db:"tags"`                 // JSON array
 | |
| 	Insights     []byte `json:"insights" db:"insights"`         // JSON array
 | |
| 
 | |
| 	// Hierarchy control
 | |
| 	OverridesParent    bool `json:"overrides_parent" db:"overrides_parent"`
 | |
| 	ContextSpecificity int  `json:"context_specificity" db:"context_specificity"`
 | |
| 	AppliesToChildren  bool `json:"applies_to_children" db:"applies_to_children"`
 | |
| 
 | |
| 	// Quality metrics
 | |
| 	RAGConfidence   float64 `json:"rag_confidence" db:"rag_confidence"`
 | |
| 	StalenessScore  float64 `json:"staleness_score" db:"staleness_score"`
 | |
| 	ValidationScore float64 `json:"validation_score" db:"validation_score"`
 | |
| 
 | |
| 	// Versioning
 | |
| 	Version       int64  `json:"version" db:"version"`
 | |
| 	ParentVersion *int64 `json:"parent_version" db:"parent_version"`
 | |
| 	ContextHash   string `json:"context_hash" db:"context_hash"`
 | |
| 
 | |
| 	// Temporal metadata
 | |
| 	CreatedAt      time.Time  `json:"created_at" db:"created_at"`
 | |
| 	UpdatedAt      time.Time  `json:"updated_at" db:"updated_at"`
 | |
| 	GeneratedAt    time.Time  `json:"generated_at" db:"generated_at"`
 | |
| 	LastAccessedAt *time.Time `json:"last_accessed_at" db:"last_accessed_at"`
 | |
| 	ExpiresAt      *time.Time `json:"expires_at" db:"expires_at"`
 | |
| 
 | |
| 	// Storage metadata
 | |
| 	StorageType       string `json:"storage_type" db:"storage_type"` // local, distributed, hybrid
 | |
| 	CompressionType   string `json:"compression_type" db:"compression_type"`
 | |
| 	EncryptionLevel   int    `json:"encryption_level" db:"encryption_level"`
 | |
| 	ReplicationFactor int    `json:"replication_factor" db:"replication_factor"`
 | |
| 	Checksum          string `json:"checksum" db:"checksum"`
 | |
| 	DataSize          int64  `json:"data_size" db:"data_size"`
 | |
| 	CompressedSize    int64  `json:"compressed_size" db:"compressed_size"`
 | |
| }
 | |
| 
 | |
| // EncryptedContextRecord represents role-based encrypted context storage
 | |
| type EncryptedContextRecord struct {
 | |
| 	// Primary keys
 | |
| 	ID          string       `json:"id" db:"id"`
 | |
| 	ContextID   string       `json:"context_id" db:"context_id"` // FK to ContextRecord
 | |
| 	Role        string       `json:"role" db:"role"`
 | |
| 	UCXLAddress ucxl.Address `json:"ucxl_address" db:"ucxl_address"`
 | |
| 
 | |
| 	// Encryption details
 | |
| 	AccessLevel    slurpContext.RoleAccessLevel `json:"access_level" db:"access_level"`
 | |
| 	EncryptedData  []byte                       `json:"encrypted_data" db:"encrypted_data"`
 | |
| 	KeyFingerprint string                       `json:"key_fingerprint" db:"key_fingerprint"`
 | |
| 	EncryptionAlgo string                       `json:"encryption_algo" db:"encryption_algo"`
 | |
| 	KeyVersion     int                          `json:"key_version" db:"key_version"`
 | |
| 
 | |
| 	// Data integrity
 | |
| 	DataChecksum   string `json:"data_checksum" db:"data_checksum"`
 | |
| 	EncryptionHash string `json:"encryption_hash" db:"encryption_hash"`
 | |
| 
 | |
| 	// Temporal data
 | |
| 	CreatedAt       time.Time  `json:"created_at" db:"created_at"`
 | |
| 	UpdatedAt       time.Time  `json:"updated_at" db:"updated_at"`
 | |
| 	LastDecryptedAt *time.Time `json:"last_decrypted_at" db:"last_decrypted_at"`
 | |
| 	ExpiresAt       *time.Time `json:"expires_at" db:"expires_at"`
 | |
| 
 | |
| 	// Access tracking
 | |
| 	AccessCount    int64  `json:"access_count" db:"access_count"`
 | |
| 	LastAccessedBy string `json:"last_accessed_by" db:"last_accessed_by"`
 | |
| 	AccessHistory  []byte `json:"access_history" db:"access_history"` // JSON access log
 | |
| }
 | |
| 
 | |
| // ContextHierarchyRecord represents hierarchical relationships between contexts
 | |
| type ContextHierarchyRecord struct {
 | |
| 	ID            string       `json:"id" db:"id"`
 | |
| 	ParentAddress ucxl.Address `json:"parent_address" db:"parent_address"`
 | |
| 	ChildAddress  ucxl.Address `json:"child_address" db:"child_address"`
 | |
| 	ParentPath    string       `json:"parent_path" db:"parent_path"`
 | |
| 	ChildPath     string       `json:"child_path" db:"child_path"`
 | |
| 
 | |
| 	// Relationship metadata
 | |
| 	RelationshipType  string  `json:"relationship_type" db:"relationship_type"` // parent, sibling, dependency
 | |
| 	InheritanceWeight float64 `json:"inheritance_weight" db:"inheritance_weight"`
 | |
| 	OverrideStrength  int     `json:"override_strength" db:"override_strength"`
 | |
| 	Distance          int     `json:"distance" db:"distance"` // Hierarchy depth distance
 | |
| 
 | |
| 	// Temporal tracking
 | |
| 	CreatedAt      time.Time  `json:"created_at" db:"created_at"`
 | |
| 	ValidatedAt    time.Time  `json:"validated_at" db:"validated_at"`
 | |
| 	LastResolvedAt *time.Time `json:"last_resolved_at" db:"last_resolved_at"`
 | |
| 
 | |
| 	// Resolution statistics
 | |
| 	ResolutionCount int64   `json:"resolution_count" db:"resolution_count"`
 | |
| 	ResolutionTime  float64 `json:"resolution_time" db:"resolution_time"` // Average ms
 | |
| }
 | |
| 
 | |
| // DecisionHopRecord represents temporal decision analysis storage
 | |
| type DecisionHopRecord struct {
 | |
| 	// Primary identification
 | |
| 	ID             string       `json:"id" db:"id"`
 | |
| 	DecisionID     string       `json:"decision_id" db:"decision_id"`
 | |
| 	UCXLAddress    ucxl.Address `json:"ucxl_address" db:"ucxl_address"`
 | |
| 	ContextVersion int64        `json:"context_version" db:"context_version"`
 | |
| 
 | |
| 	// Decision metadata
 | |
| 	ChangeReason      string  `json:"change_reason" db:"change_reason"`
 | |
| 	DecisionMaker     string  `json:"decision_maker" db:"decision_maker"`
 | |
| 	DecisionRationale string  `json:"decision_rationale" db:"decision_rationale"`
 | |
| 	ImpactScope       string  `json:"impact_scope" db:"impact_scope"`
 | |
| 	ConfidenceLevel   float64 `json:"confidence_level" db:"confidence_level"`
 | |
| 
 | |
| 	// Context evolution
 | |
| 	PreviousHash   string  `json:"previous_hash" db:"previous_hash"`
 | |
| 	CurrentHash    string  `json:"current_hash" db:"current_hash"`
 | |
| 	ContextDelta   []byte  `json:"context_delta" db:"context_delta"` // JSON diff
 | |
| 	StalenessScore float64 `json:"staleness_score" db:"staleness_score"`
 | |
| 
 | |
| 	// Temporal data
 | |
| 	Timestamp            time.Time  `json:"timestamp" db:"timestamp"`
 | |
| 	PreviousDecisionTime *time.Time `json:"previous_decision_time" db:"previous_decision_time"`
 | |
| 	ProcessingTime       float64    `json:"processing_time" db:"processing_time"` // ms
 | |
| 
 | |
| 	// External references
 | |
| 	ExternalRefs []byte `json:"external_refs" db:"external_refs"` // JSON array
 | |
| 	CommitHash   string `json:"commit_hash" db:"commit_hash"`
 | |
| 	TicketID     string `json:"ticket_id" db:"ticket_id"`
 | |
| }
 | |
| 
 | |
| // DecisionInfluenceRecord represents decision influence relationships
 | |
| type DecisionInfluenceRecord struct {
 | |
| 	ID               string       `json:"id" db:"id"`
 | |
| 	SourceDecisionID string       `json:"source_decision_id" db:"source_decision_id"`
 | |
| 	TargetDecisionID string       `json:"target_decision_id" db:"target_decision_id"`
 | |
| 	SourceAddress    ucxl.Address `json:"source_address" db:"source_address"`
 | |
| 	TargetAddress    ucxl.Address `json:"target_address" db:"target_address"`
 | |
| 
 | |
| 	// Influence metrics
 | |
| 	InfluenceStrength float64 `json:"influence_strength" db:"influence_strength"`
 | |
| 	InfluenceType     string  `json:"influence_type" db:"influence_type"`       // direct, indirect, cascading
 | |
| 	PropagationDelay  float64 `json:"propagation_delay" db:"propagation_delay"` // hours
 | |
| 	HopDistance       int     `json:"hop_distance" db:"hop_distance"`
 | |
| 
 | |
| 	// Path analysis
 | |
| 	ShortestPath   []byte  `json:"shortest_path" db:"shortest_path"`     // JSON path array
 | |
| 	AlternatePaths []byte  `json:"alternate_paths" db:"alternate_paths"` // JSON paths
 | |
| 	PathConfidence float64 `json:"path_confidence" db:"path_confidence"`
 | |
| 
 | |
| 	// Temporal tracking
 | |
| 	CreatedAt      time.Time  `json:"created_at" db:"created_at"`
 | |
| 	LastAnalyzedAt time.Time  `json:"last_analyzed_at" db:"last_analyzed_at"`
 | |
| 	ValidatedAt    *time.Time `json:"validated_at" db:"validated_at"`
 | |
| }
 | |
| 
 | |
| // AccessControlRecord represents role-based access control metadata
 | |
| type AccessControlRecord struct {
 | |
| 	ID          string       `json:"id" db:"id"`
 | |
| 	UCXLAddress ucxl.Address `json:"ucxl_address" db:"ucxl_address"`
 | |
| 	Role        string       `json:"role" db:"role"`
 | |
| 	Permissions []byte       `json:"permissions" db:"permissions"` // JSON permissions array
 | |
| 
 | |
| 	// Access levels
 | |
| 	ReadAccess   bool                         `json:"read_access" db:"read_access"`
 | |
| 	WriteAccess  bool                         `json:"write_access" db:"write_access"`
 | |
| 	DeleteAccess bool                         `json:"delete_access" db:"delete_access"`
 | |
| 	AdminAccess  bool                         `json:"admin_access" db:"admin_access"`
 | |
| 	AccessLevel  slurpContext.RoleAccessLevel `json:"access_level" db:"access_level"`
 | |
| 
 | |
| 	// Constraints
 | |
| 	TimeConstraints []byte `json:"time_constraints" db:"time_constraints"` // JSON time rules
 | |
| 	IPConstraints   []byte `json:"ip_constraints" db:"ip_constraints"`     // JSON IP rules
 | |
| 	ContextFilters  []byte `json:"context_filters" db:"context_filters"`   // JSON filter rules
 | |
| 
 | |
| 	// Audit trail
 | |
| 	CreatedAt time.Time  `json:"created_at" db:"created_at"`
 | |
| 	CreatedBy string     `json:"created_by" db:"created_by"`
 | |
| 	UpdatedAt time.Time  `json:"updated_at" db:"updated_at"`
 | |
| 	UpdatedBy string     `json:"updated_by" db:"updated_by"`
 | |
| 	ExpiresAt *time.Time `json:"expires_at" db:"expires_at"`
 | |
| }
 | |
| 
 | |
| // ContextIndexRecord represents search index entries for contexts
 | |
| type ContextIndexRecord struct {
 | |
| 	ID          string       `json:"id" db:"id"`
 | |
| 	UCXLAddress ucxl.Address `json:"ucxl_address" db:"ucxl_address"`
 | |
| 	IndexName   string       `json:"index_name" db:"index_name"`
 | |
| 
 | |
| 	// Indexed content
 | |
| 	Tokens         []byte `json:"tokens" db:"tokens"`                   // JSON token array
 | |
| 	NGrams         []byte `json:"ngrams" db:"ngrams"`                   // JSON n-gram array
 | |
| 	SemanticVector []byte `json:"semantic_vector" db:"semantic_vector"` // Embedding vector
 | |
| 
 | |
| 	// Search metadata
 | |
| 	IndexWeight float64 `json:"index_weight" db:"index_weight"`
 | |
| 	BoostFactor float64 `json:"boost_factor" db:"boost_factor"`
 | |
| 	Language    string  `json:"language" db:"language"`
 | |
| 	ContentType string  `json:"content_type" db:"content_type"`
 | |
| 
 | |
| 	// Quality metrics
 | |
| 	RelevanceScore  float64 `json:"relevance_score" db:"relevance_score"`
 | |
| 	FreshnessScore  float64 `json:"freshness_score" db:"freshness_score"`
 | |
| 	PopularityScore float64 `json:"popularity_score" db:"popularity_score"`
 | |
| 
 | |
| 	// Temporal tracking
 | |
| 	CreatedAt     time.Time `json:"created_at" db:"created_at"`
 | |
| 	UpdatedAt     time.Time `json:"updated_at" db:"updated_at"`
 | |
| 	LastReindexed time.Time `json:"last_reindexed" db:"last_reindexed"`
 | |
| }
 | |
| 
 | |
| // CacheEntryRecord represents cached context data
 | |
| type CacheEntryRecord struct {
 | |
| 	ID          string       `json:"id" db:"id"`
 | |
| 	CacheKey    string       `json:"cache_key" db:"cache_key"`
 | |
| 	UCXLAddress ucxl.Address `json:"ucxl_address" db:"ucxl_address"`
 | |
| 	Role        string       `json:"role" db:"role"`
 | |
| 
 | |
| 	// Cached data
 | |
| 	CachedData     []byte `json:"cached_data" db:"cached_data"`
 | |
| 	DataHash       string `json:"data_hash" db:"data_hash"`
 | |
| 	Compressed     bool   `json:"compressed" db:"compressed"`
 | |
| 	OriginalSize   int64  `json:"original_size" db:"original_size"`
 | |
| 	CompressedSize int64  `json:"compressed_size" db:"compressed_size"`
 | |
| 
 | |
| 	// Cache metadata
 | |
| 	TTL         int64 `json:"ttl" db:"ttl"` // seconds
 | |
| 	Priority    int   `json:"priority" db:"priority"`
 | |
| 	AccessCount int64 `json:"access_count" db:"access_count"`
 | |
| 	HitCount    int64 `json:"hit_count" db:"hit_count"`
 | |
| 
 | |
| 	// Temporal data
 | |
| 	CreatedAt      time.Time  `json:"created_at" db:"created_at"`
 | |
| 	LastAccessedAt time.Time  `json:"last_accessed_at" db:"last_accessed_at"`
 | |
| 	LastHitAt      *time.Time `json:"last_hit_at" db:"last_hit_at"`
 | |
| 	ExpiresAt      time.Time  `json:"expires_at" db:"expires_at"`
 | |
| }
 | |
| 
 | |
| // BackupRecord represents backup metadata
 | |
| type BackupRecord struct {
 | |
| 	ID          string `json:"id" db:"id"`
 | |
| 	BackupID    string `json:"backup_id" db:"backup_id"`
 | |
| 	Name        string `json:"name" db:"name"`
 | |
| 	Destination string `json:"destination" db:"destination"`
 | |
| 
 | |
| 	// Backup content
 | |
| 	ContextCount   int64  `json:"context_count" db:"context_count"`
 | |
| 	DataSize       int64  `json:"data_size" db:"data_size"`
 | |
| 	CompressedSize int64  `json:"compressed_size" db:"compressed_size"`
 | |
| 	Checksum       string `json:"checksum" db:"checksum"`
 | |
| 
 | |
| 	// Backup metadata
 | |
| 	IncludesIndexes bool   `json:"includes_indexes" db:"includes_indexes"`
 | |
| 	IncludesCache   bool   `json:"includes_cache" db:"includes_cache"`
 | |
| 	Encrypted       bool   `json:"encrypted" db:"encrypted"`
 | |
| 	Incremental     bool   `json:"incremental" db:"incremental"`
 | |
| 	ParentBackupID  string `json:"parent_backup_id" db:"parent_backup_id"`
 | |
| 
 | |
| 	// Status tracking
 | |
| 	Status       BackupStatus `json:"status" db:"status"`
 | |
| 	Progress     float64      `json:"progress" db:"progress"`
 | |
| 	ErrorMessage string       `json:"error_message" db:"error_message"`
 | |
| 
 | |
| 	// Temporal data
 | |
| 	CreatedAt      time.Time  `json:"created_at" db:"created_at"`
 | |
| 	StartedAt      *time.Time `json:"started_at" db:"started_at"`
 | |
| 	CompletedAt    *time.Time `json:"completed_at" db:"completed_at"`
 | |
| 	RetentionUntil time.Time  `json:"retention_until" db:"retention_until"`
 | |
| }
 | |
| 
 | |
| // MetricsRecord represents storage performance metrics
 | |
| type MetricsRecord struct {
 | |
| 	ID         string `json:"id" db:"id"`
 | |
| 	MetricType string `json:"metric_type" db:"metric_type"` // storage, encryption, cache, etc.
 | |
| 	NodeID     string `json:"node_id" db:"node_id"`
 | |
| 
 | |
| 	// Metric data
 | |
| 	MetricName  string  `json:"metric_name" db:"metric_name"`
 | |
| 	MetricValue float64 `json:"metric_value" db:"metric_value"`
 | |
| 	MetricUnit  string  `json:"metric_unit" db:"metric_unit"`
 | |
| 	Tags        []byte  `json:"tags" db:"tags"` // JSON tag object
 | |
| 
 | |
| 	// Aggregation data
 | |
| 	AggregationType string `json:"aggregation_type" db:"aggregation_type"` // avg, sum, count, etc.
 | |
| 	TimeWindow      int64  `json:"time_window" db:"time_window"`           // seconds
 | |
| 	SampleCount     int64  `json:"sample_count" db:"sample_count"`
 | |
| 
 | |
| 	// Temporal tracking
 | |
| 	Timestamp time.Time `json:"timestamp" db:"timestamp"`
 | |
| 	CreatedAt time.Time `json:"created_at" db:"created_at"`
 | |
| }
 | |
| 
 | |
| // ContextEvolutionRecord tracks how contexts evolve over time
 | |
| type ContextEvolutionRecord struct {
 | |
| 	ID          string       `json:"id" db:"id"`
 | |
| 	UCXLAddress ucxl.Address `json:"ucxl_address" db:"ucxl_address"`
 | |
| 	FromVersion int64        `json:"from_version" db:"from_version"`
 | |
| 	ToVersion   int64        `json:"to_version" db:"to_version"`
 | |
| 
 | |
| 	// Evolution analysis
 | |
| 	EvolutionType    string  `json:"evolution_type" db:"evolution_type"` // enhancement, refactor, fix, etc.
 | |
| 	SimilarityScore  float64 `json:"similarity_score" db:"similarity_score"`
 | |
| 	ChangesMagnitude float64 `json:"changes_magnitude" db:"changes_magnitude"`
 | |
| 	SemanticDrift    float64 `json:"semantic_drift" db:"semantic_drift"`
 | |
| 
 | |
| 	// Change details
 | |
| 	ChangedFields  []byte `json:"changed_fields" db:"changed_fields"`   // JSON array
 | |
| 	FieldDeltas    []byte `json:"field_deltas" db:"field_deltas"`       // JSON delta object
 | |
| 	ImpactAnalysis []byte `json:"impact_analysis" db:"impact_analysis"` // JSON analysis
 | |
| 
 | |
| 	// Quality assessment
 | |
| 	QualityImprovement float64 `json:"quality_improvement" db:"quality_improvement"`
 | |
| 	ConfidenceChange   float64 `json:"confidence_change" db:"confidence_change"`
 | |
| 	ValidationPassed   bool    `json:"validation_passed" db:"validation_passed"`
 | |
| 
 | |
| 	// Temporal tracking
 | |
| 	EvolutionTime  time.Time `json:"evolution_time" db:"evolution_time"`
 | |
| 	AnalyzedAt     time.Time `json:"analyzed_at" db:"analyzed_at"`
 | |
| 	ProcessingTime float64   `json:"processing_time" db:"processing_time"` // ms
 | |
| }
 | |
| 
 | |
| // Schema validation and creation functions
 | |
| 
 | |
| // CreateTableStatements returns SQL DDL statements for creating all tables
 | |
| func CreateTableStatements() []string {
 | |
| 	return []string{
 | |
| 		CreateContextTableSQL(),
 | |
| 		CreateEncryptedContextTableSQL(),
 | |
| 		CreateHierarchyTableSQL(),
 | |
| 		CreateDecisionHopTableSQL(),
 | |
| 		CreateDecisionInfluenceTableSQL(),
 | |
| 		CreateAccessControlTableSQL(),
 | |
| 		CreateContextIndexTableSQL(),
 | |
| 		CreateCacheEntryTableSQL(),
 | |
| 		CreateBackupTableSQL(),
 | |
| 		CreateMetricsTableSQL(),
 | |
| 		CreateEvolutionTableSQL(),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // CreateIndexStatements returns SQL statements for creating indexes
 | |
| func CreateIndexStatements() []string {
 | |
| 	return []string{
 | |
| 		// Context table indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_ucxl ON contexts(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_path_hash ON contexts(path_hash)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_created_at ON contexts(created_at)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_updated_at ON contexts(updated_at)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_version ON contexts(version)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_staleness ON contexts(staleness_score)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_confidence ON contexts(rag_confidence)",
 | |
| 
 | |
| 		// Encrypted context indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_encrypted_context_role ON encrypted_contexts(role)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_encrypted_context_ucxl ON encrypted_contexts(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_encrypted_context_access_level ON encrypted_contexts(access_level)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_encrypted_context_key_fp ON encrypted_contexts(key_fingerprint)",
 | |
| 
 | |
| 		// Hierarchy indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_hierarchy_parent ON context_hierarchy(parent_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_hierarchy_child ON context_hierarchy(child_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_hierarchy_distance ON context_hierarchy(distance)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_hierarchy_weight ON context_hierarchy(inheritance_weight)",
 | |
| 
 | |
| 		// Decision hop indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_decision_ucxl ON decision_hops(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_decision_timestamp ON decision_hops(timestamp)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_decision_reason ON decision_hops(change_reason)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_decision_maker ON decision_hops(decision_maker)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_decision_version ON decision_hops(context_version)",
 | |
| 
 | |
| 		// Decision influence indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_influence_source ON decision_influence(source_decision_id)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_influence_target ON decision_influence(target_decision_id)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_influence_strength ON decision_influence(influence_strength)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_influence_hop_distance ON decision_influence(hop_distance)",
 | |
| 
 | |
| 		// Access control indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_access_role ON access_control(role)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_access_ucxl ON access_control(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_access_level ON access_control(access_level)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_access_expires ON access_control(expires_at)",
 | |
| 
 | |
| 		// Search index indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_index_name ON context_indexes(index_name)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_index_ucxl ON context_indexes(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_index_relevance ON context_indexes(relevance_score)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_context_index_freshness ON context_indexes(freshness_score)",
 | |
| 
 | |
| 		// Cache indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_cache_key ON cache_entries(cache_key)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_cache_ucxl ON cache_entries(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_cache_role ON cache_entries(role)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_cache_expires ON cache_entries(expires_at)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_cache_priority ON cache_entries(priority)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_cache_access_count ON cache_entries(access_count)",
 | |
| 
 | |
| 		// Metrics indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_metrics_type ON metrics(metric_type)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_metrics_name ON metrics(metric_name)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_metrics_node ON metrics(node_id)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_metrics_timestamp ON metrics(timestamp)",
 | |
| 
 | |
| 		// Evolution indexes
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_evolution_ucxl ON context_evolution(ucxl_address)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_evolution_from_version ON context_evolution(from_version)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_evolution_to_version ON context_evolution(to_version)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_evolution_time ON context_evolution(evolution_time)",
 | |
| 		"CREATE INDEX IF NOT EXISTS idx_evolution_type ON context_evolution(evolution_type)",
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Individual table creation SQL statements
 | |
| // These would be implemented with specific SQL DDL for the chosen database
 | |
| // For now, providing the structure - actual SQL would depend on database choice
 | |
| 
 | |
| func CreateContextTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS contexts (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		path TEXT NOT NULL,
 | |
| 		path_hash TEXT NOT NULL,
 | |
| 		summary TEXT,
 | |
| 		purpose TEXT,
 | |
| 		technologies BLOB,
 | |
| 		tags BLOB,
 | |
| 		insights BLOB,
 | |
| 		overrides_parent BOOLEAN DEFAULT FALSE,
 | |
| 		context_specificity INTEGER DEFAULT 0,
 | |
| 		applies_to_children BOOLEAN DEFAULT TRUE,
 | |
| 		rag_confidence REAL DEFAULT 0.0,
 | |
| 		staleness_score REAL DEFAULT 0.0,
 | |
| 		validation_score REAL DEFAULT 0.0,
 | |
| 		version INTEGER NOT NULL DEFAULT 1,
 | |
| 		parent_version INTEGER,
 | |
| 		context_hash TEXT NOT NULL,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		updated_at DATETIME NOT NULL,
 | |
| 		generated_at DATETIME NOT NULL,
 | |
| 		last_accessed_at DATETIME,
 | |
| 		expires_at DATETIME,
 | |
| 		storage_type TEXT DEFAULT 'local',
 | |
| 		compression_type TEXT DEFAULT 'none',
 | |
| 		encryption_level INTEGER DEFAULT 0,
 | |
| 		replication_factor INTEGER DEFAULT 1,
 | |
| 		checksum TEXT NOT NULL,
 | |
| 		data_size INTEGER DEFAULT 0,
 | |
| 		compressed_size INTEGER DEFAULT 0
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateEncryptedContextTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS encrypted_contexts (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		context_id TEXT NOT NULL,
 | |
| 		role TEXT NOT NULL,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		access_level INTEGER NOT NULL,
 | |
| 		encrypted_data BLOB NOT NULL,
 | |
| 		key_fingerprint TEXT NOT NULL,
 | |
| 		encryption_algo TEXT NOT NULL,
 | |
| 		key_version INTEGER DEFAULT 1,
 | |
| 		data_checksum TEXT NOT NULL,
 | |
| 		encryption_hash TEXT NOT NULL,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		updated_at DATETIME NOT NULL,
 | |
| 		last_decrypted_at DATETIME,
 | |
| 		expires_at DATETIME,
 | |
| 		access_count INTEGER DEFAULT 0,
 | |
| 		last_accessed_by TEXT,
 | |
| 		access_history BLOB,
 | |
| 		FOREIGN KEY (context_id) REFERENCES contexts(id) ON DELETE CASCADE,
 | |
| 		UNIQUE(context_id, role)
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateHierarchyTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS context_hierarchy (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		parent_address TEXT NOT NULL,
 | |
| 		child_address TEXT NOT NULL,
 | |
| 		parent_path TEXT NOT NULL,
 | |
| 		child_path TEXT NOT NULL,
 | |
| 		relationship_type TEXT NOT NULL,
 | |
| 		inheritance_weight REAL DEFAULT 1.0,
 | |
| 		override_strength INTEGER DEFAULT 0,
 | |
| 		distance INTEGER NOT NULL,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		validated_at DATETIME NOT NULL,
 | |
| 		last_resolved_at DATETIME,
 | |
| 		resolution_count INTEGER DEFAULT 0,
 | |
| 		resolution_time REAL DEFAULT 0.0,
 | |
| 		UNIQUE(parent_address, child_address)
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateDecisionHopTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS decision_hops (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		decision_id TEXT NOT NULL,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		context_version INTEGER NOT NULL,
 | |
| 		change_reason TEXT NOT NULL,
 | |
| 		decision_maker TEXT NOT NULL,
 | |
| 		decision_rationale TEXT,
 | |
| 		impact_scope TEXT NOT NULL,
 | |
| 		confidence_level REAL DEFAULT 0.0,
 | |
| 		previous_hash TEXT,
 | |
| 		current_hash TEXT NOT NULL,
 | |
| 		context_delta BLOB,
 | |
| 		staleness_score REAL DEFAULT 0.0,
 | |
| 		timestamp DATETIME NOT NULL,
 | |
| 		previous_decision_time DATETIME,
 | |
| 		processing_time REAL DEFAULT 0.0,
 | |
| 		external_refs BLOB,
 | |
| 		commit_hash TEXT,
 | |
| 		ticket_id TEXT
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateDecisionInfluenceTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS decision_influence (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		source_decision_id TEXT NOT NULL,
 | |
| 		target_decision_id TEXT NOT NULL,
 | |
| 		source_address TEXT NOT NULL,
 | |
| 		target_address TEXT NOT NULL,
 | |
| 		influence_strength REAL NOT NULL,
 | |
| 		influence_type TEXT NOT NULL,
 | |
| 		propagation_delay REAL DEFAULT 0.0,
 | |
| 		hop_distance INTEGER NOT NULL,
 | |
| 		shortest_path BLOB,
 | |
| 		alternate_paths BLOB,
 | |
| 		path_confidence REAL DEFAULT 0.0,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		last_analyzed_at DATETIME NOT NULL,
 | |
| 		validated_at DATETIME
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateAccessControlTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS access_control (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		role TEXT NOT NULL,
 | |
| 		permissions BLOB,
 | |
| 		read_access BOOLEAN DEFAULT FALSE,
 | |
| 		write_access BOOLEAN DEFAULT FALSE,
 | |
| 		delete_access BOOLEAN DEFAULT FALSE,
 | |
| 		admin_access BOOLEAN DEFAULT FALSE,
 | |
| 		access_level INTEGER NOT NULL,
 | |
| 		time_constraints BLOB,
 | |
| 		ip_constraints BLOB,
 | |
| 		context_filters BLOB,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		created_by TEXT NOT NULL,
 | |
| 		updated_at DATETIME NOT NULL,
 | |
| 		updated_by TEXT NOT NULL,
 | |
| 		expires_at DATETIME,
 | |
| 		UNIQUE(ucxl_address, role)
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateContextIndexTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS context_indexes (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		index_name TEXT NOT NULL,
 | |
| 		tokens BLOB,
 | |
| 		ngrams BLOB,
 | |
| 		semantic_vector BLOB,
 | |
| 		index_weight REAL DEFAULT 1.0,
 | |
| 		boost_factor REAL DEFAULT 1.0,
 | |
| 		language TEXT DEFAULT 'en',
 | |
| 		content_type TEXT,
 | |
| 		relevance_score REAL DEFAULT 0.0,
 | |
| 		freshness_score REAL DEFAULT 0.0,
 | |
| 		popularity_score REAL DEFAULT 0.0,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		updated_at DATETIME NOT NULL,
 | |
| 		last_reindexed DATETIME NOT NULL,
 | |
| 		UNIQUE(ucxl_address, index_name)
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateCacheEntryTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS cache_entries (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		cache_key TEXT NOT NULL UNIQUE,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		role TEXT NOT NULL,
 | |
| 		cached_data BLOB NOT NULL,
 | |
| 		data_hash TEXT NOT NULL,
 | |
| 		compressed BOOLEAN DEFAULT FALSE,
 | |
| 		original_size INTEGER DEFAULT 0,
 | |
| 		compressed_size INTEGER DEFAULT 0,
 | |
| 		ttl INTEGER NOT NULL,
 | |
| 		priority INTEGER DEFAULT 0,
 | |
| 		access_count INTEGER DEFAULT 0,
 | |
| 		hit_count INTEGER DEFAULT 0,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		last_accessed_at DATETIME NOT NULL,
 | |
| 		last_hit_at DATETIME,
 | |
| 		expires_at DATETIME NOT NULL
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateBackupTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS backups (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		backup_id TEXT NOT NULL UNIQUE,
 | |
| 		name TEXT NOT NULL,
 | |
| 		destination TEXT NOT NULL,
 | |
| 		context_count INTEGER DEFAULT 0,
 | |
| 		data_size INTEGER DEFAULT 0,
 | |
| 		compressed_size INTEGER DEFAULT 0,
 | |
| 		checksum TEXT NOT NULL,
 | |
| 		includes_indexes BOOLEAN DEFAULT FALSE,
 | |
| 		includes_cache BOOLEAN DEFAULT FALSE,
 | |
| 		encrypted BOOLEAN DEFAULT FALSE,
 | |
| 		incremental BOOLEAN DEFAULT FALSE,
 | |
| 		parent_backup_id TEXT,
 | |
| 		status TEXT NOT NULL,
 | |
| 		progress REAL DEFAULT 0.0,
 | |
| 		error_message TEXT,
 | |
| 		created_at DATETIME NOT NULL,
 | |
| 		started_at DATETIME,
 | |
| 		completed_at DATETIME,
 | |
| 		retention_until DATETIME NOT NULL
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateMetricsTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS metrics (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		metric_type TEXT NOT NULL,
 | |
| 		node_id TEXT NOT NULL,
 | |
| 		metric_name TEXT NOT NULL,
 | |
| 		metric_value REAL NOT NULL,
 | |
| 		metric_unit TEXT NOT NULL,
 | |
| 		tags BLOB,
 | |
| 		aggregation_type TEXT DEFAULT 'instant',
 | |
| 		time_window INTEGER DEFAULT 0,
 | |
| 		sample_count INTEGER DEFAULT 1,
 | |
| 		timestamp DATETIME NOT NULL,
 | |
| 		created_at DATETIME NOT NULL
 | |
| 	)`
 | |
| }
 | |
| 
 | |
| func CreateEvolutionTableSQL() string {
 | |
| 	return `CREATE TABLE IF NOT EXISTS context_evolution (
 | |
| 		id TEXT PRIMARY KEY,
 | |
| 		ucxl_address TEXT NOT NULL,
 | |
| 		from_version INTEGER NOT NULL,
 | |
| 		to_version INTEGER NOT NULL,
 | |
| 		evolution_type TEXT NOT NULL,
 | |
| 		similarity_score REAL DEFAULT 0.0,
 | |
| 		changes_magnitude REAL DEFAULT 0.0,
 | |
| 		semantic_drift REAL DEFAULT 0.0,
 | |
| 		changed_fields BLOB,
 | |
| 		field_deltas BLOB,
 | |
| 		impact_analysis BLOB,
 | |
| 		quality_improvement REAL DEFAULT 0.0,
 | |
| 		confidence_change REAL DEFAULT 0.0,
 | |
| 		validation_passed BOOLEAN DEFAULT FALSE,
 | |
| 		evolution_time DATETIME NOT NULL,
 | |
| 		analyzed_at DATETIME NOT NULL,
 | |
| 		processing_time REAL DEFAULT 0.0,
 | |
| 		UNIQUE(ucxl_address, from_version, to_version)
 | |
| 	)`
 | |
| }
 | 
