"""Airgap layer for OncoDSL. Sits between the data layer (real gene symbols) and the engine (opaque IDs). The GP engine sees only an `anonymise()`d view of the expression matrix so the search can't lean on known gene-name priors — the MSI signature, if it emerges, must be rediscovered from the data. Public API: - `anonymise(matrix)` — rename columns to opaque IDs g00001…; write the symbol<->ID map to `data/processed/_sealed_gene_map.json` on first call. - `reveal(feature_ids)` — translate opaque IDs back. THE ONLY function allowed to open the sealed map. Must not be imported by the engine. """ from airgap.seal import OPAQUE_ID_RE, SEALED_PATH, anonymise, reveal __all__ = ["anonymise", "reveal", "SEALED_PATH", "OPAQUE_ID_RE"]