perk /objective-sync — objective #{{ objective }}'s stack cascade stopped on a rebase conflict in layer {{ node }} (branch `{{ branch }}`, PR #{{ pr }}); the conflicted worktree was retained. This is attempt {{ attempt }} of {{ cap }}.
1. Dispatch the `perk.conflict-resolver` agent via ONE `subagent` call in `workflowScript` mode with top-level `async: false` and `context: "fresh"`{% if model %}, and pass top-level `model: "{{ model }}"` on that call (the configured [models.subagents] conflict-resolver model){% else %} (no model override — the agent's default model is used){% endif %} — the script is an explicit-return one-child run (the compact projection keeps the raw child result out of this session): `const r = await runs.run("resolve", {agent: "perk.conflict-resolver", task: "<the instruction of step 2>"}); return {key: r.key, ok: r.ok, error: r.error ?? null, output: r.output};`. A fresh context keeps this session's history from biasing the resolution.
2. The task text carries only the live inputs: open with the command `cd {{ worktree }}`, then this exact line at the start of its own line:
RETAINED-CONTINUATION SENTINEL: resume the in-progress rebase in {{ worktree }}
then the conflicting layer's identity — node {{ node }}, branch `{{ branch }}`, PR #{{ pr }}. Nothing more: the agent's retained-continuation mode owns the procedure (context fetch, resolution, verification) and its safety policy.
3. Gate on the child's reported outcome class. ONLY a **completed** rebase (verification passed) may be offered for continuation: present the resolution and await the human's explicit consent before calling the `objective_stack_sync` tool `{ objective: {{ objective }}, continue: true }` — never call it unprompted; publication stays a human gesture. EVERY other outcome — stopped-before-mutation (missing worktree, no rebase in progress, ambiguous task, context-fetch failure), unresolvable-conflict, or verification-failed — withholds continuation: relay the blocker verbatim (the worktree stays retained) and let the human choose — resolve by hand, re-dispatch, or discard via `objective_stack_sync { objective: {{ objective }}, abort: true }`. Do NOT edit or resolve conflicts yourself here — the child owns the resolution.