grafo de estado: un directorio VACIO se contaba como sellado
`state_of` decidia `sealed` con `os.path.isdir`, o sea por presencia del nombre y no del contenido. Hoy se vio en vivo: una cosecha que murio a mitad dejo `...-mise` sin un solo fichero y el grafo lo conto sellado — misma cifra, misma linea, indistinguible de la corrida buena. Es el eslabon que describe la regla 3 del CLAUDE.md: `Store::has` ya rechaza los vacios, pero cada consumidor que mire `isdir` los vuelve a leer como presencia. Un ausente falla ruidosamente; un vacio llega hasta el final diciendo que todo fue bien. Los cinco grafos salen identicos tras el cambio (no hay vacios en el store ahora mismo), asi que corrige el criterio sin mover ningun numero. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LykB7vw38b4Ck1Zij15RQ4
This commit is contained in:
+18
-1
@@ -176,11 +176,28 @@ for _d in SELLADOS_REMOTOS:
|
||||
_REMOTOS_POR_INAME.setdefault(_d.split("-", 1)[1] if "-" in _d else _d, []).append(_d)
|
||||
REMOTO_ONLY = set()
|
||||
|
||||
def _artefacto_presente(ruta):
|
||||
"""¿Hay un ARTEFACTO en `ruta`, o sólo un nombre?
|
||||
|
||||
⚠ Esto era `os.path.isdir(ruta)` y por eso un directorio VACÍO se contaba como `sealed`
|
||||
(2026-09-01). No es hipotético: una cosecha que murió a mitad dejó `…-mise` sin un solo fichero
|
||||
y el grafo lo dio por sellado — mismo número, misma línea, imposible de distinguir de la
|
||||
corrida buena. Es el eslabón que describe la regla 3 del CLAUDE.md: `Store::has` ya rechaza los
|
||||
vacíos, pero cada consumidor que mire presencia de directorio los vuelve a leer como presencia.
|
||||
**Un ausente falla ruidosamente; un vacío llega hasta el final diciendo que todo fue bien.**
|
||||
"""
|
||||
try:
|
||||
with os.scandir(ruta) as it:
|
||||
return next(it, None) is not None
|
||||
except (NotADirectoryError, FileNotFoundError):
|
||||
return False
|
||||
|
||||
|
||||
def state_of(iname, h):
|
||||
if h is None:
|
||||
return "unhashable"
|
||||
dirname = f"{h[3:]}-{iname}"
|
||||
if os.path.isdir(os.path.join(STORE, dirname)):
|
||||
if _artefacto_presente(os.path.join(STORE, dirname)):
|
||||
return "sealed"
|
||||
if dirname in SELLADOS_REMOTOS:
|
||||
REMOTO_ONLY.add(dirname)
|
||||
|
||||
Reference in New Issue
Block a user