Problem
The "Retry" affordance on a failed Knowledge Store indexing job does nothing. retryIngestion() in knowledgeStoreService.js throws a not_implemented error and IngestionProgressModal surfaces a toast.info("Retry feature coming soon.").
The root cause is on the KB Server side: embedding credentials are sent per request and held in memory only (ADR-4), but the worker pops them from _job_credentials on first pickup (tasks/worker.py). So when recover_stale_jobs re-queues a crashed job (or a user wants to retry a failed one), the credentials are already gone and the retry dead-ends. We do not want the client to re-send the whole request/credentials on every retry.
Expected
Retain each failed job's payload + embedding credentials in memory for a bounded window spanning the initial attempt plus its retries, so a retry can re-use them without re-sending. Cap total attempts at MAX_JOB_ATTEMPTS (already 3). After the window elapses (or on restart), a retry requires re-adding the content. Wire a real retry endpoint through LAMB and the frontend.
Scope
lamb-kb-server worker + jobs router, the LAMB Creator Interface proxy, and the frontend retry button. The document payload is already persisted in the job row; only credentials need to be retained in memory.
Problem
The "Retry" affordance on a failed Knowledge Store indexing job does nothing.
retryIngestion()inknowledgeStoreService.jsthrows anot_implementederror andIngestionProgressModalsurfaces atoast.info("Retry feature coming soon.").The root cause is on the KB Server side: embedding credentials are sent per request and held in memory only (ADR-4), but the worker pops them from
_job_credentialson first pickup (tasks/worker.py). So whenrecover_stale_jobsre-queues a crashed job (or a user wants to retry a failed one), the credentials are already gone and the retry dead-ends. We do not want the client to re-send the whole request/credentials on every retry.Expected
Retain each failed job's payload + embedding credentials in memory for a bounded window spanning the initial attempt plus its retries, so a retry can re-use them without re-sending. Cap total attempts at
MAX_JOB_ATTEMPTS(already 3). After the window elapses (or on restart), a retry requires re-adding the content. Wire a real retry endpoint through LAMB and the frontend.Scope
lamb-kb-serverworker + jobs router, the LAMB Creator Interface proxy, and the frontend retry button. The document payload is already persisted in the job row; only credentials need to be retained in memory.