From a19fc8bcf065e627a9af8f2cb676450718d37978 Mon Sep 17 00:00:00 2001 From: Sergio Date: Tue, 8 Sep 2026 19:54:19 +0000 Subject: [PATCH] seed-graph: decir que falta nix, en vez de reventar con un traceback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 'yupana frontera ' —el verbo que responde qué pide upstream y no tenemos— moría con veinte líneas de traceback terminadas en FileNotFoundError: 'nix'. Eso tiene la cara de un bug de código y manda a depurar el script, cuando lo único que falta es una herramienta que en esta máquina nunca se instaló: el hub gioser no trae nix, y los docs/state/seed-*.json del repo se generaron en otra máquina el 2026-08-10. El coste no es el susto, es el desvío. Ahora es una precondición explícita que dice qué falta y qué hacer, y sale 2. ⚠ Dos errores míos que los controles cazaron en el acto, y por eso van escritos: · Eximí a --calibrar de la comprobación 'porque no usa nix'. Lo usa: el control lo mostró imprimiendo 'nix eval lote 1 (3 nombres)…' y muriendo igual. La exención era una suposición con forma de hecho. · Con la precondición delante del uso, 'seed-graph.py' a secas pasó a quejarse de nix en vez de explicarse. Un fallo de entorno va DESPUÉS del uso. Verificado en los tres caminos: sin args → uso; --frontera → mensaje de entorno; --calibrar → mensaje de entorno. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2 --- scripts/seed-graph.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/scripts/seed-graph.py b/scripts/seed-graph.py index 5cf9c0ce..5e24acab 100755 --- a/scripts/seed-graph.py +++ b/scripts/seed-graph.py @@ -31,7 +31,7 @@ # scripts/seed-graph.py --perfil # siembra los nodos `wanted` → seed-edges.json # scripts/seed-graph.py # siembra nombres sueltos # Env: NIXPKGS (def nixpkgs), NIX_ROOT (def ~/.nixstore; vacío = store del sistema) -import json, os, re, subprocess, sys, glob, tomllib +import shutil, json, os, re, subprocess, sys, glob, tomllib from pathlib import Path ROOT = Path(__file__).resolve().parent.parent @@ -413,6 +413,26 @@ def sembrar_a_fichero(nombres, recs): def main(): args = sys.argv[1:] + if not args: + print(__doc__ or "uso: seed-graph.py --calibrar [N] | --frontera

| --perfil

| ", + file=sys.stderr) + return 1 + # ⚠ PRECONDICIÓN EXPLÍCITA, y no es cosmética (2026-09-08). TODOS los verbos de este script + # preguntan a `nix eval` qué declara nixpkgs — incluido `--calibrar`, que yo había eximido por + # suposición hasta que el control lo desmintió en el acto. Sin `nix` en el PATH, la llamada moría + # con veinte líneas de traceback terminadas en `FileNotFoundError: 'nix'`, que es la cara de un + # BUG DE CÓDIGO: manda a depurar el script cuando lo único que falta es una herramienta que en + # esta máquina nunca se instaló. El coste no es el susto, es el desvío. Un fallo de ENTORNO tiene + # que decir qué falta y qué hacer; va DESPUÉS del uso, para que `seed-graph.py` a secas siga + # explicándose. + if not shutil.which("nix"): + print("seed-graph: falta `nix` en el PATH.\n" + " Este script pregunta a nixpkgs (`nix eval`) qué declara upstream como dependencias;\n" + " sin él no hay frontera que calcular. No es un fallo de las recetas ni del grafo.\n" + " El hub `gioser` no lo trae: los `docs/state/seed-*.json` del repo se generaron en\n" + " otra máquina (2026-08-10). Instalar nix, o correr este verbo donde ya esté.", + file=sys.stderr) + return 2 recs = recetas() if not args: print(__doc__ or "uso: seed-graph.py --calibrar [N] | --perfil

| ", file=sys.stderr)