`file_hash` opens the lowercased path on Windows, so files with uppercase names fail on case-sensitive dirs (`\wsl.localhost`)
Los mantenedores suelen responder en 1 día
@Deepjyoti-Sarmah ya está trabajando en esto.
Desde el 1/11/2026.
- #4937 de @Deepjyoti-Sarmah — abierto
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 65/100
Línea de trabajo
Empieza en graphify/cache.py en file_hash y _normalize_path. El resultado en minúsculas de os.path.normcase debe seguir siendo solo la clave de caché, mientras que is_file(), la ruta rápida de stat y la lectura usan la ruta original. El commit e73b6060 (#629) introdujo _normalize_path, así que primero verifica su intención. Está terminado cuando file_hash abre la escritura original y las claves de caché se mantienen estables, lo que un test que simula normcase puede demostrar sin WSL.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happened?
On Windows, file_hash (graphify/cache.py) normalizes the path with _normalize_path, which calls os.path.normcase and so lowercases it, and then uses that lowercased path for the file itself: p.is_file(), the stat fastpath and the read. On a case-sensitive directory, a file with uppercase letters in its name is then "not a file", and the rebuild fails.
I hit it on the WSL share (\\wsl.localhost\<distro>\...), which is case-sensitive. README.md becomes ...\readme.md, which does not exist there:
warning: worker failed for \\wsl.localhost\Ubuntu\home\<user>\repro\README.md: file_hash requires a file, got: \\wsl.localhost\ubuntu\home\<user>\repro\readme.md
[graphify watch] Rebuild failed: file_hash requires a file, got: \\wsl.localhost\ubuntu\home\<user>\repro\readme.md
Nothing to update or rebuild failed — check output above.
graphify update exits 1.
The lowercasing makes sense for the cache key (stable keys across Windows path spellings, #629), but it should not be the path used to open the file.
Steps to reproduce
- On Windows with WSL, a repo inside the distro with any file with an uppercase letter (here
README.mdplus 40.pyfiles). - From PowerShell,
cd \\wsl.localhost\Ubuntu\home\<user>\reproand rungraphify update . --force.
Today this step hangs first because of #4924; with that fix applied, it fails as above in about 10 s.
Graphify version
v8 at 0.9.100, plus the #4924 fix so the run gets past the lock.
Operating System
Windows 11 Pro (Insider build 26340), WSL 3.0.3, Ubuntu distro.
Python Version
3.11
Additional context
_normalize_path came in with e73b6060 (#629, UNC and extended-length paths in the semantic cache).
- Lenguaje dominante
- Python
- Estrellas
- 124k
- Forks
- 11.9k
- Merge medio
- 2 h 35 min
- PR fusionados (30 d)
- 6
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Graphify-Labs/graphify
-
watch liveness check resolves relative source identities against process CWD instead of watch rootAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Graphify-Labs/graphify#4896 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
extract --out <dir>: semantic cache never saved, docs missing from manifest (relative source_file resolved against --out)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Graphify-Labs/graphify#4831 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
hooks: last-resort `python3` probe launches the Microsoft Store redirector on Windows (visible console flash, exit 9009)Posiblemente ocupada @Deepjyoti-Sarmah la tomó hace 15 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Graphify-Labs/graphify#4563 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
GRAPHIFY_DISABLE_THINKING is ignored by the claude backend, so thinking eats max_tokens and extraction truncatesPosiblemente ocupada @bercedev la tomó hace 15 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
Graphify-Labs/graphify#4546 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
--update runbook: graph.json backup instruction comes after the diff that needs it, so the graph diff never runsPosiblemente ocupada @sunildivakar96-cpu la tomó hace 16 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Graphify-Labs/graphify#4539 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de Graphify-Labs/graphify
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
521xueweihan/HelloGitHub#4237 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
jejjohnson/gaussx#721 ·
Los mantenedores suelen responder en 1 día
-
mock-core-configs/etc/mock/rocky-10-riscv64.cfg contains the wrong architecture in config_opts['root']Posiblemente ocupada @jasonmontleon la tomó hace 4 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 94/100
rpm-software-management/mock#1834 ·
-
Switch to `container` resource detector in declarative configuration doc after 1.46.0 rebaseAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
elastic/elastic-otel-python#683 ·
Los mantenedores suelen responder en 1 día
-
ci-rerun: collect.py fails a whole pr-babysit cycle on one transient GitHub 5xx and never retriesAbiertofollow-up
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día