warehouse: a relative SQLite file: URI still follows the working directory, and the fix is platform-dependent
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- bun, sqlite, typescript
Línea de trabajo
Comienza por el manejo de las conexiones del warehouse alrededor de las URI de archivos SQLite y compáralo con el intento de corrección #1204 descrito en el issue. Reproduce el problema con una base de datos real y una señuelo mientras cambias cwd/--dir, y después añade la comprobación del modo URI en tiempo de ejecución y el comportamiento de reescritura exclusivo de SQLite. Se considera terminado cuando cada rama indicada está cubierta por pruebas con binarios compilados en las plataformas distribuidas, y los datos señuelo demuestran que se abre la base de datos prevista.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens
A connection configured with a relative SQLite file: URI follows the process working directory, so --dir can point it at a different database. On macOS this is a genuine instance of the #1203 defect class, and a nastier one: the create-on-open guard cannot catch it, because the failure is opening the wrong existing database rather than making a new empty one.
Reproduced on macOS with bun:sqlite, one real store and one decoy:
config: file:warehouse.db
cwd: <decoy dir>
opens: ["decoy_table"] ← the decoy, not the configured store
with an absolute rewrite:
config: file:/abs/path/warehouse.db
opens: ["zorbulax_ledger"] ← the intended store
Why it is not fixed in #1204
I implemented the rewrite in #1204 and then removed it, because it is platform-dependent in a way I could not verify across the shipped targets.
bun:sqlite's URI handling is not uniform. On macOS, file:warehouse.db is parsed as a URI (SQLITE_OPEN_URI behaviour): the reproduction above is real. On Linux CI the same test failed — the configured path opened nothing, which is consistent with file: being treated as a literal filename rather than a URI there. Windows was never verified at all, and it is a shipped build target (packages/opencode/script/build.ts).
That matters because the rewrite changes which database opens. Applying it on a platform where file: is a literal filename turns a working config into a broken one — precisely the class of bug #1203 is about. Shipping it half-verified would have been worse than leaving the exotic case alone.
The attempt also produced four separate regressions during review, each caught only by empirical testing, which is a fair signal about how much care this needs:
- Percent-encoded absolute paths.
file:%2Fvar%2Fwh.dbis absolute; SQLite decodes before opening. Treating it as relative produced a path that does not exist. file::memory:is SQLite's in-memory URI. Absolutizing it turned an in-memory database into a file on disk.- Case sensitivity. SQLite recognises only a lowercase
file:. A case-insensitive match rewroteFILE:warehouse.db, a literal filename, into a different path. - Special characters in the base directory. A project path containing a literal
%,?, or#is URI syntax and needs encoding before being joined.
What a fix needs
- Detect at runtime whether
bun:sqliteon the current platform actually honours URI mode — e.g. probenew Database("file::memory:", { readwrite: true, create: false })once, which succeeds only when URI parsing is active — and rewrite only when it does. - Decide relative-versus-absolute on the decoded path.
- Decline the exact
:memory:and decoded-colon-led forms. - Match the scheme case-sensitively.
- Percent-encode the base directory before joining.
- SQLite only. DuckDB reads
file:as an extension scheme and errors withExtension "file.duckdb_extension" not found, so a rewrite there dresses up a path that never worked. - Cover every branch with a compiled-binary test on each shipped platform, with a decoy database planted so a wrong resolution reads plausible wrong data rather than nothing.
Severity
Low in practice. No evidence any user writes file: URIs into connections.json; the ordinary relative path form, which is what #1203 reported, is fixed on every platform by #1204. Filing so the hole is recorded with its evidence rather than forgotten.
- Lenguaje dominante
- TypeScript
- Estrellas
- 813
- Forks
- 134
- Merge medio
- 2 d 3 h
- PR fusionados (30 d)
- 65
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 AltimateAI/altimate-code
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
AltimateAI/altimate-code#1359 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
AltimateAI/altimate-code#1323 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
AltimateAI/altimate-code#1288 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
AltimateAI/altimate-code#1285 ·
-
privacy: Altimate Base consent dialog no longer discloses persistent per-installation identifier Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
AltimateAI/altimate-code#1284 ·
Todos los issues de AltimateAI/altimate-code
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
mksglu/context-mode#1200 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
jaegertracing/jaeger-ui#4506 ·
-
area:desktop area:ui bug platform:macos
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
anthropics/claude-code#96687 ·
-
good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
AOSSIE-Org/DebateAI#582 · 2 comentarios ·