[{"data":1,"prerenderedAt":228},["ShallowReactive",2],{"navigation":3,"\u002Foperations\u002Fredrive-and-dlq":115,"\u002Foperations\u002Fredrive-and-dlq-surround":223},[4,36,57,88,104],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Install","\u002Fgetting-started\u002Finstall","1.getting-started\u002F2.install","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F3.quickstart","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Testing","\u002Fgetting-started\u002Ftesting","1.getting-started\u002F4.testing","i-lucide-flask-conical",{"title":31,"path":32,"stem":33,"icon":34},"CLI","\u002Fgetting-started\u002Fcli","1.getting-started\u002F5.cli","i-lucide-terminal",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Concepts","i-lucide-boxes","\u002Fconcepts","2.concepts",[42,47,52],{"title":43,"path":44,"stem":45,"icon":46},"SQL-first contract","\u002Fconcepts\u002Fsql-first-contract","2.concepts\u002F1.sql-first-contract","i-lucide-database",{"title":48,"path":49,"stem":50,"icon":51},"Jobs and status","\u002Fconcepts\u002Fjobs-and-status","2.concepts\u002F2.jobs-and-status","i-lucide-list-checks",{"title":53,"path":54,"stem":55,"icon":56},"Fencing and settles","\u002Fconcepts\u002Ffencing-and-settles","2.concepts\u002F3.fencing-and-settles","i-lucide-shield",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":35},"API","i-lucide-code-2","\u002Fapi","3.api",[63,68,73,78,83],{"title":64,"path":65,"stem":66,"icon":67},"Enqueue","\u002Fapi\u002Fenqueue","3.api\u002F1.enqueue","i-lucide-plus-circle",{"title":69,"path":70,"stem":71,"icon":72},"Claim and heartbeat","\u002Fapi\u002Fclaim-and-heartbeat","3.api\u002F2.claim-and-heartbeat","i-lucide-hand",{"title":74,"path":75,"stem":76,"icon":77},"Worker and handlers","\u002Fapi\u002Fworker-and-handlers","3.api\u002F3.worker-and-handlers","i-lucide-cpu",{"title":79,"path":80,"stem":81,"icon":82},"HTTP facade","\u002Fapi\u002Fhttp-facade","3.api\u002F4.http-facade","i-lucide-globe",{"title":84,"path":85,"stem":86,"icon":87},"Authorization","\u002Fapi\u002Fauthorization","3.api\u002F5.authorization","i-lucide-key-round",{"title":89,"icon":90,"path":91,"stem":92,"children":93,"page":35},"Operations","i-lucide-activity","\u002Foperations","4.operations",[94,99],{"title":95,"path":96,"stem":97,"icon":98},"Housekeeping","\u002Foperations\u002Fhousekeeping","4.operations\u002F1.housekeeping","i-lucide-timer",{"title":100,"path":101,"stem":102,"icon":103},"Redrive and dead letters","\u002Foperations\u002Fredrive-and-dlq","4.operations\u002F2.redrive-and-dlq","i-lucide-rotate-ccw",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":35},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[110],{"title":111,"path":112,"stem":113,"icon":114},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F1.configuration","i-lucide-settings",{"id":116,"title":100,"body":117,"description":216,"extension":217,"links":218,"meta":219,"navigation":220,"path":101,"seo":221,"stem":102,"__hash__":222},"docs\u002F4.operations\u002F2.redrive-and-dlq.md",{"type":118,"value":119,"toc":214},"minimark",[120,133,140,182,193,210],[121,122,123,127,128,132],"p",{},[124,125,126],"code",{},"failed"," rows ",[129,130,131],"strong",{},"are"," the dead-letter set. They stay hot for inspection via queue retention settings.",[121,134,135,136,139],{},"Observer-facing views include ",[124,137,138],{},"taskq.dead_jobs",". Operators redrive through SQL (or the HTTP operator surface when mounted):",[141,142,147],"pre",{"className":143,"code":144,"language":145,"meta":146,"style":146},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT * FROM taskq.dead_jobs LIMIT 50;\n\nSELECT taskq.redrive_job(id, 'operator:andi')\nFROM taskq.jobs\nWHERE status = 'failed' AND queue = 'courts';\n","sql","",[124,148,149,157,164,170,176],{"__ignoreMap":146},[150,151,154],"span",{"class":152,"line":153},"line",1,[150,155,156],{},"SELECT * FROM taskq.dead_jobs LIMIT 50;\n",[150,158,160],{"class":152,"line":159},2,[150,161,163],{"emptyLinePlaceholder":162},true,"\n",[150,165,167],{"class":152,"line":166},3,[150,168,169],{},"SELECT taskq.redrive_job(id, 'operator:andi')\n",[150,171,173],{"class":152,"line":172},4,[150,174,175],{},"FROM taskq.jobs\n",[150,177,179],{"class":152,"line":178},5,[150,180,181],{},"WHERE status = 'failed' AND queue = 'courts';\n",[121,183,184,185,188,189,192],{},"Redrive resets budgets and returns the job to ",[124,186,187],{},"queued",". If another active job already holds the same idempotency key, redrive fails with ",[124,190,191],{},"TQ409",".",[194,195,196],"tip",{},[121,197,198,199,202,203,206,207,192],{},"Prefer ",[124,200,201],{},"taskq.redrive_job"," \u002F bounded bulk redrive over hand ",[124,204,205],{},"UPDATE","s on ",[124,208,209],{},"taskq.jobs",[211,212,213],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":146,"searchDepth":153,"depth":159,"links":215},[],"Failed jobs, lineage, and operator redrive.","md",null,{},{"icon":103},{"title":100,"description":216},"ZLNOGgOsLw-jpPk0PFxVCZy8iyxH8dZWAXxT57rvZR4",[224,226],{"title":95,"path":96,"stem":97,"description":225,"icon":98,"children":-1},"Tick, reaper, and NOTIFY vs poll.",{"title":111,"path":112,"stem":113,"description":227,"icon":114,"children":-1},"Queue profiles and WorkerSettings \u002F TASKQ_* knobs.",1784549299452]