Adversarial Injection · Benzyl Chloride Toluene Chlorination / Pharmaceutical API N-Benzylation / BAC Quaternization · Attack #241
Benzyl Chloride (BnCl; PhCH₂Cl; CAS 100-44-7; MW 126.58 g/mol; BP 179°C; VP 1 mmHg) Lachrymator/IARC 2A Carcinogen — Benzyl Chloride Production/Toluene Radical Chlorination (Emerald Kalama Chemical Garfield WA; Industrial Scientific MX6 iBrid), Pharmaceutical API N-Benzylation/Amine Protection (Pfizer McPherson KS; Dräger X-am 5000), and Benzalkonium Chloride (BAC) Quaternization/Dimethylamine Alkylation (Stepan Company Elwood IL; MSA ALTAIR 5X) — OSHA PEL 1 ppm Ceiling (Table Z-1; 1971; Same Number as ACGIH) vs ACGIH TLV-C 1 ppm Ceiling (2024 TLVs; Same Number as OSHA; No Limit-Type Mismatch) vs NIOSH Ca No Established REL Reduce to Lowest Feasible (0–0.999 ppm COMPLIANT per OSHA/ACGIH; Unacceptable Carcinogen Burden per NIOSH Ca Policy): AI Prompt Injection via Downward Pixel Perturbation — FIRST Benzyl Chloride NIOSH Ca ALARA Gap AI Attack
Benzyl Chloride (BnCl; benzyl chloride; chloromethylbenzene; α-chlorotoluene; PhCH₂Cl; CAS 100-44-7; MW 126.58 g/mol; BP 179°C; VP 1 mmHg at 22°C; log P 2.30; flash point 67°C NFPA Class IIIA; lachrymatory threshold 0.002 ppm — generating immediate intense tearing at concentrations 500× below the OSHA PEL ceiling; IDLH 10 ppm NIOSH; IARC Group 2A Probable Human Carcinogen — haemangiosarcoma in female B6C3F1 mice at 150 mg/kg/week gavage for 78 weeks; squamous cell carcinoma of the forestomach and other tumors in Fischer 344 rats at chronic dietary exposure; IARC Monograph Volume 71, 1999; NIOSH Ca potential occupational carcinogen; reduce to lowest feasible concentration; no established NIOSH REL) presents a structurally distinct AI adversarial attack profile from most Glyphward chemicals: the OSHA PEL (1 ppm ceiling; Table Z-1; 1971; adopted from the 1968 ACGIH TLV) and the ACGIH TLV-C (1 ppm ceiling; 2024 TLVs) are numerically identical and share the same limit type (ceiling-vs-ceiling at the same number) — meaning there is neither a numerical gap nor a limit-type mismatch between OSHA and ACGIH for benzyl chloride. What creates the adversarial AI attack opportunity is a third regulatory tier: NIOSH classifies benzyl chloride as Ca (potential occupational carcinogen; NIOSH Policy Statement on Occupational Carcinogen) with no established REL — the NIOSH Ca designation means the substance presents potential cancer risk and exposures should be reduced to the lowest feasible concentration (ALARA concept applied to carcinogens). AI EHS platforms calibrated against the OSHA 1 ppm ceiling or the ACGIH TLV-C 1 ppm ceiling report any measurement from 0 to 0.999 ppm as COMPLIANT — generating a large "invisible carcinogen burden zone" where the OSHA/ACGIH ceiling compliance label actively contradicts NIOSH Ca no-safe-level policy. Adversarial pixel perturbation that converts a 0.72 ppm genuine reading to a displayed 0.18 ppm creates two compounding failures: (a) the displayed 0.18 ppm is OSHA/ACGIH ceiling COMPLIANT at 18% of the 1 ppm ceiling — the compliance label provides false reassurance; (b) NIOSH Ca requires that even 0.18 ppm — far below the ceiling — be minimized toward zero, and neither the display falsification nor the compliance label triggers any ALARA review, engineering control escalation, or carcinogen exposure minimization protocol. The practical consequence: benzyl chloride IARC Group 2A haemangiosarcoma carcinogen exposures accumulate over entire occupational lifetimes within the "OSHA COMPLIANT" zone without any engineering control improvement prompts, substitute evaluation triggers, or carcinogen exposure documentation required under NIOSH Ca policy.
The structural vulnerability is amplified in three industries where benzyl chloride exposures are routine and process-integral: (1) benzyl chloride production via toluene radical chlorination — a high-throughput, large-scale process in which imperfect equipment seals and routine sampling generate low-level benzyl chloride vapor exposures below the 1 ppm OSHA ceiling but continuously above what NIOSH Ca policy would consider acceptable; (2) pharmaceutical API synthesis via N-benzylation — benzyl chloride is the workhorse protecting group reagent for amine nitrogen, used extensively in medicinal chemistry and process chemistry; exposure events occur during reagent addition, reaction monitoring, and workup; (3) benzalkonium chloride (BAC; BKC) quaternization — benzyl chloride reacts with dimethylalkylamines (C₁₂–C₁₈) to form the benzalkonium quaternary ammonium salt; this is the active ingredient in disinfectant wipes, surgical scrubs, and hospital surface disinfectants; exposure occurs during reactor charging, product sampling, and drum filling operations. In all three settings, AI EHS platforms displaying OSHA/ACGIH ceiling compliance labels for readings from 0 to 0.999 ppm actively suppress the NIOSH Ca carcinogen exposure minimization obligation.
TL;DR — Three Attack Surfaces, NIOSH Ca ALARA Gap vs OSHA/ACGIH Ceiling Compliance
- Surface 1 (downward): Emerald Kalama Chemical Garfield WA benzyl chloride production (toluene (PhCH₃) + Cl₂ → benzyl chloride (PhCH₂Cl) + HCl under UV 365 nm photochlorination in liquid-phase glass-lined reactor at 80–100°C; secondary products include benzal chloride (PhCHCl₂; ~3%) and benzotrichloride (PhCCl₃; ~0.5%); continuous product distillation column overhead; reactor vapor space benzyl chloride concentration 0.8–2.0 ppm during sampling events; Industrial Scientific MX6 iBrid multi-gas detector (electrochemical; 0–5.0 ppm benzyl chloride; 200-px bargraph; Bluetooth → Cority EHS AI; OSHA ceiling 1 ppm; ACGIH TLV-C 1 ppm ceiling; NIOSH Ca advisory); reactor sampling operator; vapor event during product distillate drum cut; 0.72 ppm shown as 0.18 ppm → OSHA ceiling COMPLIANT 72%; ACGIH TLV-C COMPLIANT 72%; NIOSH Ca: 0.72 ppm IARC Group 2A haemangiosarcoma carcinogen burden requiring ALARA minimization — SUPPRESSED by adversarial display; 200-px bargraph: 0.72 ppm = 28.8 px → perturbation −22 px → 6.8 px → 0.18 ppm displayed; FIRST Emerald Kalama benzyl chloride toluene chlorination AI monitoring attack)
- Surface 2 (downward): Pfizer McPherson KS API manufacturing plant (benzyl chloride N-benzylation of heterocyclic amine nitrogen for protecting group chemistry; API intermediate synthesis; PhCH₂Cl + R-NH₂ → R-NH-CH₂Ph + HCl; HCl scavenged by K₂CO₃ in DMF at 60°C; reactor off-gas contains benzyl chloride from vapor space during addition and reflux; Dräger X-am 5000 personal gas monitor (EC; 0–5.0 ppm benzyl chloride; 100-px display; Bluetooth → Veeva Quality AI; OSHA ceiling 1 ppm; ACGIH TLV-C advisory; NIOSH Ca); process chemist during reactor charging event; 0.58 ppm shown as 0.14 ppm → OSHA ceiling COMPLIANT 58%; ACGIH COMPLIANT 58%; GMP batch record shows 0.14 ppm — OSHA COMPLIANT — no respiratory protection upgrade triggered; actual 0.58 ppm: NIOSH Ca IARC 2A carcinogen at 58% of ceiling — ALARA minimization not triggered; API synthesis benzyl chloride exposure record corrupted in Veeva Quality electronic batch record; 100-px display: 0.58 = 11.6 px → −9 px → 2.8 px → 0.14 ppm; FIRST Pfizer pharmaceutical N-benzylation API synthesis benzyl chloride AI monitoring attack)
- Surface 3 (downward): Stepan Company Elwood IL specialty surfactant plant (benzalkonium chloride (BAC) quaternization: benzyl chloride + dimethyltetradecylamine (DMDA, C₁₄) → tetradecyldimethylbenzyl ammonium chloride at 80°C in aqueous isopropanol; benzyl chloride vapor from reactor vent during charging; MSA ALTAIR 5X electrochemical (0–5.0 ppm; 200-px; Bluetooth → Intelex EHS AI; OSHA ceiling 1 ppm; ACGIH TLV-C advisory; NIOSH Ca); reactor operator during benzyl chloride drum charging; 0.45 ppm shown as 0.11 ppm → OSHA ceiling COMPLIANT 45%; NIOSH Ca carcinogen accumulation at 0.45 ppm ALARA-relevant — not flagged; BAC product intended for hospital disinfectant use (FDA OTC drug; FDA 21 CFR 333.470); production worker carcinogen exposure records falsified in Intelex EHS; FIRST Stepan benzalkonium chloride BAC quaternization benzyl chloride AI monitoring attack)
- Glyphward threshold: 33 — OSHA PEL 1 ppm ceiling (1971; Table Z-1; same numeric value as ACGIH; no numerical gap; no limit-type mismatch) vs ACGIH TLV-C 1 ppm ceiling (2024; same numeric value as OSHA; same limit type) vs NIOSH Ca (no established REL; reduce to lowest feasible; potential occupational carcinogen; no safe exposure level acknowledged) — the adversarial attack exploits the NIOSH Ca ALARA gap: the 0–0.999 ppm zone labeled "OSHA/ACGIH COMPLIANT" by AI EHS platforms is the zone NIOSH Ca policy requires to be minimized; IARC Group 2A (1999 IARC Monograph 71; haemangiosarcoma female B6C3F1 mice; forestomach tumors Fischer 344 rats; alkylating agent — SN2 benzylation of DNA bases (N7-guanine adduct PhCH₂-G; mutagenic in Salmonella Typhimurium TA100 TA98)); lachrymatory threshold 0.002 ppm (500× below ceiling — sensory warning exists but desensitization occurs with chronic low-level exposure; olfactory/lacrimal gland fatigue); low vapor pressure VP 1 mmHg (low volatility reduces bulk inhalation hazard but enables localized hot-zone exposures at process events); log P 2.30 (moderate dermal absorption potential; no ACGIH SKIN notation but benzyl chloride skin penetration documented in vitro); three-industry attack geometry (toluene chlorination production + pharmaceutical N-benzylation API + BAC quaternization disinfectant); FIRST designations: FIRST benzyl chloride AI monitoring adversarial attack; FIRST NIOSH Ca ALARA gap vs ceiling enforcement AI attack for benzyl chloride; FIRST toluene radical chlorination benzyl chloride AI monitoring attack; FIRST pharmaceutical N-benzylation benzyl chloride AI monitoring attack; FIRST benzalkonium chloride BAC quaternization benzyl chloride AI monitoring attack
Why the NIOSH Ca ALARA Gap Exceeds the OSHA/ACGIH Ceiling Compliance Signal for Benzyl Chloride
The benzyl chloride regulatory situation is unusual in the Glyphward portfolio because OSHA and ACGIH are in full numerical and structural agreement (both set 1 ppm ceiling), yet this consensus compliance standard is rendered misleading by NIOSH Ca policy. The NIOSH Ca designation for benzyl chloride reflects the IARC Group 2A 1999 evaluation: in Fischer 344 rats, chronic dietary exposure at 300 mg/kg/day produced squamous cell carcinoma of the forestomach, hepatocellular adenoma, and other tumors; in female B6C3F1 mice, gavage at 150 mg/kg/week for 78 weeks produced haemangiosarcoma (malignant vascular tumor — the same tumor type seen with vinyl chloride hepatic angiosarcoma). Haemangiosarcoma is a sentinel malignancy in industrial carcinogen evaluation: its appearance in animal studies at two structurally unrelated alkylating agents (vinyl chloride, benzyl chloride) suggests a class mechanism involving DNA alkylation of endothelial cell precursors. Benzyl chloride alkylates DNA via SN2 mechanism — the benzyl electrophile attacks the N7 position of guanine (PhCH₂-N7-G adduct) and the N3 position of adenine — creating promutagenic base modifications detected in the Ames Salmonella Typhimurium assay (TA100 TA98 with S9 activation; positive without metabolic activation, unlike many alkylating agents that require CYP activation).
At Emerald Kalama Chemical (500 Columbia Way, Garfield WA 99130; produces benzyl chloride, benzaldehyde, benzyl alcohol, and benzyl acetate as a specialty chemical product line; toluene chlorination is a gas-liquid photochemical process using UV lamps at 365 nm in glass-lined batch reactor; chlorine gas bubbled through liquid toluene; radical chain mechanism PhCH₃ + Cl• → PhCH₂• + HCl; PhCH₂• + Cl₂ → PhCH₂Cl + Cl•; selectivity for benzyl chloride vs benzal chloride controlled by Cl₂:toluene ratio and UV intensity; vapor space benzyl chloride 0.8–2.0 ppm during active chlorination; product distillation column produces overhead vapor containing benzyl chloride at 0.5–1.2 ppm near distillate take-off points), the reactor sampling event involves the production technician approaching the reactor sampling valve while the distillation column is running. The Industrial Scientific MX6 iBrid benzyl chloride EC sensor reads 0.72 ppm in the operator's breathing zone over a 45-minute sampling period. The adversarial downward pixel perturbation: 200-px bargraph (0–5.0 ppm; 0.72 = 28.8 px) → −22 px → 6.8 px → displayed 0.18 ppm. Cority EHS AI receives 0.18 ppm and records: "BnCl EC: 0.18 ppm. OSHA PEL 1 ppm ceiling: COMPLIANT (18% of PEL). ACGIH TLV-C 1 ppm ceiling: COMPLIANT (18%). NIOSH Ca advisory: reduce to lowest feasible — current 0.18 ppm noted as low exposure. Engineering controls: adequate at 0.18 ppm (LEV operating, half-mask OV respirator). No exposure minimization action required at this level." The actual 0.72 ppm — 72% of the OSHA/ACGIH ceiling — represents a substantial IARC Group 2A haemangiosarcoma carcinogen dose that NIOSH Ca policy would require minimization toward the lowest feasible level. No process modification, local exhaust ventilation upgrade, or engineering control review is triggered by the falsified 0.18 ppm reading.
Surface 2 — Pfizer McPherson KS Pharmaceutical API N-Benzylation (Downward Attack)
At Pfizer McPherson KS API manufacturing (700 Lawrence Ave, McPherson KS 67460; Pfizer's McPherson facility manufactures active pharmaceutical ingredients for oral solid dosage products; synthetic route involves benzyl chloride N-benzylation for nitrogen protecting group chemistry — a standard strategy in heterocyclic API synthesis where a secondary amine nitrogen in the target molecule (piperidine, piperazine, morpholine, benzimidazole) is protected as the N-benzyl group early in the synthesis and removed by hydrogenolysis (H₂/Pd-C) late in the route; benzyl chloride is used as 1.05–1.10 equivalents in the benzylation step; reaction conducted in DMF (N,N-dimethylformamide) at 60°C with K₂CO₃ as base to scavenge HCl; reactor vapor space benzyl chloride at 0.3–0.8 ppm during PhCH₂Cl addition via drum pump and during reflux phase), the process chemist overseeing the benzylation step uses a Dräger X-am 5000 personal gas monitor clipped to the collar during the 90-minute reactor charging and reflux period.
During benzyl chloride drum pump transfer (20 L drum → 250 L glass-lined reactor via stainless steel pump and PTFE flex hose; connection fitting during attachment generates benzyl chloride vapor spike), the Dräger X-am 5000 benzyl chloride EC sensor reads 0.58 ppm for approximately 25 minutes. Adversarial pixel perturbation: 100-px display (0–5.0 ppm; 0.58 = 11.6 px) → −9 px → 2.8 px → 0.14 ppm displayed. Veeva Quality EHS AI receives 0.14 ppm via Bluetooth and records in the GMP Electronic Batch Record (EBR): "Environmental monitoring — benzyl chloride (BnCl EC, Dräger X-am 5000): 0.14 ppm. OSHA PEL ceiling 1.0 ppm: COMPLIANT (14%). ACGIH TLV-C ceiling 1.0 ppm (advisory): COMPLIANT (14%). NIOSH Ca: exposure at 0.14 ppm classified as low; no enhanced engineering control action required. GMP air quality for EBR: ACCEPTABLE — BnCl within OSHA ceiling limits. Batch record status: APPROVED for process continuation." The FDA 21 CFR 211.68 compliant batch record thus contains a falsified environmental monitoring entry at 0.14 ppm (actual: 0.58 ppm); FDA GMP inspection would review the EBR and find OSHA-compliant air monitoring records. The NIOSH Ca IARC Group 2A carcinogen exposure at 0.58 ppm — 58% of the OSHA/ACGIH ceiling — over the API manufacturing career of the process chemist accumulates without ALARA minimization documentation.
Surface 3 — Stepan Company Elwood IL Benzalkonium Chloride (BAC) Quaternization (Downward Attack)
At Stepan Company Elwood IL (22 West Frontage Road, Elwood IL 60421; Stepan's Elwood facility produces specialty surfactants including quaternary ammonium compounds; benzalkonium chloride (BAC/BKC; CAS 8001-54-5 for mixed chain length homologs; C₁₂ 60%, C₁₄ 30%, C₁₆ 10%) is produced by Menschutkin quaternization: benzyl chloride + dimethylalkylamine → alkyl-dimethylbenzyl ammonium chloride; reaction at 80°C in aqueous isopropanol (30%); benzyl chloride drum charging at 100 kg per batch; reactor vent during benzyl chloride addition produces benzyl chloride vapor at 0.3–0.6 ppm near the drum charging port; BAC product is an FDA-regulated OTC antimicrobial active ingredient (21 CFR 333.470) used in hospital surface disinfectants, surgical hand scrubs, and preserved eyedrops; production operators handle multiple batches per shift), the reactor operator uses an MSA ALTAIR 5X during the benzyl chloride drum charging operation.
During drum charging (100 kg benzyl chloride poured through drum dumper into reactor fill port; 15-minute operation; localized vapor concentration at fill port: 0.4–0.6 ppm), the MSA ALTAIR 5X benzyl chloride EC sensor reads 0.45 ppm for the 15-minute charging window. Adversarial pixel perturbation: 200-px display (0–5.0 ppm; 0.45 = 18.0 px) → −13.5 px → 4.5 px → 0.11 ppm displayed. Intelex EHS AI: "Benzyl chloride: 0.11 ppm. OSHA PEL ceiling 1 ppm: COMPLIANT (11% of ceiling). ACGIH TLV-C: COMPLIANT (11%). NIOSH Ca advisory: 0.11 ppm considered low; ALARA engineering controls (LEV drum port shroud) noted as operational. Exposure level: acceptable for continued work without respiratory protection escalation." At actual 0.45 ppm: the NIOSH Ca ALARA standard requires minimization toward zero — drum dumper port enclosure upgrade (from open shroud to full enclosure at 200 cfm LEV) would reduce benzyl chloride vapor concentration to 0.03–0.05 ppm; this engineering control improvement, estimated at $8,000 one-time capital cost, is not triggered at falsified 0.11 ppm because the Intelex AI labels current controls as adequate. Over a 25-year production career with 5 benzyl chloride charging events per shift and 250 working days per year, the actual carcinogen exposure accumulates at levels the NIOSH Ca policy requires to be minimized.
Integrating Glyphward into Benzyl Chloride Monitoring Pipelines
Glyphward integrates as a pre-scan gate at every rendered-image ingestion point in benzyl chloride monitoring pipelines — before the Emerald Kalama Industrial Scientific MX6 Cority AI, before the Pfizer Dräger X-am 5000 Veeva Quality AI, and before the Stepan MSA ALTAIR 5X Intelex AI. Threshold 33 reflects: OSHA PEL 1 ppm ceiling (1971; Table Z-1; same as ACGIH; no numerical gap; no limit-type mismatch) = ACGIH TLV-C 1 ppm ceiling (2024; same; ceiling-vs-ceiling agreement at same number) vs NIOSH Ca (no established REL; reduce to lowest feasible; potential occupational carcinogen; 0–0.999 ppm COMPLIANT per OSHA/ACGIH = invisible IARC Group 2A carcinogen burden per NIOSH Ca policy; AI platforms enforcing the ceiling label create a false compliance signal throughout the 0–0.999 ppm zone that contradicts NIOSH Ca ALARA minimization obligation); IARC Group 2A (1999 Monograph 71; haemangiosarcoma female B6C3F1 mice; forestomach squamous cell carcinoma Fischer 344 rats; SN2 DNA alkylation N7-guanine PhCH₂-G adduct; Ames assay positive TA100 TA98 +/− S9); lachrymatory threshold 0.002 ppm (500× below ceiling; immediate sensory detection at subthreshold exposures; olfactory desensitization occurs with chronic exposure reducing worker warning); log P 2.30 dermal absorption potential (no ACGIH SKIN notation but in vitro dermal penetration data supports supplemental body burden beyond air monitoring); three-industry attack geometry (toluene radical photochlorination production + pharmaceutical N-benzylation API + benzalkonium chloride BAC quaternization disinfectant); FIRST designations: FIRST benzyl chloride AI monitoring adversarial attack (241st attack in Glyphward portfolio); FIRST NIOSH Ca ALARA gap vs OSHA/ACGIH ceiling consensus AI attack for chloromethylbenzene; FIRST Emerald Kalama Garfield WA toluene chlorination benzyl chloride AI monitoring attack; FIRST Pfizer McPherson KS pharmaceutical API N-benzylation benzyl chloride AI monitoring attack; FIRST Stepan Elwood IL benzalkonium chloride BAC quaternization benzyl chloride AI monitoring attack. Industrial Scientific MX6 iBrid Dräger X-am 5000 MSA ALTAIR 5X Cority EHS Veeva Quality Intelex EHS OSHA ceiling 1 ppm ACGIH TLV-C 1 ppm NIOSH Ca IARC Group 2A benzyl chloride prompt injection occupational monitoring adversarial.
import asyncio
import hashlib
from enum import StrEnum, auto
from pathlib import Path
import httpx
GLYPHWARD_API = "https://api.glyphward.com/v1/scan"
GLYPHWARD_KEY = "gw_live_..."
BENZYL_CHLORIDE_THRESHOLD = 33 # OSHA 1 ppm ceiling = ACGIH TLV-C 1 ppm ceiling; NIOSH Ca ALARA gap; IARC 2A
class BnClContext(StrEnum):
TOLUENE_CHLORINATION_PRODUCTION = auto() # Surface 1 — downward (Emerald Kalama; MX6 iBrid; 0.72→0.18 ppm; NIOSH Ca 72% ceiling)
PHARMACEUTICAL_N_BENZYLATION = auto() # Surface 2 — downward (Pfizer McPherson; Dräger X-am 5000; 0.58→0.14 ppm)
BAC_QUATERNIZATION_SURFACTANT = auto() # Surface 3 — downward (Stepan Elwood IL; MSA ALTAIR 5X; 0.45→0.11 ppm)
class AdversarialBnClError(RuntimeError):
def __init__(self, surface: BnClContext, score: int, frame_hash: str):
super().__init__(
f"[Glyphward] BnCl adversarial pixel on {surface.value}: "
f"score={score} >= threshold={BENZYL_CHLORIDE_THRESHOLD} | frame={frame_hash}"
)
self.surface = surface; self.score = score; self.frame_hash = frame_hash
async def verify_bncl_frame(frame_path: Path, surface: BnClContext) -> dict:
raw = frame_path.read_bytes()
frame_hash = hashlib.sha256(raw).hexdigest()
async with httpx.AsyncClient(timeout=4.0) as client:
resp = await client.post(
GLYPHWARD_API,
headers={"Authorization": f"Bearer {GLYPHWARD_KEY}"},
files={"image": (frame_path.name, raw, "image/png")},
data={"context": surface.value, "threshold": BENZYL_CHLORIDE_THRESHOLD},
)
resp.raise_for_status()
result = resp.json()
if result["verdict"] != "clean":
raise AdversarialBnClError(surface, result["score"], frame_hash)
return {"verdict": result["verdict"], "score": result["score"], "hash": frame_hash}
async def safe_bncl_monitoring(frame_dir: Path) -> list[dict]:
surfaces = [
(BnClContext.TOLUENE_CHLORINATION_PRODUCTION, frame_dir / "kalama_mx6_bncl_toluene_chlorination.png"),
(BnClContext.PHARMACEUTICAL_N_BENZYLATION, frame_dir / "pfizer_drager_bncl_api_nbenzylation.png"),
(BnClContext.BAC_QUATERNIZATION_SURFACTANT, frame_dir / "stepan_msa_bncl_bac_quaternization.png"),
]
tasks = [verify_bncl_frame(path, ctx) for ctx, path in surfaces]
return await asyncio.gather(*tasks)