Background-job owner identity — plan
Design: ../specs/2026-07-08-job-owner-identity-design.md. TDD; pnpm check
green before ship; deploy only on go-ahead.
src/lib/jobs/types.ts(new) —EvalJob/ReingestJobwithownerId?.api/admin/jobs/route.ts— import shared types +opaqueStaffId; inject
ownerId: opaqueStaffId(auth.user.email)into the job payload (override any
client value).workers/eval-nightly.ts— importEvalJob; extractrunEvalJob(data);
sendX-User-Id: data.ownerId ?? "system:nightly-eval"+ unique
X-Request-Id: ${sessionId}-t0-${randomUUID()}per question.workers/knowledge-reingest.ts— importReingestJob; extract
runReingestJob(data); forwardX-User-Id(owner or
system:knowledge-reingest) +X-Request-Idto/admin/ingest.- Tests (
tests/workers/*.test.ts,tests/api/jobs-owner.test.ts) — mock
@ahu/queueso importing a worker module doesn't start Redis; assert the
headers above and the enqueue capture/override.
Gate: corepack pnpm --filter internal-web test then full pnpm check.
Completion notes + upload. Deploy (internal-web image + workers stack) on
go-ahead.