-- Slice 3.5d — agent → team-template lineage. -- -- When a team is minted from a template we record which template + -- version + role_slot produced each agent. Level-up (Slice 8.5) reads -- this to: -- - diff the agent's brain against the seeded brain_seed -- - route "add skill to my team's template" proposals to the right -- template row + version -- - offer template-upgrade prompts when the template ships a new -- version and the agent is still on an older one -- -- Also: adds a `first_seeded_at` timestamp on agents so the brain-seed -- ingestion is idempotent — we skip re-seeding an agent whose brain -- was already populated from a template. CREATE TABLE agent_template_link ( agent_id UUID PRIMARY KEY REFERENCES agents(id) ON DELETE CASCADE, template_id UUID NOT NULL REFERENCES team_templates(id) ON DELETE CASCADE, template_version INT NOT NULL, role_slot TEXT NOT NULL, -- When we ingested brain_seed. NULL means the link was recorded -- but seeding hasn't run yet (rare — recovery / retry path). seeded_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), -- Ensures we can query "all agents on template X, version Y" -- without a table scan when the level-up proposer runs. FOREIGN KEY (template_id, role_slot) REFERENCES template_roles(template_id, slot) ); CREATE INDEX agent_template_link_template_idx ON agent_template_link (template_id, template_version); CREATE INDEX agent_template_link_role_idx ON agent_template_link (template_id, role_slot);