File size: 1,700 Bytes
16ff49b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""Read-only check: project every prebaked case to its public view and report which
rich payload each clue gets. Fails (exit 1) if any case ends up all-paper."""

from __future__ import annotations

import sys
from collections import Counter
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))

from case_zero.api.case_adapter import casefile_to_public  # noqa: E402
from case_zero.persistence.case_store import load_case  # noqa: E402
from case_zero.persistence.paths import prebaked_cases_dir  # noqa: E402


def payload_kind(ev) -> str:
    if ev.thread:
        return "thread"
    if ev.transcript:
        return "voicemail"
    if ev.rows:
        return "keycard"
    if ev.type == "IMAGE":
        return "cctv" if ev.icon == "cctv" else "photo"
    return "paper"


def main() -> int:
    hist: Counter[str] = Counter()
    all_paper: list[str] = []
    for path in sorted(prebaked_cases_dir().glob("*.json")):
        case = load_case(path)
        public = casefile_to_public(case)
        kinds = []
        for ev in public.evidence:
            kind = payload_kind(ev)
            kinds.append(kind)
            hist[kind] += 1
            print(f"{case.case_id} | {ev.id:10s} | {ev.icon:12s} | {kind:9s} | {ev.name[:52]}")
        if all(k == "paper" for k in kinds):
            all_paper.append(case.case_id)
    print("\n--- payload histogram:")
    for kind, n in hist.most_common():
        print(f"{kind:9s} {n}")
    if all_paper:
        print(f"\nFAIL: all-paper cases: {all_paper}")
        return 1
    print("\nOK: every case has at least one rich exhibit")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())