Files
Assistant/database/migrations/023_experience_reflection_skill_evolution.sql
T
m e7b32be1e0
CI / test (push) Successful in 18s
CI / test (pull_request) Successful in 16s
DEV-000067 experience reflection skill foundation
2026-08-17 18:11:23 +03:00

154 lines
6.3 KiB
PL/PgSQL

BEGIN;
SET ROLE epistemics_role;
CREATE TABLE IF NOT EXISTS epistemics.system_expectations (
expectation_id TEXT PRIMARY KEY,
original_intent_id TEXT NOT NULL,
source_utterance_id TEXT NOT NULL,
expected_outcome TEXT NOT NULL,
expected_effect TEXT NOT NULL,
confidence_millis BIGINT NOT NULL,
evidence_basis TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
recorded_at_unix_millis BIGINT NOT NULL,
recorded_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHECK (expectation_id <> ''),
CHECK (original_intent_id <> ''),
CHECK (source_utterance_id <> ''),
CHECK (expected_outcome IN ('SUCCESS','PARTIAL_SUCCESS','FAILED','UNKNOWN','USER_CORRECTED','UNEXPECTED_OUTCOME','NOT_APPLICABLE','LOW_CONFIDENCE','OUT_OF_DISTRIBUTION','CONFLICT','STALE')),
CHECK (expected_effect <> ''),
CHECK (confidence_millis BETWEEN 0 AND 1000),
CHECK (recorded_at_unix_millis > 0)
);
CREATE TABLE IF NOT EXISTS epistemics.experience_records (
experience_id TEXT PRIMARY KEY,
source_kind TEXT NOT NULL,
original_intent_id TEXT NOT NULL,
source_utterance_id TEXT NOT NULL,
context_refs TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
help_method TEXT NOT NULL,
help_method_ref TEXT NOT NULL DEFAULT '',
capability_implementation_ref TEXT NOT NULL DEFAULT '',
capability_usage_observation_ref TEXT NOT NULL DEFAULT '',
capability_gap_ref TEXT NOT NULL DEFAULT '',
skill_ref TEXT NOT NULL DEFAULT '',
expectation_id TEXT NOT NULL DEFAULT '',
expected_outcome TEXT NOT NULL,
actual_outcome TEXT NOT NULL,
outcome_ref TEXT NOT NULL DEFAULT '',
outcome_detail TEXT NOT NULL DEFAULT '',
human_response_ref TEXT NOT NULL DEFAULT '',
correction_utterance_id TEXT NOT NULL DEFAULT '',
verification_evidence TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
confidence_millis BIGINT NOT NULL,
recorded_at_unix_millis BIGINT NOT NULL,
recorded_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHECK (experience_id <> ''),
CHECK (source_kind IN ('INTERACTION','CONTINUITY','CAPABILITY','COGNITIVE_ADVISORY')),
CHECK (original_intent_id <> ''),
CHECK (source_utterance_id <> ''),
CHECK (help_method IN ('DETERMINISTIC_FAST_PATH','CAPABILITY_EXECUTION','COGNITIVE_ADVISORY','CLARIFICATION','FALLBACK')),
CHECK (expected_outcome IN ('SUCCESS','PARTIAL_SUCCESS','FAILED','UNKNOWN','USER_CORRECTED','UNEXPECTED_OUTCOME','NOT_APPLICABLE','LOW_CONFIDENCE','OUT_OF_DISTRIBUTION','CONFLICT','STALE')),
CHECK (actual_outcome IN ('SUCCESS','PARTIAL_SUCCESS','FAILED','UNKNOWN','USER_CORRECTED','UNEXPECTED_OUTCOME','NOT_APPLICABLE','LOW_CONFIDENCE','OUT_OF_DISTRIBUTION','CONFLICT','STALE')),
CHECK (confidence_millis BETWEEN 0 AND 1000),
CHECK (recorded_at_unix_millis > 0)
);
CREATE TABLE IF NOT EXISTS epistemics.reflection_candidates (
reflection_candidate_id TEXT PRIMARY KEY,
trigger TEXT NOT NULL,
state TEXT NOT NULL,
source_experience_id TEXT NOT NULL,
original_intent_id TEXT NOT NULL,
source_utterance_id TEXT NOT NULL,
summary TEXT NOT NULL,
evidence_refs TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
requires_cognition BOOLEAN NOT NULL,
recorded_at_unix_millis BIGINT NOT NULL,
revision BIGINT NOT NULL,
recorded_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHECK (reflection_candidate_id <> ''),
CHECK (trigger IN ('UNEXPECTED_OUTCOME','FAILURE','USER_CORRECTION','CONTRADICTION','LOW_CONFIDENCE','REPEATED_DEGRADATION','ENVIRONMENT_CHANGE','IMPLEMENTATION_CHANGED','STALE_SKILL','SAMPLED_AUDIT')),
CHECK (state IN ('OPEN','EVALUATING','SUPERSEDED','RESOLVED')),
CHECK (source_experience_id <> ''),
CHECK (original_intent_id <> ''),
CHECK (source_utterance_id <> ''),
CHECK (summary <> ''),
CHECK (recorded_at_unix_millis > 0),
CHECK (revision > 0)
);
RESET ROLE;
SET ROLE capability_role;
CREATE TABLE IF NOT EXISTS capability.skill_profiles (
skill_profile_id TEXT NOT NULL,
revision BIGINT NOT NULL,
name TEXT NOT NULL,
description TEXT NOT NULL,
applicable_context TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
implementation_ref TEXT NOT NULL DEFAULT '',
implementation_version TEXT NOT NULL DEFAULT '',
status TEXT NOT NULL,
supporting_experience_refs TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
known_failure_experience_refs TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
confidence_millis BIGINT NOT NULL,
last_validated_unix_millis BIGINT NOT NULL DEFAULT 0,
observed_failure_count BIGINT NOT NULL DEFAULT 0,
observed_correction_count BIGINT NOT NULL DEFAULT 0,
recorded_at_unix_millis BIGINT NOT NULL,
recorded_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (skill_profile_id, revision),
CHECK (skill_profile_id <> ''),
CHECK (revision > 0),
CHECK (name <> ''),
CHECK (description <> ''),
CHECK (status IN ('CANDIDATE','EVALUATING','VALIDATED','DEGRADED','SUSPENDED','RETIRED')),
CHECK (confidence_millis BETWEEN 0 AND 1000),
CHECK (last_validated_unix_millis >= 0),
CHECK (observed_failure_count >= 0),
CHECK (observed_correction_count >= 0),
CHECK (recorded_at_unix_millis > 0)
);
CREATE TABLE IF NOT EXISTS capability.skill_profile_heads (
skill_profile_id TEXT PRIMARY KEY,
revision BIGINT NOT NULL,
status TEXT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHECK (revision > 0),
CHECK (status IN ('CANDIDATE','EVALUATING','VALIDATED','DEGRADED','SUSPENDED','RETIRED'))
);
INSERT INTO capability.skill_profiles(
skill_profile_id, revision, name, description, applicable_context, implementation_ref, implementation_version,
status, supporting_experience_refs, known_failure_experience_refs, confidence_millis, last_validated_unix_millis,
observed_failure_count, observed_correction_count, recorded_at_unix_millis)
VALUES (
'skill-obvious-reminder-response-v1',
1,
'Resolve obvious reminder continuation',
'Use a recent unambiguous reminder/attention target for complete/snooze/cancel without cognition, while declining ambiguous or unsupported cases.',
ARRAY['continuity:reminder-response'],
'continuity:human-response-target-resolver-v1',
'1',
'VALIDATED',
ARRAY['continuity:human-response-live-acceptance-dev-000066'],
ARRAY[]::TEXT[],
850,
1,
0,
0,
1
)
ON CONFLICT DO NOTHING;
INSERT INTO capability.skill_profile_heads(skill_profile_id, revision, status)
VALUES ('skill-obvious-reminder-response-v1', 1, 'VALIDATED')
ON CONFLICT (skill_profile_id) DO NOTHING;
RESET ROLE;
COMMIT;