{"slug":"triage/05-DATA_MODEL","title":"05 — Data Model","section":"triage","sectionLabel":"Triage","status":"canon","type":"document","path":"triage/05-DATA_MODEL.mdx","bytes":3602,"description":"The triage data model: candidates, classifications, links, quality scores, and audit records.","updated":"2026-08-24","source":"integratewise/Integratewise-docs-wiki","content":"\n\n## Core Tables\n\n### triage_results\n\nThe primary table for triage candidates. Lives in Neon (Fortress) with D1 mirror.\n\n```sql\nCREATE TABLE triage_results (\n  id UUID PRIMARY KEY,\n  message_id TEXT,\n  platform TEXT,              -- 'ai_conversation', 'integratewise_session', etc.\n  content TEXT,\n  priority TEXT,              -- 'low', 'medium', 'high', 'urgent'\n  category TEXT,\n  confidence REAL,\n  reasoning TEXT,\n  sentiment TEXT,             -- 'positive', 'neutral', 'negative'\n  metadata JSONB,            -- tenant_id, user_id, source, etc.\n  approval_status TEXT DEFAULT 'pending'\n    CHECK (approval_status IN ('pending', 'approved', 'discarded', 'deferred')),\n  approved_by TEXT,\n  approved_at TIMESTAMPTZ,\n  created_at TIMESTAMPTZ,\n  updated_at TIMESTAMPTZ\n);\n```\n\n**Approval States:**\n\n| State | Meaning | Next States |\n|---|---|---|\n| `pending` | Awaiting human review | approved, discarded, deferred |\n| `approved` | Human approved → triggers consolidation | (terminal for triage) |\n| `discarded` | Rejected by human or auto-discard | (terminal) |\n| `deferred` | Deferred for later review | pending, discarded |\n\n### consolidated_memories\n\nConsolidated memories produced by the Memory Consolidator.\n\n```sql\nCREATE TABLE consolidated_memories (\n  id UUID PRIMARY KEY,\n  tenant_id TEXT,\n  consolidation_type TEXT,   -- 'topic', 'user', 'account', 'pattern'\n  topic TEXT,\n  user_id TEXT,\n  account_id TEXT,\n  summary TEXT,\n  key_insights JSON,         -- JSON array\n  recurring_themes JSON,     -- JSON array\n  action_patterns JSON,      -- JSON array\n  session_count INTEGER,\n  time_range_start TIMESTAMPTZ,\n  time_range_end TIMESTAMPTZ,\n  created_at TIMESTAMPTZ\n);\n```\n\n### org_memory\n\nCanonical organizational memory. Written only by the Pipeline promotion engine.\n\n```sql\nCREATE TABLE org_memory (\n  id UUID PRIMARY KEY,\n  tenant_id TEXT,\n  topic TEXT,\n  category TEXT,\n  content TEXT,\n  source_session_id TEXT,\n  governance_state TEXT,      -- 'staging' or 'approved'\n  confidence REAL,\n  embedding TEXT,\n  metadata JSON,\n  created_at TIMESTAMPTZ,\n  updated_at TIMESTAMPTZ,\n  related_entity_ids JSON,\n  related_departments JSON,\n  access_scope TEXT,\n  lineage_ref TEXT,\n  tier TEXT\n);\n```\n\n### memory_promotion_audit\n\nAudit trail for every promotion decision.\n\n```sql\nCREATE TABLE memory_promotion_audit (\n  id UUID PRIMARY KEY,\n  tenant_id TEXT,\n  entity_id TEXT,\n  signals JSON,\n  score REAL,\n  category TEXT,\n  promoted BOOLEAN,\n  governance_state TEXT,\n  rationale TEXT,\n  decided_by TEXT,\n  created_at TIMESTAMPTZ\n);\n```\n\n## Durable Object State (iw-agent-runtime)\n\nThe TriageAgent Durable Object maintains operational state in SQLite:\n\n```sql\nCREATE TABLE triage_items (\n  id TEXT PRIMARY KEY,\n  tenant_id TEXT,\n  kind TEXT,\n  content TEXT,\n  route TEXT,\n  status TEXT,\n  created_at TEXT,\n  resolved_at TEXT\n);\n```\n\nThis is operational state, not canonical truth. It expires and is rebuildable.\n\n## Memory Scopes (Logical)\n\n| Scope | Table | Governance | Promotion |\n|---|---|---|---|\n| Personal | `personal_memory` | User-owned | Never widens |\n| Agent | `agent_memory` | Working state | Evidence only |\n| Conversational | `conversational_memory` | Ephemeral | Never promoted directly |\n| Organizational staging | `triage_results` (pending) | Human review required | Via approval |\n| Organizational published | `org_memory` (approved) | Canonical governed state | Sole write path |\n"}