4.3 KiB
source, content_hash, namespace, last_synced, confidence, tags
| source | content_hash | namespace | last_synced | confidence | tags | ||||
|---|---|---|---|---|---|---|---|---|---|
| raw/schema.sql | 71b47e47b483834c887de14c76d5b16506d90ad64198d76a92a7b3731132dab8 | work | 2026-05-29 | 0.9 |
|
Personal OS — PostgreSQL Schema
The personal_os Postgres database is the durable backbone of Alex's Personal OS. It stores Asana state, agent annotations, file references, wiki content, and semantic memory. Extensions used: vector (pgvector) and pg_trgm.
Core tables
tasks
One row per Asana task GID. Upserted on every sync. Tracks name, notes (text + html), due/start dates, completion state, section, assignee, creator, project, source, timestamps, sync cursors, and raw JSON. Indexed on modified_at, due_on (partial), section, assignee, source, completed, plus a trigram index on name for fuzzy search.
source values — discovery channel:
my_tasks— assigned to Alex, in My Tasks sectionsfollowing— Alex is a followerdelegated— Alex created it, someone else ownsproject— project membership, otherwise uncovered
stories
Raw Asana event log per task — comments, assignments, due-date changes, etc. resource_subtype is Asana's event type. Stores plain and HTML body (HTML retains embedded task references). Indexed on task_gid, created_at, subtype, creator.
task_edges
Directed graph of inter-task relationships. relation_type covers subtask, dependency, dependent, project_sibling, mention. Primary key (task_gid, related_gid, relation_type).
task_annotations
Agent or user-written metadata. Types: irrelevant, watching, needs_action, snoozed. Includes reasoning note, snooze date, and annotated_by (agent | user).
sync_state
One row per logical sync stream (my_tasks, following, delegated, project:{gid}, workspace_events). Holds last sync time, incremental cursor, and last full-sync time.
task_embeddings
pgvector 1024-dim embeddings (Voyage AI text-embedding-3 dims). HNSW cosine index.
Convenience view
active_tasks — non-completed, non-irrelevant, non-snoozed tasks. Ordered by source priority (my_tasks → delegated → following → project), then due date, then modified.
Wiki / memory tables
file_references
Sources for wiki ingest. Includes a macOS security-scoped bookmark_data BYTEA, cached path, optional URL, SHA256 content_hash, MIME, title, tags, JSONB modification_log, and wiki_stale flag that triggers next ingest run. Namespace constrained to work/personal/family.
wiki_pages
LLM-synthesized markdown (not verbatim copies). Tracks sources JSONB, confidence (default 0.8), superseded_by chain for versioning, stale flag, last_synced_hash, and 1536-dim embedding. ivfflat index recommended once row count > 1000. See wiki-ingest-process for the current file-based replacement that supersedes this table.
memory_store
Semantic memory from Discord, Claude sessions, manual entries. type ∈ fact|preference|decision|person. source ∈ discord|claude|manual. JSONB entities array, confidence, optional expires_at for non-permanent facts, 1536-dim embedding.
Phase 0 additions (2026-04-27)
namespace TEXT NOT NULL DEFAULT 'work'added to all core tables — supports work/personal/family separation.possibly_deleted BOOLEANandlast_seen_in_full_sync TIMESTAMPTZadded totasksso sync can detect Asana deletions.
Notes on usage
- Stories are fetched after
tasks.stories_fetched_beforecursor — incremental. task_annotationsis the only table the agent writes to from inference —tasksandstoriesare sync-owned.- The
wiki_pagestable is effectively superseded by Obsidian + frontmattercontent_hash(see personal-os-state-2026-04-27 Decision 8). Schema retained for now.
Key Points
- Source-of-truth for Asana state is this DB, not the Asana API at query time.
sourcecolumn ontasksdrives prioritization inactive_tasksview.namespacecolumn enables future Phase 2-family without schema churn.- pgvector tables are provisioned but not yet populated — Phase 2 work.
- File-references / wiki-pages tables exist but Obsidian vault replaced them in practice.
Related
personal-os-state-2026-04-27 personal-os-catchup-plan-2026-04-27 wiki-ingest-process