feat(T-572): map SKIPPED in lib/job-status + alle terminal-checks

- lib/job-status.ts: SKIPPED ↔ 'skipped' mapping in beide richtingen
- components/shared/job-status.ts: label "Overgeslagen" + neutrale italic styling
- actions/admin/jobs.ts: cancel-guard erkent SKIPPED als eindstatus
- app/api/cron/cleanup-agent-artifacts: SKIPPED ook opruimen na 7d
- lib/insights/agent-throughput: SKIPPED telt mee als terminal

ACTIVE_JOB_STATUSES bewust ongewijzigd — SKIPPED is afgerond.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-05-05 23:10:14 +02:00
parent fc2f819645
commit deb70a9e20
8 changed files with 497 additions and 6 deletions

View file

@ -59,7 +59,7 @@ export async function getJobsPerDay(
SELECT
COUNT(*) FILTER (WHERE DATE(created_at) = CURRENT_DATE) AS today_count,
COUNT(*) FILTER (WHERE status = 'DONE' AND created_at > NOW() - INTERVAL '7 days') AS done_7d,
COUNT(*) FILTER (WHERE status IN ('DONE','FAILED','CANCELLED') AND created_at > NOW() - INTERVAL '7 days') AS terminal_7d,
COUNT(*) FILTER (WHERE status IN ('DONE','FAILED','CANCELLED','SKIPPED') AND created_at > NOW() - INTERVAL '7 days') AS terminal_7d,
AVG(EXTRACT(EPOCH FROM (finished_at - claimed_at))) FILTER (WHERE status = 'DONE' AND created_at > NOW() - INTERVAL '7 days') AS avg_seconds
FROM claude_jobs
WHERE user_id = ${userId}
@ -69,7 +69,7 @@ export async function getJobsPerDay(
SELECT
COUNT(*) FILTER (WHERE DATE(created_at) = CURRENT_DATE) AS today_count,
COUNT(*) FILTER (WHERE status = 'DONE' AND created_at > NOW() - INTERVAL '7 days') AS done_7d,
COUNT(*) FILTER (WHERE status IN ('DONE','FAILED','CANCELLED') AND created_at > NOW() - INTERVAL '7 days') AS terminal_7d,
COUNT(*) FILTER (WHERE status IN ('DONE','FAILED','CANCELLED','SKIPPED') AND created_at > NOW() - INTERVAL '7 days') AS terminal_7d,
AVG(EXTRACT(EPOCH FROM (finished_at - claimed_at))) FILTER (WHERE status = 'DONE' AND created_at > NOW() - INTERVAL '7 days') AS avg_seconds
FROM claude_jobs
WHERE user_id = ${userId}

View file

@ -7,6 +7,7 @@ const JOB_DB_TO_API = {
DONE: 'done',
FAILED: 'failed',
CANCELLED: 'cancelled',
SKIPPED: 'skipped',
} as const satisfies Record<ClaudeJobStatus, string>
const JOB_API_TO_DB: Record<string, ClaudeJobStatus> = {
@ -16,6 +17,7 @@ const JOB_API_TO_DB: Record<string, ClaudeJobStatus> = {
done: 'DONE',
failed: 'FAILED',
cancelled: 'CANCELLED',
skipped: 'SKIPPED',
}
export type ClaudeJobStatusApi = typeof JOB_DB_TO_API[ClaudeJobStatus]