package teachingassets import ( "sync" "tutor/internal/workflows" ) type Store interface { SavePrompt(PromptCandidate) (PromptCandidate, error) Snapshot() Snapshot } type MemoryStore struct { mu sync.RWMutex prompts []PromptCandidate } func NewMemoryStore() *MemoryStore { return &MemoryStore{} } func (s *MemoryStore) SavePrompt(prompt PromptCandidate) (PromptCandidate, error) { s.mu.Lock() defer s.mu.Unlock() s.prompts = append(s.prompts, clonePrompt(prompt)) return prompt, nil } func (s *MemoryStore) Snapshot() Snapshot { s.mu.RLock() defer s.mu.RUnlock() return Snapshot{Prompts: clonePrompts(s.prompts)} } func clonePrompts(items []PromptCandidate) []PromptCandidate { cloned := make([]PromptCandidate, len(items)) for i, item := range items { cloned[i] = clonePrompt(item) } return cloned } func clonePrompt(prompt PromptCandidate) PromptCandidate { prompt.SourceEvidence = append([]workflows.EvidenceRef(nil), prompt.SourceEvidence...) return prompt }