SQL
CREATE TABLE deliveries (
id TEXT PRIMARY KEY,
delivery_fp TEXT NOT NULL UNIQUE,
-- idempotency: hash of (channel, thread, kind, day, payload key)
channel TEXT NOT NULL,
-- 'slack'|'email'|'sms' etc.
destination TEXT NOT NULL,
-- e.g. slack channel id,
email address,
phone
thread_id TEXT,
-- slack thread ts or equivalent
kind TEXT NOT NULL,
-- 'nudge'|'plan_view'|'approval_request'|'approval_result'|'answer'
priority INTEGER NOT NULL DEFAULT 0,
status TEXT NOT NULL CHECK (status IN ('queued','sending','sent','failed','dead')),
payload TEXT NOT NULL,
-- JSON: blocks/text/refs (rendered already; do NOT LLM here)
related_episode_id TEXT,
related_event_id TEXT,
related_proposal_id TEXT,
related_action_id TEXT,
related_approval_id TEXT,
last_error TEXT,
attempt_count INTEGER NOT NULL DEFAULT 0,
send_after TEXT,
-- for scheduled nudges
sent_at TEXT,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
FOREIGN KEY (related_episode_id) REFERENCES episodes(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY (related_event_id) REFERENCES events(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY (related_proposal_id) REFERENCES proposals(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY (related_action_id) REFERENCES actions(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY (related_approval_id) REFERENCES approvals(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED
)
Columns
| Column | Data type | Allow null | Primary key | Actions |
|---|---|---|---|---|
id |
TEXT |
✓ | ✓ | Rename | Drop |
delivery_fp |
TEXT |
Rename | Drop | ||
channel |
TEXT |
Rename | Drop | ||
destination |
TEXT |
Rename | Drop | ||
thread_id |
TEXT |
✓ | Rename | Drop | |
kind |
TEXT |
Rename | Drop | ||
priority |
INTEGER |
Rename | Drop | ||
status |
TEXT |
Rename | Drop | ||
payload |
TEXT |
Rename | Drop | ||
related_episode_id |
TEXT |
✓ | Rename | Drop | |
related_event_id |
TEXT |
✓ | Rename | Drop | |
related_proposal_id |
TEXT |
✓ | Rename | Drop | |
related_action_id |
TEXT |
✓ | Rename | Drop | |
related_approval_id |
TEXT |
✓ | Rename | Drop | |
last_error |
TEXT |
✓ | Rename | Drop | |
attempt_count |
INTEGER |
Rename | Drop | ||
send_after |
TEXT |
✓ | Rename | Drop | |
sent_at |
TEXT |
✓ | Rename | Drop | |
created_at |
TEXT |
Rename | Drop | ||
updated_at |
TEXT |
Rename | Drop |
Foreign Keys
| Column | Destination |
|---|---|
related_approval_id |
approvals.id |
related_action_id |
actions.id |
related_proposal_id |
proposals.id |
related_event_id |
events.id |
related_episode_id |
episodes.id |
Indexes
| Name | Columns | Unique | SQL | Drop? |
|---|---|---|---|---|
| idx_deliveries_status_after |
|
SQL | Drop | |
| idx_deliveries_status_updated |
|
SQL | Drop | |
| sqlite_autoindex_deliveries_1 |
id
|
✓ | SQL | Drop |
| sqlite_autoindex_deliveries_2 |
delivery_fp
|
✓ | SQL | Drop |