🤖 fix: config load drops workspace rows when two project keys normalize to the same path

Cerrado Apto para principiantes
#5,926 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
70/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript
Área
backend

Línea de trabajo

Empieza en src/node/config/index.ts en Config.normalizeConfigProjects, donde las claves depuradas se convierten en un Map que conserva solo el último par por ruta normalizada. Reproduce con los dos casos de alias de la tabla, /home/u/repo con /home/u/repo/ y C: con C:\, cargando y luego guardando una Config real. Está terminado cuando ambos IDs de workspace sobreviven al guardado y el conjunto de IDs de throwOnError los incluye.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug investigation

Summary

When config.json stores two project keys that normalize to the same path, the next save drops the workspace rows of all but one of them. Examples: /home/u/repo and /home/u/repo/, or C: and C:\. This happens on every platform.

Cause

Config.normalizeConfigProjects (src/node/config/index.ts) builds new Map(normalizedPairs) from the stripped keys. A Map keeps the last pair for a key, so earlier aliases vanish in memory, and the next save writes only the survivor.

Reproduction (probed on main 424453bd0f, real Config, load then save)

Stored keys Saved result
"/home/u/repo" (ws-one), "/home/u/repo/" (ws-two) [["/home/u/repo", ["ws-two"]]]
"C:" (ws-one), "C:\\" (ws-two) [["C:", ["ws-two"]]]

ws-one is gone from disk in both cases. Strict callers (throwOnError) also get an id set without those rows.

Context

Found while planning #5924. #5924's drive-root key change makes C: and C:\ aliases more likely after a downgrade and an upgrade, so #5924 depends on this fix.

Ownership

  • Owner: the coordinator desk.

Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: high • Cost: $113.10

Lenguaje dominante
TypeScript
Estrellas
2.1k
Forks
139
Merge medio
3 h 35 min
PR fusionados (30 d)
950

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de coder/xum

Todos los issues de coder/xum

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.