Files
felhom.eu/documentation/audits/night-rulings-2026-09-30/tools/r741poll.py
T
admin 3159892fab
gates / gates (push) Successful in 27s
Both rulings built: same-tag re-tests (decision 52), image retention + the install hold (controller 0.284.2); golden 0.284.2
- Decision 52: catalog 6a3ead9 (re-test entries, gates, decoys, the monthly command); proven end to end on 9202
  through the leg; runbook monthly-floating-retest.md; nothing to re-test on the engine lines today.
- Decision 53 + R-741: controller v0.284.2 (0.284.0/0.284.1 never floored — two wiring faults found live on 9202);
  floor 0.284.2; one-time sweep 9202 26.6 -> 5.7 GB, demo-hp 24.3 -> 13.5 GB; the install hold proven as a stranger.
- Golden 0.284.2 baked, round-trip identical, vouched (agent 0.138.0, min_agent 0.131.0); the gate prints OK.
- Rows 377 -> 383: opened R-743..R-748, closed R-736, R-737, R-740, R-741, R-748; narrowed R-739, R-698, R-446.
- register_shape_gate: a lettered id (R-88a) is a row too (R-748), with a decoy seen red.

Evidence: documentation/audits/night-rulings-2026-09-30/, documentation/tests/golden-0.284.2-2026-09-30/.
Report: REPORT-night-rulings-2026-09-30.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-30 23:26:21 +02:00

32 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""r741poll.py <app> <sub> <default user:pass> <probe path> — R-741's method (A3 of more-night-apps), as a STRANGER: plain
curl through traefik with the app's Host, NO dashboard session and NO gate cookie, once a second from the deploy press
for 150 s, with the default login and (after the install) the generated one. Read-only except the install it makes."""
import sys, time, threading, subprocess, json
from datetime import datetime, timezone
import walk as w
app, sub, dflt, path = sys.argv[1:5]
w.login()
def stranger(cred):
r = subprocess.run(["curl", "-sk", "-o", "/dev/null", "-w", "%{http_code}", "--max-time", "5", "-H", f"Host: {sub}.{w.DOMAIN}",
"-u", cred, f"{w.BASE}{path}"], capture_output=True, text=True)
return r.stdout.strip()
res, stop = [], threading.Event()
def poll():
while not stop.is_set():
res.append((datetime.now(timezone.utc).strftime("%H:%M:%S"), stranger(dflt))); time.sleep(1)
print(f"# {app}: stranger polls of {path} with the DEFAULT login, from the deploy press (controller {w.guest('docker inspect felhom-controller --format {{.Config.Image}}').strip()})")
t = threading.Thread(target=poll, daemon=True); t.start()
print("deploy:", w.deploy(app, sub))
time.sleep(150); stop.set(); t.join()
prev = None
for ts, c in res:
if c != prev:
print(ts, "default login ->", c); prev = c
print("200 with the DEFAULT login (a stranger got in):", sum(1 for _, c in res if c == "200"), "of", len(res), "polls")
print(w.guest(f"docker logs --since 5m felhom-controller 2>&1 | grep -E '{app}.*(install HOLD|hold OPENED|after_install .*done|deployed successfully)' | cut -c1-220"))
gen = (w.GENERATED.get(app) or {})
for k, v in gen.items():
if "PASS" in k:
print(f"stranger with the GENERATED password ({k}) -> {stranger('admin:' + v)}")