Files
openclaw-workspace-2026/architecture/nocodb-schema.sql
T
JC Beasley cf3f1e1c53 Implement self-correcting memory architecture with critic engine
Adds:
- Critic Engine (critic.js): Validates output against correction store
- Auto-detection: Identifies uncorrected patterns (quantitative without proof, vague quantification, etc.)
- Auto-storage: New patterns immediately stored as corrections
- NocoDB Schema: Tables for corrections, preferences, episodes, decisions, validation
- Memory Service (memory-service.js): NocoDB integration layer
- Response Generator (response-generator.js): End-to-end pipeline with critic
- Correction Store: JSON-based with README documentation

Behavior:
- ALL output validated before delivery
- Quantitative claims without evidence → auto-corrected
- Corrections immediately block future occurrences
- System learns from its own mistakes

Test: node architecture/test-critic.js
2026-07-04 16:23:05 -07:00

141 lines
6.6 KiB
SQL

-- NocoDB Schema for Self-Correcting Memory Architecture
-- Tables: corrections, memory_preferences, memory_episodes, memory_decisions
-- ============================================
-- TABLE: corrections
-- Stores known mistakes and auto-detected patterns
-- ============================================
CREATE TABLE IF NOT EXISTS corrections (
id VARCHAR(50) PRIMARY KEY,
pattern VARCHAR(500) NOT NULL, -- Regex pattern to match
exclude_pattern VARCHAR(500), -- Pattern that excludes match
severity VARCHAR(20) NOT NULL, -- error, warning, auto-correct
message VARCHAR(500) NOT NULL, -- What to tell user
suggestion VARCHAR(500), -- How to fix
blocking BOOLEAN DEFAULT TRUE, -- Block output if matched?
auto_detected BOOLEAN DEFAULT FALSE, -- Was this auto-detected?
manual_entry BOOLEAN DEFAULT FALSE, -- Was this manually added?
hit_count INTEGER DEFAULT 0, -- How many times triggered
last_triggered TIMESTAMP, -- Last time this fired
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
context VARCHAR(200) -- Task/workflow context
);
-- Indexes for fast lookup
CREATE INDEX IF NOT EXISTS idx_corrections_severity ON corrections(severity);
CREATE INDEX IF NOT EXISTS idx_corrections_blocking ON corrections(blocking);
CREATE INDEX IF NOT EXISTS idx_corrections_auto ON corrections(auto_detected);
-- ============================================
-- TABLE: memory_preferences
-- Persistent user preferences (Layer 2)
-- ============================================
CREATE TABLE IF NOT EXISTS memory_preferences (
id VARCHAR(50) PRIMARY KEY,
category VARCHAR(50) NOT NULL, -- identity, pref, goal, knowledge
key VARCHAR(100) NOT NULL,
value TEXT NOT NULL,
importance INTEGER DEFAULT 5, -- 1-10 scale
confidence FLOAT DEFAULT 1.0, -- 0.0-1.0
tags JSON, -- Array of tags
access_count INTEGER DEFAULT 0, -- How often retrieved
last_accessed TIMESTAMP,
confirmed_count INTEGER DEFAULT 0, -- Times user confirmed
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_prefs_category ON memory_preferences(category);
CREATE INDEX IF NOT EXISTS idx_prefs_importance ON memory_preferences(importance);
-- ============================================
-- TABLE: memory_episodes
-- Episodic memory - what happened when
-- ============================================
CREATE TABLE IF NOT EXISTS memory_episodes (
id VARCHAR(50) PRIMARY KEY,
date DATE NOT NULL,
summary TEXT NOT NULL, -- Brief summary
details TEXT, -- Full details
project VARCHAR(100), -- Which project
outcomes JSON, -- What resulted
corrections_triggered JSON, -- Array of correction IDs
vector_embedding JSON, -- For semantic search (future)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_episodes_date ON memory_episodes(date);
CREATE INDEX IF NOT EXISTS idx_episodes_project ON memory_episodes(project);
-- ============================================
-- TABLE: memory_decisions
-- Architectural/technical decisions
-- ============================================
CREATE TABLE IF NOT EXISTS memory_decisions (
id VARCHAR(50) PRIMARY KEY,
date DATE NOT NULL,
project VARCHAR(100),
decision TEXT NOT NULL, -- What was decided
alternatives JSON, -- What was considered
rationale TEXT NOT NULL, -- Why this choice
status VARCHAR(20) DEFAULT 'active', -- active, reversed, deprecated
reversed_by VARCHAR(50), -- If reversed, link to new decision
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_decisions_project ON memory_decisions(project);
CREATE INDEX IF NOT EXISTS idx_decisions_status ON memory_decisions(status);
-- ============================================
-- TABLE: validation_runs
-- Track critic engine performance
-- ============================================
CREATE TABLE IF NOT EXISTS validation_runs (
id VARCHAR(50) PRIMARY KEY,
session_id VARCHAR(50),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
input_length INTEGER,
output_length INTEGER,
violations_found INTEGER DEFAULT 0,
new_patterns_detected INTEGER DEFAULT 0,
corrections_auto_stored INTEGER DEFAULT 0,
processing_time_ms INTEGER, -- How long validation took
blocked BOOLEAN DEFAULT FALSE, -- Was output blocked?
workflow VARCHAR(50) -- Which workflow was active
);
CREATE INDEX IF NOT EXISTS idx_validation_session ON validation_runs(session_id);
CREATE INDEX IF NOT EXISTS idx_validation_timestamp ON validation_runs(timestamp);
-- ============================================
-- SEED DATA: Initial correction patterns
-- ============================================
-- Critical patterns (always blocking)
INSERT INTO corrections (id, pattern, severity, message, suggestion, blocking, auto_detected) VALUES
('uncorrected_quantitative', '\\d+\\s*(%|percent|x\\s|times|fold)', 'auto-correct', 'Quantitative claim requires evidence citation', 'Add source or measurement method', TRUE, TRUE),
('unverified_done', '\\b(done|complete|finished|shipped)\\b(?!(?:.*\\b(verified|tested|validated|checked)\\b))', 'error', '"Done" claims require verification evidence', 'Add verification steps completed', TRUE, FALSE),
('unverified_performance', '\\b\\d+\\s*(%|percent|times|x\\s)\\s*(?:faster|slower|better|improved)', 'auto-correct', 'Performance claim requires benchmark data', 'Add benchmark methodology and results', TRUE, TRUE)
ON CONFLICT (id) DO NOTHING;
-- ============================================
-- VIEWS: Useful queries
-- ============================================
-- High-impact corrections (blocking + high hit count)
CREATE OR REPLACE VIEW high_impact_corrections AS
SELECT id, pattern, message, hit_count, last_triggered, created_at
FROM corrections
WHERE blocking = TRUE AND hit_count > 5
ORDER BY hit_count DESC;
-- Recent auto-detected patterns needing review
CREATE OR REPLACE VIEW auto_patterns_for_review AS
SELECT id, pattern, message, created_at, hit_count
FROM corrections
WHERE auto_detected = TRUE AND manual_entry = FALSE
AND created_at > CURRENT_TIMESTAMP - INTERVAL '7 days'
ORDER BY hit_count DESC;