Method
The whole site is built by a reproducible pipeline that pulls public sources, aggregates by the rule, and exports each map as a self-contained file, in Spanish and English. No step scans, probes, or touches a third-party system: it reads data already published or already indexed by others.
Sources by layer
| Layer | Source | What is taken |
|---|---|---|
| Structure (gas) | Gas transmission network snapshot, as of September 30, 2025 | Nodes and segments, topology |
| Structure (power) | Energy Secretariat | HV lines ≥220 kV and generation by MW |
| Impact | The gas graph | Directed reachability, downstream node count |
| Incidents | Public register | 14 incidents with province, subsector, actor |
| Exposure | DNS resolution + RIPEstat (BGP) | Autonomous system and holder per operator |
| Activity | NASA GIBS, VIIRS Black Marble | Night-lights composite |
| Who responds | Public bylaws and replicability analysis | Actors and relationships |
The gas snapshot is an in-house reconstruction of the transmission topology from public sources, with data as of September 30, 2025; it is the base of the structure and impact layers.
How each layer is computed
- Structure. The gas network comes from the snapshot; the power network from the official datasets filtered to ≥220 kV plus a curated list of large plants with their capacity; the other facilities from public coordinates. It draws the topology, not the load.
- Cascade impact. Directed graph source → target; for each node a breadth-first walk covers everything reachable downstream and counts the stranded nodes. It is structural connectivity, without flow data, because the load snapshot carries errors.
- Incidents. Read from the public register: one point per province, at the centroid, and a per-year count stacked by actor type. No location finer than the province is aggregated.
- Exposure. Each operator's domain resolves to an IP, RIPEstat is asked which autonomous system announces it and who its holder is, and the holder is classified. The IP is used for that query and discarded. The industrial-port sub-layer stays declared, not shown: the count that matters, filtered by protocol, sits behind a paid plan (see exposure).
- Activity. The map loads Black Marble tiles directly from NASA's open service and overlays the facilities. No radiance is reprocessed.
- Who responds. The graph is built by hand from the entities' public bylaws and the replicability analysis; the lines are relationships of governance or membership, not traffic.
The hard rule, as code
The repository's invariant (publish the aggregate, never the operator → host → port tuple) is a check,
pipeline/check_rule.py, that walks every published artifact and fails the build if it finds a literal IP or
a host key in the exposure data. The address resolved to find an autonomous system lives only in memory
during the pipeline and is never written to publishable disk.
Reproducibility
pip install -r requirements.txt
python3 pipeline/build_all.py # pull, aggregate, and export the es/en assets
python3 pipeline/check_rule.py # verify the hard rule
npm run build # mkdocs build --strict, Spanish and English
The input snapshots (gas network, incident register, electric datasets) travel versioned in
pipeline/data/, so a build does not depend on the sources being up at that moment. The layers that query
live services (RIPEstat, GIBS) rebuild when the pipeline runs.