CAS locked in → PubChem lookup fires ↓ ┌────────────┴────────────┐ PubChem has name? No name ↓ ↓ AI has name? keep AI name (if any) ┌───────┴───────┐ aiSatisfied = !aiName.isEmpty Yes No ↓ ↓ arbitrate use PubChem name directly ↓ aiSatisfied = true isSameCompound? ┌────┴────┐ Yes No ↓ ↓ labelIsCommonName? trust PubChem (CAS is reliable) ┌────┴────┐ Yes No ↓ ↓ use use label PubChem name name ("CHAPS") aiSatisfied = true → no more AI re-triggers