
    Gi                    0    d Z ddlmZ dZdZdZd	dZd	dZy)
u  Postgres Cold Ledger schema — sessions, events, swarm_sagas tables.

This module owns the DDL for Genesis's three core cold-ledger tables:

    sessions      — One row per agent session (start/end timestamps, agent ID).
    events        — Append-only event log linked to a session.
    swarm_sagas   — Swarm orchestration saga records with status lifecycle.

All DDL uses IF NOT EXISTS clauses, making every function fully idempotent.
    )annotationsz
CREATE TABLE IF NOT EXISTS sessions (
    id          UUID PRIMARY KEY,
    started_at  TIMESTAMP NOT NULL DEFAULT NOW(),
    ended_at    TIMESTAMP,
    agent_id    VARCHAR(100) NOT NULL,
    metadata    JSONB
);
a  
CREATE TABLE IF NOT EXISTS events (
    id          UUID PRIMARY KEY,
    session_id  UUID REFERENCES sessions(id),
    event_type  VARCHAR(50) NOT NULL,
    payload     JSONB,
    created_at  TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_events_session_id ON events(session_id);
CREATE INDEX IF NOT EXISTS idx_events_type ON events(event_type);
CREATE INDEX IF NOT EXISTS idx_events_created ON events(created_at DESC);
a  
CREATE TABLE IF NOT EXISTS swarm_sagas (
    saga_id          UUID PRIMARY KEY,
    session_id       UUID REFERENCES sessions(id),
    orchestrator_dag JSONB,
    proposed_deltas  JSONB,
    resolved_state   JSONB,
    status           VARCHAR(20) CHECK (status IN ('RUNNING','COMPLETED','PARTIAL_FAIL','FAILED')),
    created_at       TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_sagas_session_id ON swarm_sagas(session_id);
CREATE INDEX IF NOT EXISTS idx_sagas_status ON swarm_sagas(status);
c                    | j                         5 }|j                  t               |j                  t               |j                  t               ddd       | j                          y# 1 sw Y   xY w)u=  Execute all DDL statements in a single transaction.

    Idempotent — safe to run multiple times (every statement uses IF NOT EXISTS).
    Tables are created in FK dependency order: sessions → events → swarm_sagas.

    Args:
        conn: An open psycopg2 connection (or compatible DB-API 2.0 connection).
    N)cursorexecuteSESSIONS_DDL
EVENTS_DDLSWARM_SAGAS_DDLcommitconncurs     5/mnt/e/genesis-system/core/storage/postgres_schema.pycreate_all_tablesr   >   sS     
 %#L!JO$% 	KKM	% %s   A A**A3c                    | j                         5 }|j                  d       |j                  d       |j                  d       ddd       | j                          y# 1 sw Y   xY w)af  Drop all Cold Ledger tables in reverse FK order.

    Uses CASCADE so dependent FK constraints are automatically dropped.

    WARNING: FOR TEST TEARDOWN AND DEVELOPMENT USE ONLY.
             Never call this in production without an explicit confirmation gate.

    Args:
        conn: An open psycopg2 connection (or compatible DB-API 2.0 connection).
    z(DROP TABLE IF EXISTS swarm_sagas CASCADEz#DROP TABLE IF EXISTS events CASCADEz%DROP TABLE IF EXISTS sessions CASCADEN)r   r   r
   r   s     r   drop_all_tablesr   N   sV     
 =#>?9:;<= 	KKM	= =s   4AA'N)returnNone)__doc__
__future__r   r   r   r	   r   r        r   <module>r      s.   	 #
( r   