granja: el worker es el LXC PRESTADO (€0) — que no se vuelva a perder
El dato ya estaba en memoria y aun así se perdió dos veces, así que ahora vive en los sitios que se leen sin buscarlos: regla 1 bis de CLAUDE.md (que carga todo agente en cada sesión) y la skill 'granja' del repo. Se compila en dev.gioser.net PARA NO GASTAR HETZNER; no se levantan cajas hcloud salvo petición explícita. Y se arregla la fragilidad que salió al mirar: el reaper de cosecha-cron expulsa de .fleet todo lo que no esté en hcloud, y el LXC se salvaba SÓLO porque su nombre contiene la subcadena 'gioser' y caía en una lista negra que existe para proteger al hub de Hetzner — no tiene nada que ver con él. Medido con el bloque real del reaper contra un .fleet de juguete: nombre CON 'gioser' → 'en LISTA NEGRA ⇒ intocable' sobrevive el MISMO host como 'pruebasia-lxc' → 'ya no existe en hcloud' .fleet VACÍO O sea que la granja se mantenía conectada por una casualidad de nombre, y con otro nombre volvía a 'flota vacía' en el primer ciclo sin que nada fallara. Ahora el reaper pregunta por SSH si el host responde, que es preguntarle a la máquina en vez de al nombre. Verificado en las dos direcciones, con control: host vivo, nombre sin 'gioser' → 'no es de hcloud pero RESPONDE ⇒ se queda (€0)' host que no responde → 'no responde ⇒ lo saco de .fleet' (intención original) Queda anotado también que .fleet está gitignored: un hub recién clonado nace con la flota vacía y la granja queda desconectada en silencio — la cosecha dice 'flota vacía', los artefactos no vuelven, y estado-granja.sh reporta 'no hay worker vivo' con el worker compilando. Es como se descubrió esto hoy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
---
|
||||
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 hammer
|
||||
|
||||
## 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` (`<nombre> <ip>` 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 `hammer 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.
|
||||
Reference in New Issue
Block a user