🤖 fix: config load drops workspace rows when two project keys normalize to the same path
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
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
- 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 coder/xum
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
coder/xum#7733 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
hugomrdias/playwright-test#753 ·
Los mantenedores suelen responder en 1 día
-
Review view: Daily/Weekly Review header buttons use the app-wide toolbar control stylePosiblemente ocupada @colherdesopa la tomó hoy. Abierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 90/100
dongdongbh/Mindwtr#1515 ·
Los mantenedores suelen responder en 1 día
-
pending-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
kirodotdev/Kiro#12301 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100