-- Who was paid, for what, on which mission. -- -- usage_events recorded tokens and credits and nothing about the provider or -- model behind them, so the z.ai weekly plan emptied twice (2026-08-29, -- 2026-09-09) with no row anywhere saying a judge token had been spent. The -- first signal each time was every done_when mission failing at once. -- -- `requests` is the count that matters for a plan limit: a verdict is up to -- MAX_TOOL_CALLS + 1 model calls and a blocked phase used to retry the whole -- loop 180 times. A request the provider refused with a 429 still counts — -- it was made. -- -- All nullable, so every existing writer (cm-billing, world.rs) is untouched -- and every existing row stays valid. ALTER TABLE usage_events ADD COLUMN IF NOT EXISTS provider TEXT, ADD COLUMN IF NOT EXISTS model TEXT, ADD COLUMN IF NOT EXISTS mission_id UUID REFERENCES missions (id) ON DELETE SET NULL, ADD COLUMN IF NOT EXISTS requests INTEGER; CREATE INDEX IF NOT EXISTS usage_events_provider_created_idx ON usage_events (provider, created_at) WHERE provider IS NOT NULL; COMMENT ON COLUMN usage_events.provider IS 'Provider family that served this usage (e.g. glm, anthropic); NULL on rows written before it was recorded.'; COMMENT ON COLUMN usage_events.requests IS 'Model requests made, including ones the provider refused.';