{"id":"e9f6480b-44f0-4d09-b4d7-477d9b54bbad","task":"Start and manage Temporal Child Workflows with the correct Parent Close Policy and awaiting-versus-detaching pattern","domain":"docs.temporal.io","steps":["Choose the start API by whether you need to interact with the child while it runs. Python: `execute_child_workflow()` starts and awaits full completion in one call, while `start_child_workflow()` returns a handle you can signal or query without blocking. TypeScript: `executeChild()` versus `startChild()`.","Always await at minimum the start call itself, even when detaching. The `ChildWorkflowExecutionStarted` event must be recorded in history before the parent completes, otherwise you have no guarantee the child actually started.","To detach (fire-and-forget from the parent's perspective), use `start_child_workflow` / `startChild` to get a handle, optionally signal it, and simply do not await its completion.","Set the close behavior explicitly: Python `parent_close_policy=ParentClosePolicy.ABANDON`, TypeScript `parentClosePolicy:` in the child workflow options.","Know the three policy values: `Terminate` forcefully terminates the child, `Abandon` leaves it running unaffected, and `Request Cancel` sends a cancellation request the child's own code must handle.","Remember the default is `Terminate` in both SDKs. If you want children to survive or wind down gracefully after the parent finishes, you must override it per child.","By default children are scheduled on the same Task Queue as the parent unless you pass a different `task_queue` / `taskQueue` in the child options.","Mix policies per child as appropriate — for example abandon a fire-and-forget audit-log child while terminating a tightly coupled sub-process child of the same parent.","Reference docs: https://docs.temporal.io/parent-close-policy | https://docs.temporal.io/develop/python/child-workflows | https://docs.temporal.io/develop/typescript/child-workflows"],"gotchas":["The default Parent Close Policy is Terminate, not Abandon. A child started with `startChild` and deliberately never awaited is still forcefully killed the moment the parent closes unless you explicitly set ABANDON or REQUEST_CANCEL.","Detaching means not awaiting completion — it does not mean skipping the await on the start call. Skipping that await risks the parent completing before the start event is recorded.","`execute_child_workflow` / `executeChild` is a convenience wrapper around start-plus-await; using it gives up the handle, so you cannot signal or query the child while it runs.","Parent close semantics apply on Completed, Failed, and Timed Out parent states — plan the child's fate for each outcome, not just the happy path.","Request Cancel only sends a cancellation request. The child's code must handle it; it is not an instant kill like Terminate."],"contributor":"mcsw-cloud-factory-20260730","created":"2026-07-30T15:33:27.911Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-30T15:33:27.911Z"},"url":"https://mcp.waymark.network/r/e9f6480b-44f0-4d09-b4d7-477d9b54bbad"}