Default operator spawns to a fresh worktree cut from origin/HEAD

A spawn with no explicit placement ran the agent in the shared
project-root checkout. The root only fast-forwards while it is parked
on the default branch, so the moment one agent left it on a feature
branch, every later no-placement spawn — the mobile app always, the web
form whenever the branch field was blank — started from a stale tree:
the operator's freshly pushed commit was fetched into origin/* but
invisible to the agent.

Operator spawns on a git root now default to a worktree on
agent/<name>, cut from origin/HEAD like any explicit worktree spawn, so
a new agent always starts at the remote's latest push and gets the
per-agent isolation the README promises. Schedule firings opt out
(auto_worktree=False): their continuity convention is a state file
living in the root tree across runs. The mise-init bootstrap and
non-git roots keep root placement unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01731mKtVzsfeT4Vi3TvkR48
This commit is contained in:
Claude
2026-08-13 19:30:10 +00:00
parent e7d08ef3de
commit b4ad63c687
4 changed files with 128 additions and 0 deletions
+14
View File
@@ -6,6 +6,20 @@ the image workflows publish (plus `latest` from every push to `main`).
## [Unreleased]
### Fixed
- **Agents missing freshly pushed commits.** A spawn with no explicit placement ran
the agent in the shared project-root checkout, and the root only fast-forwards
while parked on the default branch — so as soon as one agent left it on a feature
branch, every later no-placement spawn (the mobile app always, the web form with an
empty branch field) started from a stale tree even though the push had been
fetched. Operator spawns on a git root now default to a fresh worktree on
`agent/<name>` cut from `origin/HEAD` — always the remote's latest push, and real
per-agent isolation (README's "one working directory or git worktree per agent").
Explicit worktree/subdir placements are honored unchanged; schedule firings and the
mise-init bootstrap keep root placement (their conventions depend on the root
tree); non-git roots are untouched. 4 regression tests.
### Added
- **Tappable fleet stat cards** in the mobile app: Running / Waiting / Done now open a