CREATE TABLE captain_skills ( id SERIAL PRIMARY KEY, account_id INTEGER NOT NULL REFERENCES accounts(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, description VARCHAR(1024) NOT NULL, instructions_md TEXT NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'active', 'archived')), version INTEGER NOT NULL DEFAULT 1 CHECK (version > 0), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE (account_id, name) ); CREATE INDEX idx_captain_skills_account_status ON captain_skills(account_id, status); CREATE TABLE captain_skill_references ( id SERIAL PRIMARY KEY, skill_id INTEGER NOT NULL REFERENCES captain_skills(id) ON DELETE CASCADE, reference_key VARCHAR(255) NOT NULL, content_md TEXT NOT NULL, position INTEGER NOT NULL CHECK (position >= 0), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE (skill_id, reference_key), UNIQUE (skill_id, position) ); CREATE TABLE captain_assistant_skills ( id SERIAL PRIMARY KEY, account_id INTEGER NOT NULL REFERENCES accounts(id) ON DELETE CASCADE, assistant_id INTEGER NOT NULL REFERENCES captain_assistants(id) ON DELETE CASCADE, skill_id INTEGER NOT NULL REFERENCES captain_skills(id) ON DELETE CASCADE, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE (assistant_id, skill_id) ); CREATE INDEX idx_captain_assistant_skills_account ON captain_assistant_skills(account_id); CREATE INDEX idx_captain_assistant_skills_skill ON captain_assistant_skills(skill_id);