--- name: granja description: Cómo se compila en este proyecto — dónde está el worker, cómo se enchufa, y por qué NO se levantan cajas de pago. Usar al empezar cualquier trabajo de build, cosecha o estado de la granja. --- # La granja de takana ## Lo primero, porque cuesta dinero equivocarse **Se compila en `dev.gioser.net` — un LXC PRESTADO, coste €0.** 6 cores, 16 G RAM + 8 G swap, 196 G. Se usa exactamente **para no gastar Hetzner**. **NO levantar cajas hcloud** (`farm-up.sh`, `farm-run.sh`) salvo petición explícita del usuario. El modelo efímero de pago existe, funciona y está documentado, pero está SUPERADO como sitio de trabajo desde el 2026-09-05. Un `farm-up` por reflejo gasta euros que no hacen falta. ```sh ssh -i ~/.ssh/github5 root@dev.gioser.net # github5 está en su authorized_keys ssh -i ~/.ssh/sergio root@dev.gioser.net # la otra válida; NO hay entrada en ~/.ssh/config, # por eso un `ssh` a secas da "Permission denied" y # parece que la caja rechaza — no ofrece clave, nada más ``` ## Antes de decir «no hay worker» `scripts/farm/.fleet` (` ` por línea) es lo que conecta hub y worker, y **está en `.gitignore`**. Un hub recién clonado nace con la flota vacía: la cosecha dice «flota vacía» cada 30 minutos, los artefactos del worker no vuelven, y **nada falla**. `estado-granja.sh` dirá «no hay worker vivo» aunque el worker esté compilando. Comprobar el fichero antes de creerle al informe: cat scripts/farm/.fleet || echo "dev.gioser.net 154.197.1.13" > scripts/farm/.fleet ## Reglas que no son estilo 1. **Todo `takana build` bajo `flock -o work/.farm-build.lock`.** El `-o` no es opcional: sin él un proceso fugado hereda el fd y deja la granja sin compilar, en silencio. Ver regla 1 de CLAUDE.md. 2. **Un lock tomado sin build a la vista se diagnostica con `fuser -v work/.farm-build.lock`**, que nombra al fugado. Pasó dos veces el mismo día. 3. **Antes de contar nada del corpus, mirar `docs/state/build-state*.json`** — hay uno por cola (corpus, kde, gnome, cosmic, wlr) y el cron los regenera los cinco cada 30 min. No recontar a mano. 4. **Nada se borra por nombre.** `gioser` es el hub del usuario, fijo y sin backup. ## Qué hace el latido `cosecha-cron.sh` cada 30 min: siembra código hub→worker (rsync `--delete`, excluye `work/store/target/.git`), baja el **manifiesto** de sellados del worker (no el store — bajarlo deshacía la poda cada media hora), regenera los cinco grafos, y commitea+pushea el estado.