Files
vh 70b7281182 ops(albok): vh joins every albok read group; macOS withdrawal-test run staged
Prime, 2026-10-09: "vh gets albok-everything". playbooks/nh3-albok-vh-viewer.yaml
joins vh to albok-read, albok-personal and albok-feedback on nh3-albok and
authorizes his four Macs' public keys for vh; verified at a fresh login that
every wing's .browse/ lists and reads.

The withdrawal harness gains a macOS driver (run-mac.sh: every mountable FUSE
backend, a read-only smoke of the real wings, results copied back), env
overrides for a non-container client, and summarize.py. Sanity-checked as vh
from the Linux container before staging.
2026-10-09 22:45:52 -07:00

42 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Print one line per condition from a run-trials.py result file, and the gate verdict.
python3 summarize.py results-*.json
"""
import json
import sys
from collections import Counter
def c_outcome(t):
c = t.get("post_open_C", {})
if not c.get("opened"):
return f"open {c.get('errno')}"
if "read_errno" in c:
return f"opened, read {c['read_errno']}"
return "opened, bytes ok" if c.get("content_ok") else "opened, BYTES WRONG"
for path in sys.argv[1:]:
d = json.load(open(path))
print(f"== {path} sshfs -o {','.join(o for o in d['sshfs_base'] if not o.startswith(('IdentityFile', 'UserKnownHosts')))}")
by = {}
for t in d["trials"]:
by.setdefault(t["cond"], []).append(t)
verdict = []
for cond, ts in by.items():
aborted = [t["aborted"] for t in ts if "aborted" in t]
ok = [t for t in ts if "aborted" not in t]
oc = Counter(c_outcome(t) for t in ok)
held = Counter("ok" if t["post_held_B"].get("content_ok") else str(t["post_held_B"]) for t in ok)
lst = Counter(str(t["post_list"].get("n", t["post_list"].get("errno"))) for t in ok)
print(f" {cond:14} n={len(ok)} aborted={len(aborted)} open C: {dict(oc)} held B: {dict(held)} "
f"cached list: {dict(lst)}" + (f" abort: {aborted[0][:80]}" if aborted else ""))
if cond in ("default", "aggressive") and ok:
denied = sum(1 for t in ok if not t["post_open_C"].get("opened")
or "read_errno" in t["post_open_C"])
verdict.append(f"{cond}: C denied {denied}/{len(ok)}")
if cond == "null" and ok:
verdict.append(f"null: C served {sum(1 for t in ok if c_outcome(t) == 'opened, bytes ok')}/{len(ok)}")
print(" verdict:", "; ".join(verdict) or "no usable trials")