#!/usr/bin/env python3 """Assemble DRILL-the-28-2026-09-22.md from the parts + the generated table.""" import io, json, glob, os HERE = os.path.dirname(os.path.abspath(__file__)) A = os.path.dirname(HERE) recs = {} for f in glob.glob(os.path.join(HERE, "apps", "*", "verdict.json")): d = json.load(open(f, encoding="utf-8")); recs[d["app"]] = d walked = [d for d in recs.values() if d["deployed"]] proven = [d for d in recs.values() if d["verdict"] == "proven"] failed = [d for d in recs.values() if d["verdict"] == "failed"] seeded = [d for d in recs.values() if d["seed_read_before"]] restored = [d for d in recs.values() if d["restore_verdict"] == "ok"] refused = [d for d in recs.values() if d["restore_verdict"] == "refused-with-a-sentence"] dirty = [d for d in recs.values() if d["deployed"] and not d.get("removed_clean")] parts = [io.open(os.path.join(A, "DRILL-the-28-2026-09-22-HEAD.md"), encoding="utf-8").read()] body1 = io.open(os.path.join(HERE, "BODY-part1.md"), encoding="utf-8").read() body1 = (body1.replace("_N_", str(len(walked))) .replace("_INTERVENTIONS_", os.environ.get("INTERVENTIONS", "see below")) .replace("_HEADLINE_", os.environ.get("HEADLINE", "see below"))) parts.append(body1) tbl = io.open(os.path.join(HERE, "TABLE.md"), encoding="utf-8").read() parts.append("---\n\n## The table — all twenty-eight\n\n" "Classes are `07-backup-architecture.md` §6.2's, not re-derived.\n\n" + tbl + "\n" + "**Read across the walk rather than down one column:** " f"**{len(walked)} of 28 deployed**, " f"**{len(seeded)}** had a non-browser route that seeded AND read back, " f"**{len(restored)}** restored from their own copy, " f"**{len(refused)}** were correctly REFUSED a restore, " f"**{len(proven)} proven / {len(failed)} failed** on the apps that had an upstream " f"edge, and **{len(dirty)}** left a container behind (R-633).\n") for f in ("BODY-sidejobs.md", "BODY-r630.md", "BODY-promotion.md", "BODY-teardown.md"): p = os.path.join(HERE, f) if os.path.exists(p): parts.append(io.open(p, encoding="utf-8").read()) out = "\n".join(parts) io.open(os.path.join(A, "DRILL-the-28-2026-09-22.md"), "w", encoding="utf-8").write(out) print("assembled", len(out), "bytes ·", len(walked), "walked ·", len(proven), "proven ·", len(seeded), "seeded ·", len(restored), "restored ·", len(refused), "refused ·", len(dirty), "dirty")