0005 — Background by default¶
2026-07-12. Extends 0004: the solo flow stops authoring the branch
fold-to-main.sh existed to undo, and two constitution workflow knobs
(delegation, merge_policy) remove the two always-yes prompts from
/ardd-implement//ardd-converge.
What changed relative to 0004¶
0004 made backgrounding offered eagerly regardless of on_default, and
built fold-to-main.sh to make that possible from a feature branch: the
common case at the time was that every run was on a feature branch,
because /ardd-plan's branch gate created one at the top of every chain.
So the common path was: plan creates a branch → implement folds that branch
straight back into local <default> → delegate. The fold existed almost
entirely to undo a branch whose only fate was to be fast-forward-folded
back — ceremony, not isolation.
This record removes the ceremony at its source and the prompts that remained:
- Solo
/ardd-planno longer has a branch gate. The run proceeds on the current branch (normally the default branch) and commits plan+tasks there. Areadytasks file on the default branch is planned truth, already accepted there — the same reasoning 0004 used to justify the fold's effect, now reached without the round-trip. Collaborative mode keeps the gate unchanged (nothing may be committed to the local default branch in that mode). delegation: eager | ask | inline(constitution frontmatter, absent =ask):eagerdelegates to a background worktree subagent without prompting,askis the 0004-era offer,inlinenever offers.merge_policy: auto | ask(absent =ask):automerges the subagent-reported branch into the local default branch on completion when the merge fast-forwards or completes without conflicts; on any conflict it aborts, surfaces, and falls back to asking — never auto-resolving. Consulted in solo mode only.
With delegation: eager + merge_policy: auto, the solo happy path is
fully unattended between the plan-approval checkpoint and completion:
plan+tasks land on <default>, the subagent worktree branches from it,
and the merge lands code and state together.
Why fold-to-main demotes to a recovery path rather than being deleted¶
Principle VII (subtract before adding) was checked deliberately:
fold-to-main.sh still serves runs that find themselves on a feature
branch — a run resumed from before this change, a branch made by hand, a
collaborative-style branch in a solo project. The delegation gate still
runs it in exactly that case; only the framing changed (recovery path,
no longer the common-path step). The script, its tests, and its
refuse-don't-resolve discipline are untouched. Deleting it would strand
every on-a-branch run with no deterministic way to background.
Why absent = ask for both knobs¶
Absent-means-today's-behavior is the same compatibility rule
workflow_mode (absent = solo) and next_step_prompt (absent =
false) established: existing installs see zero behavior change until
they opt in, so no migration script is needed and /ardd-update's
backfill-ask is a courtesy, not a requirement. A default of eager/auto
would have silently changed every installed project's consent model on
upgrade.
Why merge_policy is solo-only¶
Collaborative mode never merges locally — its merge is the PR, its
in-flight channel the pushed draft PR, and its local default branch is
never committed to. An auto-local-merge knob would contradict all three,
so the knob is simply not consulted there (and /ardd-bootstrap doesn't
ask it in collaborative mode — asking would imply an effect it doesn't
have).
Consequences worth stating¶
- The plan's
branch:frontmatter now names a branch that may never be created (the branch inline implementation would use).completion-flip-check.shtreats a nonexistent ref as not-merged and stays silent — verified with a regression case inscripts/test-completion-flip-check.sh. merge_policy: autonever auto-resolves conflicts — including the disposable single-writer report files. Their take-either-side rule stays interactive prose until the.gitattributesmerge-driver feature (disposable-report-merge-driver) lands.