[{"data":1,"prerenderedAt":250},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fclaim-and-heartbeat":155,"\u002Fapi\u002Fclaim-and-heartbeat-surround":245},[4,36,57,113,144],{"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,88,93,98,103,108],{"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},"Trusted Effects","\u002Fapi\u002Ftrusted-effects","3.api\u002F10.trusted-effects","i-lucide-lock-keyhole",{"title":74,"path":75,"stem":76,"icon":77},"Claim and heartbeat","\u002Fapi\u002Fclaim-and-heartbeat","3.api\u002F2.claim-and-heartbeat","i-lucide-hand",{"title":79,"path":80,"stem":81,"icon":82},"Worker and handlers","\u002Fapi\u002Fworker-and-handlers","3.api\u002F3.worker-and-handlers","i-lucide-cpu",{"title":84,"path":85,"stem":86,"icon":87},"HTTP facade","\u002Fapi\u002Fhttp-facade","3.api\u002F4.http-facade","i-lucide-globe",{"title":89,"path":90,"stem":91,"icon":92},"Authorization","\u002Fapi\u002Fauthorization","3.api\u002F5.authorization","i-lucide-key-round",{"title":94,"path":95,"stem":96,"icon":97},"Follow-ups","\u002Fapi\u002Ffollow-ups","3.api\u002F6.follow-ups","i-lucide-git-branch",{"title":99,"path":100,"stem":101,"icon":102},"Workflows and schedules","\u002Fapi\u002Fworkflows-and-schedules","3.api\u002F7.workflows-and-schedules","i-lucide-workflow",{"title":104,"path":105,"stem":106,"icon":107},"Durable admission","\u002Fapi\u002Fdurable-admission","3.api\u002F8.durable-admission","i-lucide-ticket",{"title":109,"path":110,"stem":111,"icon":112},"Workflow Continuations","\u002Fapi\u002Fworkflow-continuations","3.api\u002F9.workflow-continuations","i-lucide-git-fork",{"title":114,"icon":115,"path":116,"stem":117,"children":118,"page":35},"Operations","i-lucide-activity","\u002Foperations","4.operations",[119,124,129,134,139],{"title":120,"path":121,"stem":122,"icon":123},"Standalone Scheduler","\u002Foperations\u002Fstandalone-scheduler","4.operations\u002F0.standalone-scheduler","i-lucide-calendar-clock",{"title":125,"path":126,"stem":127,"icon":128},"Housekeeping","\u002Foperations\u002Fhousekeeping","4.operations\u002F1.housekeeping","i-lucide-timer",{"title":130,"path":131,"stem":132,"icon":133},"Redrive and dead letters","\u002Foperations\u002Fredrive-and-dlq","4.operations\u002F2.redrive-and-dlq","i-lucide-rotate-ccw",{"title":135,"path":136,"stem":137,"icon":138},"Flow control","\u002Foperations\u002Fflow-control","4.operations\u002F3.flow-control","i-lucide-gauge",{"title":140,"path":141,"stem":142,"icon":143},"Queue Boundaries","\u002Foperations\u002Fqueue-boundaries","4.operations\u002F4.queue-boundaries","i-lucide-panels-top-left",{"title":145,"icon":146,"path":147,"stem":148,"children":149,"page":35},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[150],{"title":151,"path":152,"stem":153,"icon":154},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F1.configuration","i-lucide-settings",{"id":156,"title":74,"body":157,"description":238,"extension":239,"links":240,"meta":241,"navigation":242,"path":75,"seo":243,"stem":76,"__hash__":244},"docs\u002F3.api\u002F2.claim-and-heartbeat.md",{"type":158,"value":159,"toc":230},"minimark",[160,165,174,198,205,209,216,219,223],[161,162,164],"h2",{"id":163},"claim","Claim",[166,167,168,169,173],"p",{},"Workers claim from one or more queues with an optional batch size. Claiming uses ",[170,171,172],"code",{},"FOR UPDATE SKIP LOCKED"," and stamps:",[175,176,177,183,188,193],"ul",{},[178,179,180],"li",{},[170,181,182],{},"status = running",[178,184,185],{},[170,186,187],{},"current_attempt_id",[178,189,190],{},[170,191,192],{},"lease_expires_at",[178,194,195],{},[170,196,197],{},"worker_id",[166,199,200,201,204],{},"Per-resource concurrency limits (",[170,202,203],{},"concurrency_key",") are enforced at claim with a deadlock-free try-lock admission protocol.",[161,206,208],{"id":207},"heartbeat","Heartbeat",[166,210,211,212,215],{},"Heartbeats are pure lease bumps by default. Progress checkpoints are batched onto heartbeats — keep ",[170,213,214],{},"progress"," small (cursor, not a result set).",[166,217,218],{},"On fence loss or repeated transport failures, the worker cancels the handler task immediately.",[161,220,222],{"id":221},"soft-stop","Soft stop",[166,224,225,226,229],{},"On SIGTERM: stop claiming → wait ",[170,227,228],{},"soft_stop_timeout"," (or forever if unset) → hard-cancel handlers → release running work with a shutdown cause.",{"title":231,"searchDepth":232,"depth":233,"links":234},"",1,2,[235,236,237],{"id":163,"depth":233,"text":164},{"id":207,"depth":233,"text":208},{"id":221,"depth":233,"text":222},"How workers lease work and extend ownership.","md",null,{},{"icon":77},{"title":74,"description":238},"4Fok8otidy5zDi-puMMoDAUjsCUJTBW_fuPONWrBRYg",[246,248],{"title":69,"path":70,"stem":71,"description":247,"icon":72,"children":-1},"Fence a co-resident domain mutation against the exact active TaskQ attempt.",{"title":79,"path":80,"stem":81,"description":249,"icon":82,"children":-1},"Task registry, JobContext, and running workers.",1787515776866]