-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
61 lines (56 loc) · 2.14 KB
/
schema.sql
File metadata and controls
61 lines (56 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-- HumanPulse D1 Schema
-- Agent queries
CREATE TABLE IF NOT EXISTS pulses (
id TEXT PRIMARY KEY,
agent_id TEXT NOT NULL,
question TEXT NOT NULL,
context TEXT,
payload TEXT,
category TEXT NOT NULL CHECK(category IN ('social', 'ethical', 'emotional', 'cultural')),
min_responses INTEGER NOT NULL DEFAULT 3 CHECK(min_responses BETWEEN 3 AND 7),
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'complete', 'insufficient_responses')),
webhook_url TEXT,
consensus TEXT CHECK(consensus IN ('yes', 'no', 'depends')),
confidence REAL,
summary TEXT,
recommendation TEXT,
responses_used INTEGER DEFAULT 0,
outliers_removed INTEGER DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
completed_at TEXT
);
-- Human answers
CREATE TABLE IF NOT EXISTS responses (
id TEXT PRIMARY KEY,
pulse_id TEXT NOT NULL,
respondent_token TEXT NOT NULL,
direction TEXT NOT NULL CHECK(direction IN ('yes', 'no', 'depends')),
certainty INTEGER NOT NULL CHECK(certainty BETWEEN 1 AND 5),
time_to_respond_ms INTEGER,
is_suspicious INTEGER DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY (pulse_id) REFERENCES pulses(id)
);
-- Anonymous respondents
CREATE TABLE IF NOT EXISTS respondents (
token TEXT PRIMARY KEY,
email_hash TEXT,
reputation_score REAL NOT NULL DEFAULT 1.0,
total_responses INTEGER NOT NULL DEFAULT 0,
calibration_count INTEGER NOT NULL DEFAULT 0,
calibration_accuracy REAL,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Silent calibration questions
CREATE TABLE IF NOT EXISTS calibration_questions (
id TEXT PRIMARY KEY,
question TEXT NOT NULL,
context TEXT,
correct_direction TEXT NOT NULL CHECK(correct_direction IN ('yes', 'no', 'depends')),
category TEXT NOT NULL CHECK(category IN ('social', 'ethical', 'emotional', 'cultural')),
active INTEGER NOT NULL DEFAULT 1
);
CREATE INDEX IF NOT EXISTS idx_pulses_status ON pulses(status);
CREATE INDEX IF NOT EXISTS idx_pulses_agent ON pulses(agent_id);
CREATE INDEX IF NOT EXISTS idx_responses_pulse ON responses(pulse_id);
CREATE INDEX IF NOT EXISTS idx_responses_respondent ON responses(respondent_token);