diff --git a/.gitignore b/.gitignore index 9cc28a5..d2c6162 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,6 @@ *age*.txt *.age master-age.txt + +# Runtime completion markers +/cc-ci-plan/phase6-phase7.done diff --git a/cc-ci-plan/JOURNAL.md b/cc-ci-plan/JOURNAL.md index e04f9a7..e3300ac 100644 --- a/cc-ci-plan/JOURNAL.md +++ b/cc-ci-plan/JOURNAL.md @@ -76,6 +76,27 @@ After 7 bug fixes (wrong inference host, opencode run exits, --dir exits, env: n --- +## Session 2026-06-01 14:13 UTC — OpenCode GPT-5.4 + +**Left off:** Completed the assistant-owned phase 6 mirror reconcile pass and phase 7 targeted recipe-upgrade pass, wrote the operator summary, and dropped a `phase6-phase7.done` marker. + +**Phase / loop state:** +- Builder/Adversary loops still on phase **5 [11/11]** separately from this assistant work. +- Assistant phase 6 summary/result file: `cc-ci-plan/phase6-phase7-summary-2026-06-01.md` +- Assistant phase 6/7 completion marker: `cc-ci-plan/phase6-phase7.done` + +**Open items:** +- Bridge enrollment does **not** match the full phase-2 18-recipe set. Repo/live poll set = `custom-html`, `custom-html-tiny`, `cryptpad`, `hedgedoc`, `keycloak`, `lasuite-docs`, `lasuite-meet`, `matrix-synapse`, `n8n` (+ `cc-ci`). Missing vs phase-2 set: `bluesky-pds`, `discourse`, `ghost`, `immich`, `lasuite-drive`, `mailu`, `mattermost-lts`, `mumble`, `plausible`, `uptime-kuma`. Extra: `hedgedoc`. +- `ghost` phase-7 PR is open but not CI-triggerable until bridge enrollment includes `recipe-maintainers/ghost`. +- Review whether recipes still intended to be enrolled without mirrors: `lasuite-drive`, `mailu`, `mumble`, `uptime-kuma`. + +**Notes:** +- Phase 6 reconciled all 18 enrolled recipes from scratch clones. Stale mirror PRs auto-closed on `lasuite-docs` (#1/#2/#3) and `keycloak` (#1). Four enrolled recipes currently have no mirror repo. +- Phase 7 outcomes: `n8n` stable PR `#3` went GREEN on build `61`; `matrix-synapse` existing PR `#1` re-ran and failed on build `53`; `ghost` PR `#2` opened successfully but verification is blocked by bridge enrollment mismatch. +- The bridge service rolled during verification; earlier `!testme` comments posted before/re-during the restart were swallowed as pre-existing by the poller startup pass. A clean re-run on stable `n8n` after the rollout confirmed the live path. + +--- + ## Session 2026-05-31 ~04:00 UTC — Claude Sonnet 4.6 **Left off:** Completed the orchestrator → Hetzner migration (cpx22, server 134487234, public @@ -169,3 +190,14 @@ activation. Hetzner rescue + VNC console showed emergency mode; mounted journal (`fatlabel /dev/sda15 ESP`) and rebooting normally. Follow-up investigation item: determine why the wrong boot layout was activated and prevent future use of `#cc-ci` on the Hetzner server when the correct host target is `#cc-ci-hetzner`. + +### Event 18:53 — scheduled supervision pass +Checked Builder, Adversary, and Assistant live state. `ssh cc-ci hostname` still returns `nixos` after +the corrected Hetzner rebuild. Builder is active on a fresh matrix-synapse rerun under the restored +bridge path; Adversary was nudged to re-orient to that live state; Assistant remains idle after +finishing phase 6/7 and recording the bridge-enrollment mismatch against the full 18-recipe phase-2 set. + +### Event 16:34 — progress monitor nudged stalled phase-5 workers +`launch.py status` showed builder, adversary, and watchdog running; `ssh cc-ci hostname` succeeded (`nixos`). +Assistant session was present and already idle after its completed phase 6/7 pass (`phase6-phase7.done` exists). +Builder was still blocked on a model usage-limit retry and adversary was parked past `WAITING-UNTIL 2026-06-01T14:24:51Z`, so both received tmux nudges to re-read the live phase-5 status and continue from current evidence. diff --git a/cc-ci-plan/ai-progress-monitor-prompt.txt b/cc-ci-plan/ai-progress-monitor-prompt.txt new file mode 100644 index 0000000..9faab86 --- /dev/null +++ b/cc-ci-plan/ai-progress-monitor-prompt.txt @@ -0,0 +1,35 @@ +You are the cc-ci orchestrator and this is your scheduled wake-up prompt. + +Every time you receive this prompt: + +1. Check the current state of the three worker sessions: +- `cc-ci-builder` +- `cc-ci-adv` +- `cc-ci-assistant` + +2. Use the real workspace and live state: +- `python3 cc-ci-plan/launch.py status` +- `tmux capture-pane -pt cc-ci-builder` +- `tmux capture-pane -pt cc-ci-adv` +- `tmux capture-pane -pt cc-ci-assistant` +- `ssh cc-ci hostname` + +3. Keep them moving: +- If Builder is stalled or waiting past its stated wait, nudge it to continue phase 5. +- If Adversary is stale, behind, or still parked on old evidence, nudge it to re-orient to the current phase-5 state. +- If Assistant is stalled, nudge it to continue phase 6 and 7. +- If Assistant is not running, restart it via `python3 cc-ci-plan/launch-assistant.py start` with the opencode backend and re-send its assignment. + +4. Completion behavior: +- Treat phase 5 as complete when `/srv/cc-ci/cc-ci/machine-docs/STATUS-5.md` contains `## DONE`. +- Treat phase 6/7 as complete when `/srv/cc-ci-orch/cc-ci-plan/phase6-phase7.done` exists. +- When BOTH are complete: + - stop the watchdog (`tmux kill-session -t cc-ci-watchdog` if it exists) + - tell Builder, Adversary, and Assistant to remain idle + - append a completion event to `/srv/cc-ci-orch/cc-ci-plan/JOURNAL.md` + - then exit successfully + +5. Do not make unrelated code changes. Only supervise, nudge, restart if needed, and record concise journal notes when appropriate. + +6. Be proactive and decisive. If everything is healthy and active, make no unnecessary changes. +7. If work is already in progress from the previous wake, just continue from the live state instead of restarting the analysis from scratch. diff --git a/cc-ci-plan/ai-progress-monitor.sh b/cc-ci-plan/ai-progress-monitor.sh new file mode 100755 index 0000000..5a97acb --- /dev/null +++ b/cc-ci-plan/ai-progress-monitor.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -euo pipefail + +SESSION="${AI_MONITOR_ORCH_SESSION:-cc-ci-orchestrator-oc}" +PROMPT_FILE="${AI_MONITOR_PROMPT_FILE:-/srv/cc-ci-orch/cc-ci-plan/ai-progress-monitor-prompt.txt}" +LOG_FILE="${AI_MONITOR_LOG_FILE:-/srv/cc-ci/.cc-ci-logs/ai-progress-monitor.log}" +SLEEP_SECS="${AI_MONITOR_INTERVAL:-900}" + +mkdir -p "$(dirname "$LOG_FILE")" + +while true; do + ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)" + { + printf '[%s] wake tick\n' "$ts" + if tmux has-session -t "$SESSION" 2>/dev/null; then + tmux send-keys -t "$SESSION" -l -- "$(cat "$PROMPT_FILE")" + tmux send-keys -t "$SESSION" C-m + printf '[%s] prompted %s\n' "$ts" "$SESSION" + else + printf '[%s] session missing: %s\n' "$ts" "$SESSION" + fi + } >>"$LOG_FILE" 2>&1 || true + sleep "$SLEEP_SECS" +done diff --git a/cc-ci-plan/phase6-phase7-summary-2026-06-01.md b/cc-ci-plan/phase6-phase7-summary-2026-06-01.md new file mode 100644 index 0000000..2528228 --- /dev/null +++ b/cc-ci-plan/phase6-phase7-summary-2026-06-01.md @@ -0,0 +1,44 @@ +# Phase 6 / Phase 7 Operator Summary — 2026-06-01 + +## Phase 6 — mirror reconcile + +Expected upstream source for every enrolled recipe below: `https://git.coopcloud.tech/coop-cloud/`. + +- `bluesky-pds` — mirror `main` synced; open PR #1 left open. +- `cryptpad` — mirror `main` synced; open PR #3 left open. +- `custom-html` — mirror `main` synced; open PRs #1, #2, #3 left open. +- `custom-html-tiny` — mirror `main` synced; open PRs #2, #5 left open. +- `discourse` — mirror `main` synced; open PR #1 left open. +- `ghost` — mirror `main` synced; open PR #1 was left open during phase 6 and later replaced in phase 7. +- `immich` — mirror `main` synced; open PR #1 left open. +- `keycloak` — mirror `main` created/synced from upstream `master`; stale PR #1 closed because its changes were already upstream. +- `lasuite-docs` — mirror `main` synced; stale PRs #1, #2, #3 closed because their changes were already upstream. +- `lasuite-drive` — no `recipe-maintainers/lasuite-drive` mirror repo exists; manual attention needed if this recipe should stay enrolled. +- `lasuite-meet` — mirror `main` synced; open PR #2 left open. +- `mailu` — no `recipe-maintainers/mailu` mirror repo exists; manual attention needed if this recipe should stay enrolled. +- `matrix-synapse` — mirror `main` synced; open PR #1 left open. +- `mattermost-lts` — mirror `main` synced; open PR #1 left open. +- `mumble` — no `recipe-maintainers/mumble` mirror repo exists; manual attention needed if this recipe should stay enrolled. +- `n8n` — mirror `main` synced; open PR #2 was left open during phase 6 and later replaced in phase 7. +- `plausible` — mirror `main` synced; open PR #1 left open. +- `uptime-kuma` — no `recipe-maintainers/uptime-kuma` mirror repo exists; manual attention needed if this recipe should stay enrolled. + +## Phase 7 — targeted upgrades + +- `n8n` — upstream target chosen: stable `2.22.6` (not pre-release `2.23.x`), plus `pgautoupgrade:18-alpine`; PR opened: `https://git.autonomic.zone/recipe-maintainers/n8n/pulls/3`; superseded pre-release PR #2 was closed; after the bridge rollout settled, a fresh `!testme` completed GREEN on `https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/61`. +- `ghost` — upstream target chosen: latest published Docker Hub stable image `6.42.0-alpine` (GitHub releases were already at `6.43.x`, but no matching published Alpine image was available); PR opened: `https://git.autonomic.zone/recipe-maintainers/ghost/pulls/2`; prior open PR #1 was closed as superseded by the current mirror workflow; verification is currently blocked because `recipe-maintainers/ghost` is not enrolled in the bridge poll set, so `!testme` comments never enter the real CI path. +- `matrix-synapse` — existing PR `https://git.autonomic.zone/recipe-maintainers/matrix-synapse/pulls/1` already matches latest stable target `7.2.0+v1.153.0`; that PR already had an older cc-ci pass comment on build `87`, and a fresh re-run today produced a new failure comment on `https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/53`. + +## Bridge enrollment audit + +- Phase-2 18-recipe test set: `bluesky-pds`, `cryptpad`, `custom-html`, `custom-html-tiny`, `discourse`, `ghost`, `immich`, `keycloak`, `lasuite-docs`, `lasuite-drive`, `lasuite-meet`, `mailu`, `matrix-synapse`, `mattermost-lts`, `mumble`, `n8n`, `plausible`, `uptime-kuma`. +- Repo `nix/modules/bridge.nix` poll set at completion time: `custom-html`, `custom-html-tiny`, `cryptpad`, `hedgedoc`, `keycloak`, `lasuite-docs`, `lasuite-meet`, `matrix-synapse`, `n8n` plus `recipe-maintainers/cc-ci`. +- Live bridge poll set on `cc-ci` at completion time matched the repo poll set above. +- Missing from bridge enrollment relative to the phase-2 18-recipe set: `bluesky-pds`, `discourse`, `ghost`, `immich`, `lasuite-drive`, `mailu`, `mattermost-lts`, `mumble`, `plausible`, `uptime-kuma`. +- Extra in bridge enrollment relative to the phase-2 18-recipe set: `hedgedoc`. + +## Manual attention + +- Decide whether `lasuite-drive`, `mailu`, `mumble`, and `uptime-kuma` should remain enrolled without mirror repos. +- Review whether the mirror workflow's current "close any other open PR when opening an upgrade PR" behavior is still desired for recipes like `ghost`, where the superseded PR was unrelated to the upgrade. +- Align bridge enrollment with the full 18-recipe test set if `ghost` and the other phase-2 recipes should be triggerable via `!testme`.