"""vikunja: the catalog RE-TESTS its step — the probe port back to 3456 (the step now passes) and a new tested_at on the ladder entry (so the ladder's print changes and R-680's record no longer binds).""" import json, re, time import walk as w p = f"{w.DRILL}/templates/vikunja/.felhom.yml" w.sh(["git", "-C", w.DRILL, "pull", "-q", "--rebase", "origin", "main"], timeout=120) s = open(p).read() s2 = re.sub(r"(healthcheck:\n\s+checks:\n\s+- type: api\n\s+port: )8999\b", r"\g<1>3456", s, count=1) assert s2 != s lines = s2.split("\n"); i = lines.index("update_ladder:") + 1 e = json.loads(lines[i][4:]); e["tested_at"] = "2026-09-24T20:40:00Z"; lines[i] = " - " + json.dumps(e, ensure_ascii=False) open(p, "w").write("\n".join(lines)) w.sh(["git", "-C", w.DRILL, "commit", "-qam", "NIGHT-C vikunja step re-tested (probe 3456, new tested_at)"]) w.sh(["git", "-C", w.DRILL, "push", "-q", "origin", "main"], timeout=120) head = w.sh(["git", "-C", w.DRILL, "rev-parse", "--short", "HEAD"]).stdout.strip() w.login() for k in range(40): w.sync_rescan() if w.guest("cd /var/lib/docker/volumes/felhom-controller-data/_data/data/catalog-cache && git rev-parse --short HEAD").strip() == head: print("vikunja re-tested; box clone at", head); break time.sleep(8)