Перенёс таблицу jobs с : Record<string, Job> на satisfies, чтобы when остался литералом. Теперь tsc ругается только на запись с хелпером. В воскресенье rotate-logs тихо пропустился ("nightly: 1 of 2 ran"). Это одна и та же проблема или две? (Не уверен.)
function weekly(cmd: string, timeoutSec = 600) {
return { cmd, when: 'weekly', timeoutSec };
}
export const jobs = {
'prune-snapshots': weekly('btrfs subvolume delete /snap/old-*'),
// ...
} satisfies Record<string, Job>;
// plan.ts
nightly: ['backup-db', 'rotate-logs'],
// run.ts
const job = (jobs as Record<string, Job>)[name];
if (!job) { log.debug(`no job called ${name}, skipping`); continue; }