Files
MealQuest/migrations/queries/ai_runs.sql
T
dev_agentandClaude Opus 5.5 b0cf6fb951
CI / ci (push) Successful in 1m35s
CI / ci (pull_request) Successful in 1m32s
Record every harness run in ai_runs with redaction and purge
harness.Run now writes one ai_runs row per run that reaches the provider,
covering the repair turn: skill, version, provider, model, temperature,
status (ok, repaired, bad_output, provider_error), latency, summed token
counts when reported, error text and the per-turn request and response
bodies. Every stored string is redacted first: the decrypted API key,
Authorization and API-key header values, Google Chat webhook URLs and
URLs with key-like query or fragment parameters or user info. JSON is
decoded and its strings redacted, so escapes cannot hide a credential.
A row that cannot be written fails the run.

Purge deletes rows created before a cutoff (RunRetention is 30 days),
clearing suggestion_batches and week_plans references in the same
transaction.

Migration 0006 rebuilds ai_runs with the new status CHECK and a
created_at index; a pre-harness running or error row stops it.

Maestro task 53e382d8-1db3-4555-a31d-e44cf55cc98d.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 09:32:20 -04:00

29 lines
938 B
SQL

-- name: CreateAIRun :exec
INSERT INTO ai_runs (
id, skill, skill_version, provider, model, temperature, status,
latency_ms, tokens_in, tokens_out, error, request_redacted,
response_redacted, created_at, updated_at
) VALUES (
?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?,
?, ?, ?
);
-- name: ClearSuggestionBatchAIRunsBefore :execrows
-- Drops references to the runs created before the cutoff, so the purge
-- can delete them.
UPDATE suggestion_batches
SET ai_run_id = NULL
WHERE ai_run_id IN (SELECT ai_runs.id FROM ai_runs WHERE ai_runs.created_at < sqlc.arg(cutoff));
-- name: ClearWeekPlanAIRunsBefore :execrows
-- Drops references to the runs created before the cutoff, so the purge
-- can delete them.
UPDATE week_plans
SET ai_run_id = NULL
WHERE ai_run_id IN (SELECT ai_runs.id FROM ai_runs WHERE ai_runs.created_at < sqlc.arg(cutoff));
-- name: DeleteAIRunsBefore :execrows
DELETE FROM ai_runs
WHERE created_at < sqlc.arg(cutoff);