climalisted
Install: claude install-skill amalvarezme/chec-local-uiti-vano-interpreter
## Activation Contract
Load when the user says `/clima` or asks to enrich CHEC data with weather. Fully interactive:
select source, then run the 3 gates IN ORDER, then process the mode. All heavy logic lives in
[`clima_engine.py`](../../../src/chec_local_interpreter/clima_engine.py); the canonical calls are
in [`assets/runbook.py`](assets/runbook.py). This file is the runbook, not the reasoning.
## Hard Rules
- Selecciona la fuente primero, luego corre los gates en orden. Nunca proceses sin pasar los 3.
- **Gate 1 (ubicaciones) es bloqueante y va primero**: sin coordenadas validas, detente.
- La `apikey` (modo paga) la ESCRIBE el usuario, interactiva; solo en memoria, nunca la persistas ni la registres.
- Modo B deja SOLO el CSV de resultado en `data/`; el rate log va a `.clima_cache/`.
- Unificar/concatenar solo entre archivos con el MISMO `origen_id`.
- Run Python with the repo venv: `.venv/bin/python`.
## Decision Gates
| Fuente | Modo | Coordenadas | Salida |
|---|---|---|---|
| `data/Indicadores_vano_v3.csv` (fija) | A | `X1`,`Y1` | reescribe el mismo v3 |
| tabla que el usuario elige de `data/` | B | `XPOS1_RED_BASE`,`YPOS1_RED_AFECTA` | `data/clima_<fuente>_<ini>_a_<fin>.csv` |
## Execution Steps
1. Pregunta el **modo** (A / B). En B, lista `runbook.listar_tablas()` y pide elegir el archivo. STOP.
2. **Gate 1 — Ubicaciones**: `a_gate1()` (A) o `b_gate1(archivo)` (B). Si `ok` es False, detente y reporta.
3. **Gate 2 — API**: pregunta gratuita o paga. Si paga, pid