3159892fab
gates / gates (push) Successful in 27s
- 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
32 lines
1.8 KiB
Python
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)}")
|