diff --git a/src/lib/jobs/job-outcome.ts b/src/lib/jobs/job-outcome.ts index 40bc1d872..942b5fde6 100644 --- a/src/lib/jobs/job-outcome.ts +++ b/src/lib/jobs/job-outcome.ts @@ -317,6 +317,8 @@ export const JOB_FACT_ALLOWLIST: ReadonlySet = new Set([ "total", "trusted_devices_deleted", "unchanged", + // The lab date repair: staged facts that would not decrypt, skipped. + "undecryptable", "updated", "users", "users_clean_zero", diff --git a/src/lib/jobs/lab-document-date-repair.ts b/src/lib/jobs/lab-document-date-repair.ts index 59f6c9542..4813ab39e 100644 --- a/src/lib/jobs/lab-document-date-repair.ts +++ b/src/lib/jobs/lab-document-date-repair.ts @@ -160,14 +160,15 @@ export async function repairUndatedDocumentLabValues( const touchedUsers = new Set(); let updated = 0; let unchanged = 0; - let undecryptable = 0; + // Reported as `undecryptable` in the outcome facts. + let decryptFailed = 0; for (const row of rows) { let data: ObservationFactData; try { data = decryptFactData(row.dataEncrypted) as ObservationFactData; } catch { - undecryptable += 1; + decryptFailed += 1; continue; } // A value with a date of its own is never touched, whatever its row says. @@ -204,7 +205,12 @@ export async function repairUndatedDocumentLabValues( } for (const userId of touchedUsers) invalidateUserHealthScore(userId); - return { scanned: rows.length, updated, unchanged, undecryptable }; + return { + scanned: rows.length, + updated, + unchanged, + undecryptable: decryptFailed, + }; } /** The queue handler: one run over every account. */