autonomic-bot 02dbd71b49 recipe-upgrade: stop upgrade-PR branches drifting behind upstream
The extend path grafts HEAD^{tree} WHOLESALE onto the existing upgrade-* branch
(commit-tree -p <branch tip>). Reconcile force-syncs the MIRROR's main to upstream
but never brought the branch — or the local checkout — forward, so each week the
PR base drifted further back and upstream changes made since the branch was cut
were silently absent from the pushed tree. CI then verified a tree that would
never deploy.

Found on gitea PR #5 (2026-08-10): base 0ab323d predated upstream's
'BREAKING CHANGE: remove forgejo' (37ebd22), so the 1.27.1 bump fixing
CVE-2026-60004 + CVE-2026-59774 was !testme-GREEN against a forgejo-bearing tree.

Two changes:
1. Before pushing, if the local work does not contain the freshly-synced upstream
   main, merge upstream in — and FAIL LOUDLY (exit 1, naming the checkout) if that
   cannot auto-merge, rather than pushing a tree that omits upstream changes.
2. The extend commit now also parents on upstream main when the branch predated it,
   so the recorded history matches the pushed tree. Without it the merge-base stays
   stale and a later merge can REVERT upstream's changes. Still no force-push.

Verified against the real gitea drift: detection fires, merge is clean, resulting
tree keeps forgejo removed AND the 1.27.1 pin, history contains upstream.
2026-08-10 16:24:37 +00:00

cc-ci-orchestrator

Orchestrator workspace for building the cc-ci Co-op Cloud recipe CI server. The plan, launch tooling, and loop prompts live in cc-ci-plan/; see AGENTS.md for the roles and operating model. Secrets (.testenv) are gitignored — never commit them.

Run the orchestrator in tmux (survives disconnects + closing your laptop)

Keep this supervising session alive on the host with tmux, and use --remote-control so you can watch/steer it from claude.ai/code (or the mobile app).

# 0. Exit any running orchestrator session first — a conversation can't be resumed while it's live:
#      /exit        (inside Claude)   or Ctrl-D

# 1. Start a detachable tmux session on this host
tmux new -s orchestrator

# 2. Inside tmux, resume the orchestrator conversation WITH remote control:
claude --resume autonomous-orchestrator \
  --remote-control "autonomous-orchestrator" \
  --dangerously-skip-permissions
#    - If name-resume opens a picker instead of resuming directly, choose "autonomous-orchestrator".
#    - Or resume by the stable session id (more deterministic in a fresh pane):
#        claude --resume 34a80a99-b37e-4809-b8da-ccc9fafe785e \
#          --remote-control "autonomous-orchestrator" --dangerously-skip-permissions

# 3. Detach — the process keeps running:  press Ctrl-b, then d

Reconnect later

  • On this host: tmux attach -t orchestrator
  • From anywhere: claude.ai/code → the autonomous-orchestrator session

Why it survives: tmux keeps the claude process alive across SSH disconnects and your laptop closing; remote-control runs outbound from this host to Anthropic, so it stays connected regardless of the viewer. After a host reboot, re-run steps 12.

Two different "names": --resume <name|id> selects the conversation to restore (shown in the /resume picker); the --remote-control "<name>" value is only the web display label and resumes nothing. Resuming reuses the same session id each time (stays 34a8…) — don't pass --fork-session unless you intend to branch a new conversation.

Already inside a live session and just want the web surface? Run /remote-control — no exit/resume.

Kick off / supervise the loops

cd /srv/cc-ci/cc-ci-plan
./launch.sh start                       # Builder + Adversary loops (interactive --remote-control in tmux) + watchdog
./launch.sh status                      # session + DONE state
./launch.sh logs builder|adversary|watchdog
./launch.sh stop

Full supervision guide, credential map, and the Incus VM fallback are in cc-ci-plan/kickoff.md and cc-ci-plan/plan.md §1.5.

S
Description
Autonomous orchestrator: planning, launch, and setup for the cc-ci Co-op Cloud recipe CI server
Readme
1.9 MiB
Languages
Python 78.7%
Shell 12.1%
Nix 8.5%
HCL 0.7%