Commit Graph
324 Commits
Author SHA1 Message Date
autonomic-bot 2f22d42d34 skills: move cc-ci-update skills to .opencode/ as canonical; .claude/ -> thin wrappers
Reverse the skill location: the full definitions now live in
.opencode/skills/<name>/SKILL.md (opencode's native project-skill
location, auto-scanned), and .claude/skills/<name>/SKILL.md are thin
pointer wrappers that keep the frontmatter for discoverability and
redirect to the .opencode/ canonical file for the procedure.

Also drops the 'operator-authorized mid-run' gating from
/cc-ci-server-update: the operator's choice to invoke the skill IS the
authorization for the live nixos-rebuild switch — no second check to
wait for. The quiescent-moment preference stays (don't disrupt an
in-flight !testme), but it's not a gate.
2026-08-03 19:10:05 +00:00
autonomic-bot e805baf030 skills: add /cc-ci-server-update, /cc-ci-tests-update, /cc-ci-update
Three new skills for keeping cc-ci itself current (manual triggers for
what should ideally be automatic):

- /cc-ci-server-update — bump the cc-ci SERVER host's nixpkgs/sops-nix
  flake inputs (hard rev pin, moves deliberately), open a cc-ci PR, then
  deploy to the live host via nixos-rebuild switch (operator-authorized,
  no-CI window) + health gate (no failed units, infra up, endpoints 200).
  Manual trigger for periodic nixpkgs bumps.

- /cc-ci-tests-update — sweep all maintained recipes for stale cc-ci
  tests (carry-over from /upgrade-all's commented stale tests + a fresh
  /ci-test-review sweep), author the minimal test update per stale
  recipe, open a cc-ci test PR, verify via the standard PR + !testme ->
  CI flow. Closes the loop the weekly /upgrade-all deliberately defers
  (it comments-only; this fixes the tests). Never weakens a test.

- /cc-ci-update — umbrella: run server-update then tests-update, in
  that order, gated on the server health check (don't sweep tests on a
  sick/rolled-back host). Server-first because the harness toolchain
  rides on the host nixpkgs.

All three: create + verify, NEVER merge. Reuse the existing ci-test-review
helpers (open-cc-ci-pr.sh, run-all-recipes.sh, verify-pr.sh) and the
recipe-upgrade --with-tests discipline.
2026-08-03 19:07:06 +00:00
autonomic-bot 9ec705dd0e orchestrator: run on the opencode backend + auto-start on boot
Switch the cc-ci-orchestrator agent (cc-ci-plan/agents.toml) from the claude
backend to the opencode backend so it attaches to the shared opencode web
server (opencode-web.service, 127.0.0.1:4096) and is reachable for Remote
Control at https://oc.commoninternet.net under the /srv/cc-ci-orch project.
Model = opencode/glm-5.2 (same provider family as the weekly upgrader /
supervisor). resume=false — the opencode backend has no --resume equivalent
(a fresh session per launch, matching the existing launch-opencode.sh shape).

Add a cc-ci-orchestrator.service systemd unit so on boot it runs
'agents.py up orchestrator' after opencode-web.service is up — the same
reboot-resilience shape lichen-orchestrator / project-orchestrator already
have. KillMode=process so a rebuild that merely touches this unit does not
tear down the shared tmux server and every agent session with it.

No secrets: the diff is only config + comments (paths, model names, unit
definition).
2026-08-03 18:50:36 +00:00
autonomic-botandClaude Opus 4.8 47bef090f3 nginx(oc): serve oc.commoninternet.net over HTTPS (443) with a self-signed cert
Add a 443 listener on the tailscale IP for the opencode vhost, alongside the
existing port 80. The name resolves to a CGNAT tailscale IP so Let's Encrypt
HTTP-01 can't validate it and there's no DNS-01 provider here; the vhost is
tailnet-only, so a self-signed cert (out-of-band at /etc/nginx/oc-selfsigned.*,
like oc-htpasswd) is acceptable. addSSL=true is required so the NixOS nginx
module actually renders ssl_certificate — without it nginx -t fails and takes
the atproto vhost down too. Rationale + regen command documented inline.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016L6nYYwkCWnrEFKTnKAfet
2026-08-03 18:41:08 +00:00
notplantsandClaude d29fa655c2 host: KillMode=process on the agent units so a rebuild stops nuking tmux
One tmux server hosts every agent session on this box and it lives in
cc-ci-loops.service's cgroup, so any rebuild touching that unit killed ALL sessions
(cc-ci, lichen, PO, pi). With KillMode=process systemd kills only the already-exited
launcher, not the cgroup — added to cc-ci-loops, lichen-orchestrator and
project-orchestrator. Trade-off: `systemctl stop` no longer tears agents down; do it
by hand.

Carries an in-flight nginx basicAuth block from the cc-ci agent that was already
uncommitted in this file and is now deployed with the 26.05 switch — committed here so
it is not lost, not authored by me.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-01 21:21:08 +00:00
notplantsandClaude 6edea124fb flake: update inputs — nixpkgs 24.11 -> 26.05, sops-nix follows (operator 2026-08-01)
nixpkgs un-pinned from a frozen rev (50ab7937, 24.11, 2025-06-30) to the nixos-26.05
channel; sops-nix un-pinned to follow it. The old pins claimed to match the cc-ci
server "for ecosystem consistency", but this host runs agents/tmux/nginx/docker, not
recipe CI, so it need not track that server — and a frozen rev only accrues unpatched
CVEs. Built + activated: generation nixos-26.05.20260731.5b4f72e, kernel 6.6.94 ->
6.18.40 (reboot pending for the kernel). Pre-update files: /tmp/flake.{nix,lock}.pre-update.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-01 21:21:08 +00:00
autonomic-botandClaude Opus 5 340e0d62a4 nix: sync atproto-likes module (non-root container, cache chown)
Upstream module dropped host-specific comments for its public repo, so the
context that matters here — gateway fronting, why this vhost stays off the
tailscale address group where opencode lives, and the exposure check script —
moves into the copy's header where it belongs.

Functional changes from upstream: the container now runs as uid 10001 and the
unit chowns the bind-mounted cache before start (without it, cache files left
by the earlier root container are unreadable and every cached actor 500s).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmEK2voMnBa23495aLk1Ce
2026-08-01 19:32:48 +00:00
autonomic-botandClaude Opus 5 21dfa22f9a nginx: strict public default server; keep oc off 0.0.0.0 (copy)
Sync of the canonical module. The atproto vhost listens on 0.0.0.0 only, so it
never shares an address group with oc.commoninternet.net (which is the default
server on 100.84.190.30:80 and has no auth in front of it). A new
public-default-reject vhost owns the public addresses — return 444 on 80,
ssl_reject_handshake on 443 — so unmatched, absent or spoofed Host headers from
the internet get nothing, now and after any future vhost is added.

The tailnet is untouched: oc.commoninternet.net still serves opencode there.
Verified with tools/check-exposure.sh in the project repo — 9/9 ok.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmEK2voMnBa23495aLk1Ce
2026-08-01 18:46:06 +00:00
autonomic-botandClaude Opus 5 7d72c05ae7 nginx: addSSL + explicit tailscale listen for atproto-likes (copy)
Sync of the canonical module in the project repo. forceSSL would have bounced
the gateway's plain-HTTP hop back to the gateway; and the oc vhost's explicit
listen on 100.84.190.30:80 was shadowing this vhost on the tailnet, serving the
opencode UI for Host: atproto.commoninternet.net.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmEK2voMnBa23495aLk1Ce
2026-08-01 18:41:33 +00:00
autonomic-botandClaude Opus 5 ff054e790c feat(host): atproto-likes web UI at atproto.commoninternet.net
Imports the notplants-atproto module: Docker daemon (this host had none), a
systemd unit running the project's docker-compose stack, and an nginx vhost
proxying to it on 127.0.0.1:8731 with ACME and websocket support.

Opens 80/443 publicly. Until now only 22 was open and everything else was
tailnet-only, so this is a real change in exposure — nginx is now reachable
from the internet. The existing oc.commoninternet.net vhost is untouched and
stays bound to the tailscale IP.

nix/atproto-likes.nix is a COPY; the canonical file lives in the project repo
at /srv/project-orchestrator/projects/notplants-atproto/nix/. Pure evaluation
forbids importing an absolute path outside the flake tree, so it has to be
duplicated here — and a new file must be git-added or nix silently ignores it.

ACME currently FAILS: *.commoninternet.net is a wildcard pointing at
143.244.213.108, so the HTTP-01 challenge is answered by that host (500).
nginx serves a self-signed placeholder and starts fine. Fix is an explicit
A record atproto.commoninternet.net -> 168.119.126.100, then
`systemctl start acme-atproto.commoninternet.net.service`.

Applied with nixos-rebuild switch; container healthy, TLS proxy and wss
verified end to end.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SmEK2voMnBa23495aLk1Ce
2026-08-01 18:35:41 +00:00
notplantsandClaude 56d09016e5 feat(host): project-orchestrator systemd unit (always-on, no wakes)
The PO is the operator's fleet-management Remote Control point; until now nothing
brought it back after a reboot. Mirrors lichen-orchestrator: oneshot + RemainAfterExit
running `agents.py up` as loops, which starts the PO agent and its watchdog. The PO's
agents.toml declares no `wake`, so the watchdog only heals a dead session — it never
sends periodic prompts.

Also lands the /mnt/data hardware.nix mount (by-uuid + nofail) that was sitting
uncommitted; fstab output is unchanged from the running system.

Deployed 2026-08-01: build delta was 5 derivations (the new unit + etc/system-units);
every other unit file byte-identical, dry-activate showed only a dbus reload. The
in-flight pi-coding-agent / launch.py work is parked on wip/pi-orchestrator-2026-08-01.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-01 16:40:29 +00:00
autonomic-bot 865eb45966 upstream(immich): v3.1.0 sidecar pins (valkey 8e8d64b4…, postgres unchanged) 2026-07-31 03:26:34 +00:00
cc-ci-bot 39c7d08dbd upstream(mattermost-lts): re-check 2026-07-24, 11.7.7 latest ESR patch 2026-07-24 13:08:03 +00:00
autonomic-bot d53a80eed4 upstream(lasuite-meet): add v1.24.0 / livekit v1.13.2-4 / nginx 1.31.3 notes 2026-07-24 04:35:54 +00:00
cc-ci 095b1dc75f upstream(custom-html): add nginx 1.31.3 release notes 2026-07-24 03:40:00 +00:00
cc-ci-bot 117685343b upstream(immich): note v3.0.3 release + valkey pin rationale 2026-07-17 02:19:46 +00:00
autonomic-bot 9e8ddc132e upstream(n8n): docs.n8n.io release-notes 404 -> use GitHub Releases; confirm live 2.27.2->2.31.0 sqlite migration clean 2026-07-15 00:11:13 +00:00
autonomic-bot 3ee026c2af upstream(mattermost-lts): 2026-07-13 re-check — 11.7.6 still latest ESR, 11.9 is innovation 2026-07-13 23:26:24 +00:00
autonomic-bot 89af8e4ed3 upstream(matrix-synapse): document signalbridge calver tag-form gotcha (abra blind spot) 2026-07-13 23:20:33 +00:00
autonomic-bot 4f2dd96c85 upstream(lasuite-meet): release-notes for meet v1.22/v1.23 + livekit v1.13.2/v1.13.3 2026-07-13 23:04:49 +00:00
autonomic-bot 82ae406667 upstream(immich): v3.0.2 pins (valkey:9 digest refreshed, postgres pgvectors0.3.0 unchanged) 2026-07-13 20:08:45 +00:00
autonomic-bot c1695dcf72 upstream(gitea): note 1.26.3 regression + 1.27.0 breaking changes 2026-07-13 20:05:06 +00:00
autonomic-bot d45a55a65f upstream(discourse): update for official image + calver release notes 2026-07-13 17:45:04 +00:00
autonomic-bot 1ec1aa8f1d feat(upgrader): LOOP_TIER=go|zen config — switch weekly upgrade to OpenCode ZEN
GO subscription hit a monthly usage limit (resets in 9 days). Add LOOP_TIER
env (default 'zen') to launch-upgrader.py + launch-report.py so the opencode
backend can use either subscription: zen→opencode/glm-5.2, go→opencode-go/glm-5.2.
The tier selects the default model, the usage-limit probe endpoint, and the
auth.json key. The systemd timer reads LOOP_TIER from /srv/cc-ci/upgrader.env.
2026-07-13 17:11:26 +00:00
autonomic-bot 1e40d50181 boot: only cc-ci-orchestrator auto-starts (+RC) — builder/adversary enabled=false so they don't launch on boot (operator); start them manually when running a build 2026-07-10 17:44:02 +00:00
autonomic-bot 4685d5dee3 host: reboot service now runs the orchestrator from /srv/lichen-orchestrator (p-lichen-orchestrator retired — consolidated into lichen-orchestrator) 2026-07-10 16:22:45 +00:00
autonomic-bot 2362c2a004 chore(host): re-point lichen-orchestrator service to /srv/project-orchestrator (dir migrated /home->/srv) 2026-07-08 16:36:28 +00:00
autonomic-bot 76bd27905f feat(host): reboot-persistent lichen-orchestrator systemd service
Mirrors cc-ci-loops.service for the SEPARATE p-lichen-orchestrator (lichen.page testing). On boot,
resumes its Remote Control session + watchdog + pipeline via engine/agents.py up. Added after the
2026-07-08 reboot (Hetzner rollback of a bad staging nixos-rebuild) left this orchestrator down while
cc-ci-loops auto-recovered. Points at the /home path for now; re-point to /srv at that migration.
Verified: diff-closures shows only this unit added; sshd/dhcpcd/tailscaled/network unchanged.
2026-07-08 16:23:47 +00:00
autonomic-botandClaude Opus 4.8 b6a95c423c supervisor: treat run as finished once the weekly summary is written
A run can finish the recipe work + summary + report yet never print a clean
sign-off marker (it may wedge afterwards, as on 2026-07-03). Without a second
completion signal the supervisor would try to 'resume' the already-finished run
every hour until the 96h window closed. Now the gate also treats the run as done
when a weekly summary file (upgrade-all-<date>.md, the Step-5 output) exists with
an mtime after the session began.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxbpH3DquKzoSTSwGvGuET
2026-07-04 10:11:49 +00:00
autonomic-botandClaude Opus 4.8 ddedea80cd watchdog: fix _completed() false-positive that abandoned the run
The 2026-07-03 finish run wedged because _completed() returned True while the run
was still mid-work — so the watchdog exited early and nothing recovered the wedge.
Cause: it scanned part.get('text') across ALL message parts, so DONE_MARKER inside
a TOOL part (a subagent `task` prompt / bash command that referenced 'print
UPGRADE RUN COMPLETE') matched. Now: require the marker in the LAST assistant
TEXT (prose) message — the genuine sign-off — ignoring tool-call args and any
mid-run echo of the instruction (work after the echo disqualifies it).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxbpH3DquKzoSTSwGvGuET
2026-07-04 10:08:33 +00:00
autonomic-botandClaude Opus 4.8 69dd17833a weekly-run: tree-aware idle signal + crash-proof watchdog
More fixes from live-running the finish of the 2026-07-03 run:
- _session_idle_min(): measure staleness across the whole session TREE (top-level
  run + all descendant subagents), via the opencode server time.updated, NOT the
  tmux log mtime (which freezes when a headless run doesn't stream to the pane).
  A per-recipe subagent deploy runs 20-40min during which the PARENT session's
  updated time is stale — reading the parent alone looked 'idle' and would false-
  resume, killing the productive run. Renamed from _log_idle_min (kept as alias).
- watchdog(): wrap each poll in try/except so a transient server blip/race can
  never kill the watchdog (a dead watchdog silently abandons the run).
- watchdog + supervisor now read the tree-aware session idle instead of log mtime.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxbpH3DquKzoSTSwGvGuET
2026-07-04 05:04:32 +00:00
autonomic-botandClaude Opus 4.8 399e999978 weekly-run: watchdog resumes on proc-death; supervisor defers to watchdog
Live-testing the resume path surfaced two gaps: (1) an `opencode run` proc
EXITS when the model ends its turn, so a long /upgrade-all run's process dies
repeatedly before the whole run completes — and the log mtime freezes on death,
so the watchdog's log-idle>15min signal is both too slow and unreliable. (2) A
resumed run had no watchdog, so nothing re-continued it.

- watchdog(): detect PROC-DEATH (no live `opencode run` proc for the session +
  not completed) and resume promptly, in addition to log-idle. Guarded by
  MAX_RESUMES (default 20) so a no-progress loop (e.g. disk-full) eventually hands
  off to the supervisor/operator instead of spinning forever.
- resume(): auto-spawn a watchdog if none is alive (skips when the watchdog itself
  called resume — it lives in {SESSION}-watchdog — so no duplicate).
- launch-supervisor.py gate: defer while the per-run watchdog is alive (it is the
  single writer for prompt-recovery). The supervisor only takes over once the
  watchdog gives up (MAX_RESUMES) — i.e. a wedge a bare resume can't fix. Removes
  the supervisor/watchdog double-resume race.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxbpH3DquKzoSTSwGvGuET
2026-07-04 04:39:40 +00:00
autonomic-botandClaude Opus 4.8 1bd156e7e6 weekly-run: pre-reclaim stale cc-ci images + hourly glm-5.2 supervisor
Root-cause fix for the 2026-07-03 run stalling: the cc-ci host disk filled to
100% (ENOSPC) mid-run (Wave 6, lasuite-drive), the agent stopped to reclaim
space, and nothing resumed it — the log-idle/429 watchdog only covers opencode-go
usage-limit stalls, not an environmental wedge.

- launch-upgrader.py: step-0 prereclaim_cc_ci() prunes STALE cc-ci docker images
  (unused AND older than a week, so this week's likely-reused images stay) before
  each weekly run. Best-effort; env-tunable (UPGRADER_PRERECLAIM*).
- launch-supervisor.py (new): hourly glm-5.2 orchestrator wake-up. Cheap
  deterministic gate — no-ops (zero tokens) when the run is complete or
  progressing; only when a run stalled/died before completing does it launch a
  short-lived glm-5.2 agent to diagnose + drive it to a clean DONE. Progress is
  judged by live run-proc + log mtime (session_busy() is claude-tuned and misreads
  a headless opencode run as idle).
- configuration.nix: cc-ci-upgrade-supervisor service + hourly timer (:07).
- upgrade-all SKILL §0: note the stale-image reclaim for manual runs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxbpH3DquKzoSTSwGvGuET
2026-07-04 04:33:05 +00:00
autonomic-bot 52e7c954a3 upstream(hedgedoc): fix pgautoupgrade source repo URL 2026-07-03 04:09:57 +00:00
autonomic-bot 00335d6261 upstream(mattermost-lts): refresh to 11.7.6 ESR; correct survey's 10.x-LTS misread 2026-06-29 01:27:51 +00:00
autonomic-botandClaude Opus 4.8 f94be45f9c watchdog: cover all parts of the weekly run + survive the systemd oneshot
Two gaps for the scheduled Thursday glm-5.2 run:
1. Survival: the watchdog was a Popen child of the Type=oneshot service, which
   systemd's cgroup cleanup kills on exit. Spawn it under the persistent tmux
   server instead (_spawn_watchdog), like the run sessions — survives the oneshot.
2. The report runs on glm-5.2 sharing the same opencode-go budget the upgrade run
   drains, so it can 429-stall with no recovery. launch-report.py now spawns the
   SAME watchdog pointed at the cc-ci-report session (generic via UPGRADER_SESSION/
   _MODEL/_DONE_MARKER/_RESUME_FILE), with a report-specific resume prompt.

Also: _run_pids() is now scoped to the managed session (title or -s <sid>) so the
report watchdog can't kill the idle upgrader process and vice-versa; resume() adds
--dir and honors a custom resume prompt file.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 02:42:50 +00:00
autonomic-botandClaude Opus 4.8 5a6c62e36c launch-upgrader: fix false completion detection (prompt contains the marker)
_completed() grepped the log for UPGRADE RUN COMPLETE, but the kickoff/resume
PROMPT (a user message) contains that string verbatim, so it false-positived
'done' while the run was still going. Check the model's ASSISTANT message output
via the web server API instead (log grep only as an offline, prompt-excluding
fallback).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 01:42:06 +00:00
autonomic-botandClaude Opus 4.8 6f9cbc1a56 launch-upgrader: rename babysit -> watchdog (match agents.py convention)
Subcommand, function, env (UPGRADER_WATCHDOG), and log file renamed; behavior
unchanged. Only the opencode upgrader 'start' auto-spawns it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 01:33:07 +00:00
autonomic-bot 816985160d upstream(matrix-synapse): correct bridge/db notes (previous attempt did not ship) 2026-06-23 01:27:37 +00:00
autonomic-botandClaude Opus 4.8 28ef7e44ab launch-upgrader: add stall-detect + auto-resume watchdog (opencode-go limit)
The opencode-go subscription's rolling usage-limit (429) ends the 'opencode run'
agent loop mid-run; it does NOT self-resume. Add:
- resume: continue the SAME session (context preserved) via 'opencode run -s <id>
  --continue' — finds the session from the web server, kills the idle proc safely
  (via /proc scan, never pkill -f self-match), relaunches in the tmux session.
- babysit: poll the session log; on a stall (>15min idle) wait out any 429
  retry-after then auto-resume. Spawned automatically by an opencode 'start'.

So a usage-limit pause now self-heals instead of needing a manual nudge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 01:26:24 +00:00
autonomic-bot 3762efcce3 upstream(matrix-synapse): document bridge calver + telegram Go rewrite + PG13→15 2026-06-22 21:46:42 +00:00
autonomic-bot 438819a94a upstream(mattermost-lts): 2026-06-22 re-check — 11.7.5 still latest ESR 2026-06-22 21:44:13 +00:00
autonomic-bot 543b98d030 upstream(ghost): document MySQL 9.x is NOT supported by Ghost (do not bump past 8.x) 2026-06-22 21:19:31 +00:00
autonomic-bot 25ef098581 upstream(discourse): bitnamilegacy frozen at 3.5.0; 9.x are Helm chart OCI artifacts 2026-06-22 20:56:17 +00:00
autonomic-bot 8887c1089e upstream(custom-html-tiny): fix alpine/git source repo URL 2026-06-22 20:52:55 +00:00
autonomic-bot 2a682b1fe5 upstream(custom-html): fix alpine/git source repo URL + add 1.31.2 notes 2026-06-22 20:43:38 +00:00
autonomic-botandClaude Opus 4.8 9e91d47205 recipe-report: harden spec-in/page-out determinism contract
Make explicit that ALL formatting/HTML is owned by recipe-report.py render() and
the model's only artifact is the spec JSON — never hand-write/edit HTML. Matters
now that glm-5.2 drives the report. Also fix stale 'default opus' refs (report
now defaults to opencode-go/glm-5.2, overridable via REPORT_BACKEND/REPORT_MODEL).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:34:14 +00:00
autonomic-botandClaude Opus 4.8 165eb62070 launch-report: default to opencode-go/glm-5.2 + fix opencode run invocation
Report launcher now defaults backend=opencode, model=opencode-go/glm-5.2 (claude
override → opus). Replaced the broken opencode 'attach + send-keys' path with the
same 'opencode run -m … --share --attach --title' pattern as the upgrader (the
old path passed no model and injected the prompt via keystrokes).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:28:55 +00:00
autonomic-botandClaude Opus 4.8 5351ec2e40 launch-upgrader: default to opencode-go/glm-5.2 when unset
Weekly upgrade run now defaults backend=opencode, model=opencode-go/glm-5.2 with
no env set. Model default tracks backend (claude override → sonnet). Override via
LOOP_BACKEND/LOOP_MODEL or /srv/cc-ci/upgrader.env.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:23:26 +00:00
autonomic-botandClaude Opus 4.8 1443ccaea5 weekly upgrade: optional backend/model via /srv/cc-ci/upgrader.env
cc-ci-upgrade-all now reads an optional EnvironmentFile so the weekly run can
switch backend/model (e.g. LOOP_BACKEND=opencode LOOP_MODEL=opencode-go/glm-5.2)
without a rebuild. Absent file → claude/sonnet (unchanged). Built+switched on
cc-ci-orchestrator-hetzner, host verified healthy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:21:16 +00:00