flowchart TD
Q["30 (modern_query, modern_regex, legacy_regex) triples
harvested from search-quality-deprecation-baseline-v1.2.0.md"]:::input
Q --> H[search-quality-phase1-extended.py]
BA["Arm A: brew cupertino 1.1.0
+ ~/.cupertino/search.db (schema 13)"]:::arm
BB["Arm B: dev cupertino 1.2.0
+ ~/.cupertino-dev/search.db (schema 18)"]:::arm
H -->|"cupertino search 'URL' --limit 10"| BA
H -->|"cupertino search 'URL' --limit 10"| BB
BA --> SA["for each pair:
modern_rank (1st match of modern_regex in top-10)
legacy_rank (1st match of legacy_regex)"]
BB --> SB["for each pair:
modern_rank
legacy_rank"]
SA --> OA["classify outcome:
modern_wins / legacy_wins / modern_only /
legacy_only / tied / both_missing"]
SB --> OB["classify outcome:
same six categories"]
OA --> AGGA["arm A: count modern-preferred = modern_wins + modern_only"]
OB --> AGGB["arm B: count modern-preferred"]
AGGA --> PAIR["paired transitions:
a_lose_b_win (improvement)
a_win_b_lose (regression)
both_win / both_lose"]:::stat
AGGB --> PAIR
PAIR --> MD["this audit MD
(dashboard glob picks up)"]:::out
classDef input fill:#0a84ff,stroke:#0040cc,color:#fff
classDef arm fill:#5856d6,stroke:#3634a3,color:#fff
classDef stat fill:#ff9500,stroke:#c4730a,color:#fff
classDef out fill:#34c759,stroke:#1f7a3a,color:#fff