3e58c184f6
gates / gates (push) Successful in 27s
DRILL-night-2026-09-23.md: Parts A-E. 09 §3 decisions 21 (operator word), 22 and 23 (CC unattended, operator may reverse); §6.4 parts 4 and 6 (catalog half) shipped; §6.1a residuals R-658/R-659. Register 330 -> 336: R-651..R-660 opened (R-658 and R-659 P1), R-650/R-640/R-499/R-626 closed. Capability map, nightly rotation (opengist), STATUS (one question: the floor), CONTEXT, REPORT. The floor stays 0.266.0. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
40 lines
1.9 KiB
Python
40 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Turn chaos/round-NN.json into the findings doc's round table (the five things + the readback)."""
|
|
import glob, json, re
|
|
|
|
|
|
def short(x, n=160):
|
|
x = re.sub(r"\s+", " ", str(x or "")).strip()
|
|
return (x[:n] + "…") if len(x) > n else x
|
|
|
|
|
|
rows = []
|
|
for p in sorted(glob.glob("chaos/round-[0-9][0-9].json")):
|
|
r = json.load(open(p))
|
|
after = r.get("after") or {}
|
|
st = after.get("state") or {}
|
|
b = after.get("badges") or {}
|
|
lines = after.get("lines") or {}
|
|
saw = []
|
|
for lang in ("hu", "en"):
|
|
bb = "; ".join(x.get("text", "") for x in (b.get(lang) or []))
|
|
ln = (lines.get(lang) or {})
|
|
extra = ln.get("undone_line") or ln.get("hold") or ""
|
|
saw.append(f"{lang}: {bb or '—'}{(' / ' + short(extra, 110)) if extra else ''}")
|
|
if not st and after.get("state") == "not deployed":
|
|
saw = [f"not installed (leftovers: {after.get('leftovers') or 'none'})"]
|
|
phases = " → ".join(f"{ph[1]}@{ph[0]}s" for ph in (r.get("phases") or []))
|
|
boxdid = phases or short(r.get("act"), 120)
|
|
keylog = [l for l in (r.get("box_log") or []) if re.search(r"recovery|UNDO|UNDONE|HOLD|held|refus|interrupted|restore", l)]
|
|
if keylog:
|
|
boxdid += " | " + short(keylog[-1][21:], 140)
|
|
rb = r.get("readback")
|
|
if r.get("readback_B_reread") is not None:
|
|
rb = dict(rb or {}); rb["B"] = f"{r['readback_B_reread']['value']} (re-read, paged)"
|
|
rows.append(f"| {r['round']} | {r['action']} · {r['app']} | {short(r.get('accident'), 110)} (armed {r.get('armed_at','at start')}) | "
|
|
f"{' ‖ '.join(saw)} | {boxdid} | {r.get('time_to_steady_s')} s | "
|
|
f"{', '.join(e.split(' ', 1)[1] for e in (r.get('events') or [])) or 'none'} | {rb} |")
|
|
print("| # | action · app | accident (when) | what the household saw | what the box did by itself | steady | events fired (R-620 witness) | data read back |")
|
|
print("|---|---|---|---|---|---|---|---|")
|
|
print("\n".join(rows))
|