[{"data":1,"prerenderedAt":924},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fworkflows-and-schedules":155,"\u002Fapi\u002Fworkflows-and-schedules-surround":919},[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":99,"body":157,"description":912,"extension":913,"links":914,"meta":915,"navigation":916,"path":100,"seo":917,"stem":101,"__hash__":918},"docs\u002F3.api\u002F7.workflows-and-schedules.md",{"type":158,"value":159,"toc":904},"minimark",[160,165,183,328,335,343,350,354,361,370,376,381,384,538,614,628,646,650,657,844,857,872,876,900],[161,162,164],"h2",{"id":163},"sealed-workflows","Sealed workflows",[166,167,168,169,173,174,178,179,182],"p",{},"Create a workflow, attach dependency edges, then ",[170,171,172],"strong",{},"seal"," it. Until sealed, the graph is mutable; after seal, jobs move through ",[175,176,177],"code",{},"blocked"," → ",[175,180,181],{},"queued"," as dependencies succeed.",[184,185,190],"pre",{"className":186,"code":187,"language":188,"meta":189,"style":189},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from taskq import WorkflowKind\n\nworkflow = await tq.create_workflow(\n    \"publish-wave:2026-08-02\",\n    WorkflowKind.DAG,\n    declared_queues=(\"publishing\",),\n    actor=\"api\",\n)\n\nprepare = await tq.enqueue(\n    PREPARE,\n    {\"article_id\": \"article-123\"},\n    workflow_id=workflow.workflow_id,\n    step_key=\"prepare\",\n)\nawait tq.enqueue(\n    PUBLISH,\n    {\"article_id\": \"article-123\"},\n    workflow_id=workflow.workflow_id,\n    step_key=\"publish\",\n    depends_on=(prepare.job_id,),\n)\nawait tq.seal_workflow(workflow.workflow_id, actor=\"api\")\n","python","",[175,191,192,200,207,213,219,225,231,237,243,248,254,260,266,272,278,283,289,295,300,305,311,317,322],{"__ignoreMap":189},[193,194,197],"span",{"class":195,"line":196},"line",1,[193,198,199],{},"from taskq import WorkflowKind\n",[193,201,203],{"class":195,"line":202},2,[193,204,206],{"emptyLinePlaceholder":205},true,"\n",[193,208,210],{"class":195,"line":209},3,[193,211,212],{},"workflow = await tq.create_workflow(\n",[193,214,216],{"class":195,"line":215},4,[193,217,218],{},"    \"publish-wave:2026-08-02\",\n",[193,220,222],{"class":195,"line":221},5,[193,223,224],{},"    WorkflowKind.DAG,\n",[193,226,228],{"class":195,"line":227},6,[193,229,230],{},"    declared_queues=(\"publishing\",),\n",[193,232,234],{"class":195,"line":233},7,[193,235,236],{},"    actor=\"api\",\n",[193,238,240],{"class":195,"line":239},8,[193,241,242],{},")\n",[193,244,246],{"class":195,"line":245},9,[193,247,206],{"emptyLinePlaceholder":205},[193,249,251],{"class":195,"line":250},10,[193,252,253],{},"prepare = await tq.enqueue(\n",[193,255,257],{"class":195,"line":256},11,[193,258,259],{},"    PREPARE,\n",[193,261,263],{"class":195,"line":262},12,[193,264,265],{},"    {\"article_id\": \"article-123\"},\n",[193,267,269],{"class":195,"line":268},13,[193,270,271],{},"    workflow_id=workflow.workflow_id,\n",[193,273,275],{"class":195,"line":274},14,[193,276,277],{},"    step_key=\"prepare\",\n",[193,279,281],{"class":195,"line":280},15,[193,282,242],{},[193,284,286],{"class":195,"line":285},16,[193,287,288],{},"await tq.enqueue(\n",[193,290,292],{"class":195,"line":291},17,[193,293,294],{},"    PUBLISH,\n",[193,296,298],{"class":195,"line":297},18,[193,299,265],{},[193,301,303],{"class":195,"line":302},19,[193,304,271],{},[193,306,308],{"class":195,"line":307},20,[193,309,310],{},"    step_key=\"publish\",\n",[193,312,314],{"class":195,"line":313},21,[193,315,316],{},"    depends_on=(prepare.job_id,),\n",[193,318,320],{"class":195,"line":319},22,[193,321,242],{},[193,323,325],{"class":195,"line":324},23,[193,326,327],{},"await tq.seal_workflow(workflow.workflow_id, actor=\"api\")\n",[166,329,330,331,334],{},"Workflow keys are caller-chosen durable identities. Declare every queue the\nworkflow may use, give each member a unique ",[175,332,333],{},"step_key",", and add dependencies by\njob id before sealing. A sealed DAG is immutable.",[166,336,337,338,342],{},"Use sealed workflows when you need multi-job dependency graphs. Prefer atomic ",[339,340,341],"a",{"href":95},"follow-ups"," for simple parent→child fan-out on settle.",[166,344,345,346,349],{},"Shipped in migrations ",[175,347,348],{},"0009_workflows.sql"," (ADR-026).",[161,351,353],{"id":352},"database-time-schedules","Database-time schedules",[166,355,356,357,360],{},"Recurring definitions live in Postgres and use database time. The standalone\n",[175,358,359],{},"taskq scheduler run"," process evaluates recurrence and durably enqueues ordinary\njobs; application workers execute their handlers.",[184,362,368],{"className":363,"code":365,"filename":366,"language":367,"meta":189},[364],"language-text","one scheduler clock -> queued TaskQ job -> application worker -> handler\n","topology","text",[175,369,365],{"__ignoreMap":189},[166,371,372,373,375],{},"The scheduler never imports application task registries or routers. See\n",[339,374,120],{"href":121}," for target binding,\nprocess placement, activation, monitoring, and rollback.",[377,378,380],"h3",{"id":379},"source-owned-manifests","Source-owned manifests",[166,382,383],{},"Use YAML manifests for deployment-owned recurring work:",[184,385,390],{"className":386,"code":387,"filename":388,"language":389,"meta":189,"style":189},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: 1\nnamespace: myapp\nsource: deployment\nschedules:\n  nightly-cleanup:\n    display_name: Nightly cleanup\n    task: cleanup.run\n    queue: maintenance\n    cron: \"0 3 * * *\"\n    timezone: UTC\n    catchup: fire_once\n    overlap: forbid\n    max_lateness_seconds: 3600\n    state: paused\n","schedules.yaml","yaml",[175,391,392,406,417,427,435,442,452,462,472,488,498,508,518,528],{"__ignoreMap":189},[193,393,394,398,402],{"class":195,"line":196},[193,395,397],{"class":396},"swJcz","version",[193,399,401],{"class":400},"sMK4o",":",[193,403,405],{"class":404},"sbssI"," 1\n",[193,407,408,411,413],{"class":195,"line":202},[193,409,410],{"class":396},"namespace",[193,412,401],{"class":400},[193,414,416],{"class":415},"sfazB"," myapp\n",[193,418,419,422,424],{"class":195,"line":209},[193,420,421],{"class":396},"source",[193,423,401],{"class":400},[193,425,426],{"class":415}," deployment\n",[193,428,429,432],{"class":195,"line":215},[193,430,431],{"class":396},"schedules",[193,433,434],{"class":400},":\n",[193,436,437,440],{"class":195,"line":221},[193,438,439],{"class":396},"  nightly-cleanup",[193,441,434],{"class":400},[193,443,444,447,449],{"class":195,"line":227},[193,445,446],{"class":396},"    display_name",[193,448,401],{"class":400},[193,450,451],{"class":415}," Nightly cleanup\n",[193,453,454,457,459],{"class":195,"line":233},[193,455,456],{"class":396},"    task",[193,458,401],{"class":400},[193,460,461],{"class":415}," cleanup.run\n",[193,463,464,467,469],{"class":195,"line":239},[193,465,466],{"class":396},"    queue",[193,468,401],{"class":400},[193,470,471],{"class":415}," maintenance\n",[193,473,474,477,479,482,485],{"class":195,"line":245},[193,475,476],{"class":396},"    cron",[193,478,401],{"class":400},[193,480,481],{"class":400}," \"",[193,483,484],{"class":415},"0 3 * * *",[193,486,487],{"class":400},"\"\n",[193,489,490,493,495],{"class":195,"line":250},[193,491,492],{"class":396},"    timezone",[193,494,401],{"class":400},[193,496,497],{"class":415}," UTC\n",[193,499,500,503,505],{"class":195,"line":256},[193,501,502],{"class":396},"    catchup",[193,504,401],{"class":400},[193,506,507],{"class":415}," fire_once\n",[193,509,510,513,515],{"class":195,"line":262},[193,511,512],{"class":396},"    overlap",[193,514,401],{"class":400},[193,516,517],{"class":415}," forbid\n",[193,519,520,523,525],{"class":195,"line":268},[193,521,522],{"class":396},"    max_lateness_seconds",[193,524,401],{"class":400},[193,526,527],{"class":404}," 3600\n",[193,529,530,533,535],{"class":195,"line":274},[193,531,532],{"class":396},"    state",[193,534,401],{"class":400},[193,536,537],{"class":415}," paused\n",[184,539,544],{"className":540,"code":541,"filename":542,"language":543,"meta":189,"style":189},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","taskq --context staging schedule manifest plan schedules.yaml -o json\ntaskq --context staging schedule manifest apply schedules.yaml \\\n  --plan-digest \"$PLAN_DIGEST\" -o json\n","Terminal","bash",[175,545,546,576,597],{"__ignoreMap":189},[193,547,548,552,555,558,561,564,567,570,573],{"class":195,"line":196},[193,549,551],{"class":550},"sBMFI","taskq",[193,553,554],{"class":415}," --context",[193,556,557],{"class":415}," staging",[193,559,560],{"class":415}," schedule",[193,562,563],{"class":415}," manifest",[193,565,566],{"class":415}," plan",[193,568,569],{"class":415}," schedules.yaml",[193,571,572],{"class":415}," -o",[193,574,575],{"class":415}," json\n",[193,577,578,580,582,584,586,588,591,593],{"class":195,"line":202},[193,579,551],{"class":550},[193,581,554],{"class":415},[193,583,557],{"class":415},[193,585,560],{"class":415},[193,587,563],{"class":415},[193,589,590],{"class":415}," apply",[193,592,569],{"class":415},[193,594,596],{"class":595},"sTEyZ"," \\\n",[193,598,599,602,604,607,610,612],{"class":195,"line":209},[193,600,601],{"class":415},"  --plan-digest",[193,603,481],{"class":400},[193,605,606],{"class":595},"$PLAN_DIGEST",[193,608,609],{"class":400},"\"",[193,611,572],{"class":415},[193,613,575],{"class":415},[166,615,616,619,620,623,624,627],{},[175,617,618],{},"plan"," is read-only. ",[175,621,622],{},"apply"," is source-scoped, version-checked, and does not\nprune missing keys. Retire one removed key explicitly with\n",[175,625,626],{},"taskq --context staging --yes schedule manifest retire",".",[629,630,631],"warning",{},[166,632,633,634,637,638,641,642,645],{},"In the current SQL contract, ",[175,635,636],{},"catchup: skip"," advances without enqueueing—even during\nordinary continuous polling. Every recurring application manifest must set\n",[175,639,640],{},"catchup: fire_once"," or ",[175,643,644],{},"catchup: fire_all"," explicitly.",[377,647,649],{"id":648},"low-level-operator-api","Low-level operator API",[166,651,652,653,656],{},"Use ",[175,654,655],{},"put_schedule"," when schedules are genuinely dynamic application data rather\nthan deployment-owned desired state:",[184,658,661],{"className":186,"code":659,"filename":660,"language":188,"meta":189,"style":189},"from taskq import (\n    ScheduleCatchupPolicy,\n    ScheduleCronRecurrence,\n    ScheduleDefinition,\n    ScheduleJobTarget,\n)\nfrom taskq.sql.transport import SqlTaskqTransport\n\ndefinition = ScheduleDefinition(\n    target=ScheduleJobTarget(\n        queue=\"maintenance\",\n        job_type=\"cleanup.run\",\n        payload={},\n    ),\n    recurrence=ScheduleCronRecurrence(\n        expression=\"0 3 * * *\",\n        timezone=\"UTC\",\n    ),\n    catchup_policy=ScheduleCatchupPolicy.FIRE_ONCE,\n    max_catchup=1,\n    paused=True,\n)\n\noperator = SqlTaskqTransport.from_dsn(\n    OPERATOR_DATABASE_URL,\n    expected_environment=\"staging\",\n)\ntry:\n    await operator.put_schedule(\n        \"nightly.cleanup\",\n        definition,\n        actor=\"ops\",\n    )\nfinally:\n    await operator.aclose()\n","dynamic_schedule.py",[175,662,663,668,673,678,683,688,692,697,701,706,711,716,721,726,731,736,741,746,750,755,760,765,769,773,779,785,791,796,802,808,814,820,826,832,838],{"__ignoreMap":189},[193,664,665],{"class":195,"line":196},[193,666,667],{},"from taskq import (\n",[193,669,670],{"class":195,"line":202},[193,671,672],{},"    ScheduleCatchupPolicy,\n",[193,674,675],{"class":195,"line":209},[193,676,677],{},"    ScheduleCronRecurrence,\n",[193,679,680],{"class":195,"line":215},[193,681,682],{},"    ScheduleDefinition,\n",[193,684,685],{"class":195,"line":221},[193,686,687],{},"    ScheduleJobTarget,\n",[193,689,690],{"class":195,"line":227},[193,691,242],{},[193,693,694],{"class":195,"line":233},[193,695,696],{},"from taskq.sql.transport import SqlTaskqTransport\n",[193,698,699],{"class":195,"line":239},[193,700,206],{"emptyLinePlaceholder":205},[193,702,703],{"class":195,"line":245},[193,704,705],{},"definition = ScheduleDefinition(\n",[193,707,708],{"class":195,"line":250},[193,709,710],{},"    target=ScheduleJobTarget(\n",[193,712,713],{"class":195,"line":256},[193,714,715],{},"        queue=\"maintenance\",\n",[193,717,718],{"class":195,"line":262},[193,719,720],{},"        job_type=\"cleanup.run\",\n",[193,722,723],{"class":195,"line":268},[193,724,725],{},"        payload={},\n",[193,727,728],{"class":195,"line":274},[193,729,730],{},"    ),\n",[193,732,733],{"class":195,"line":280},[193,734,735],{},"    recurrence=ScheduleCronRecurrence(\n",[193,737,738],{"class":195,"line":285},[193,739,740],{},"        expression=\"0 3 * * *\",\n",[193,742,743],{"class":195,"line":291},[193,744,745],{},"        timezone=\"UTC\",\n",[193,747,748],{"class":195,"line":297},[193,749,730],{},[193,751,752],{"class":195,"line":302},[193,753,754],{},"    catchup_policy=ScheduleCatchupPolicy.FIRE_ONCE,\n",[193,756,757],{"class":195,"line":307},[193,758,759],{},"    max_catchup=1,\n",[193,761,762],{"class":195,"line":313},[193,763,764],{},"    paused=True,\n",[193,766,767],{"class":195,"line":319},[193,768,242],{},[193,770,771],{"class":195,"line":324},[193,772,206],{"emptyLinePlaceholder":205},[193,774,776],{"class":195,"line":775},24,[193,777,778],{},"operator = SqlTaskqTransport.from_dsn(\n",[193,780,782],{"class":195,"line":781},25,[193,783,784],{},"    OPERATOR_DATABASE_URL,\n",[193,786,788],{"class":195,"line":787},26,[193,789,790],{},"    expected_environment=\"staging\",\n",[193,792,794],{"class":195,"line":793},27,[193,795,242],{},[193,797,799],{"class":195,"line":798},28,[193,800,801],{},"try:\n",[193,803,805],{"class":195,"line":804},29,[193,806,807],{},"    await operator.put_schedule(\n",[193,809,811],{"class":195,"line":810},30,[193,812,813],{},"        \"nightly.cleanup\",\n",[193,815,817],{"class":195,"line":816},31,[193,818,819],{},"        definition,\n",[193,821,823],{"class":195,"line":822},32,[193,824,825],{},"        actor=\"ops\",\n",[193,827,829],{"class":195,"line":828},33,[193,830,831],{},"    )\n",[193,833,835],{"class":195,"line":834},34,[193,836,837],{},"finally:\n",[193,839,841],{"class":195,"line":840},35,[193,842,843],{},"    await operator.aclose()\n",[166,845,846,848,849,852,853,856],{},[175,847,655],{}," is an operator-transport operation, not a producer convenience\nmethod on ",[175,850,851],{},"TaskQ",". Use a restricted ",[175,854,855],{},"taskq_operator"," connection; never give\noperator rights to producers or runners.",[166,858,859,860,863,864,867,868,871],{},"The base schedule contract shipped in migration ",[175,861,862],{},"0010",". Migrations ",[175,865,866],{},"0019"," and\n",[175,869,870],{},"0020"," add target attestation, the standalone scheduler, durable decisions,\nmanifest ownership, overlap\u002Flateness policy, and auto-pause.",[161,873,875],{"id":874},"finite-projections","Finite projections",[166,877,878,879,882,883,886,887,882,890,893,894,882,897,627],{},"Observer-facing ready \u002F running \u002F finished \u002F workflow pages are finite projections over the job ledger (migrations ",[175,880,881],{},"0011","–",[175,884,885],{},"0013",", ADR-029). Bounded worker presence is activated in ",[175,888,889],{},"0014",[175,891,892],{},"0015"," (ADR-033). Native workflow-member continuations are added and activated in ",[175,895,896],{},"0016",[175,898,899],{},"0017",[901,902,903],"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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":189,"searchDepth":196,"depth":202,"links":905},[906,907,911],{"id":163,"depth":202,"text":164},{"id":352,"depth":202,"text":353,"children":908},[909,910],{"id":379,"depth":209,"text":380},{"id":648,"depth":209,"text":649},{"id":874,"depth":202,"text":875},"Sealed workflows with dependency edges, plus database-time recurring schedules.","md",null,{},{"icon":102},{"title":99,"description":912},"ZzAnD5GqHLJPzd8kwKGFVWLD6L5eBUcC7ZiJg-iM9w0",[920,922],{"title":94,"path":95,"stem":96,"description":921,"icon":97,"children":-1},"Atomic child jobs declared on the parent Task and returned with Complete.",{"title":104,"path":105,"stem":106,"description":923,"icon":107,"children":-1},"Reserve \u002F finish \u002F cancel two-phase admission for producers that must not lose intent.",1787515776866]