Merge origin/main into wails-v3
21 conflicts, all from the same cause: three features were developed on both lines and this branch's copies are the ones adapted to v3's bindings and to the file-shaped schema. Resolutions: - `frontend/wailsjs/` stays deleted — v2's generated bindings, replaced by `frontend/bindings/`. - remove-from-library, `library-status.ts`, the requested-badge spec and its component test: took this branch's copies, which differ from main's only in calling `pruneEmptyEntities`/`CountAudioFiles`, importing `@go/download/models.js`, and staging a real UUID for the catalog's `CHECK(length(mbid) = 16)`. - `GetFilePathsByRecordingMBIDsByLibrary` dropped: it joined `recordings`, which no longer exists, and `library_id = 0` answers both scoped and unscoped now. `GetAudioFilesByPaths` was already here. - The album page, the artist page and the library badge kept this branch's versions, which supersede main's: ownership asked once from the files, the partial-completeness ring, and the request action. - Docs: no migration chain (013) over main's two-file column rule and its pre-1.0 squashing note, both of which 013 retired. Kept main's `CreateSmartPlaylist` read-pool example, which is a real second instance of that bug. Verified on the merge result, not on either parent: lint clean in all three build configurations, `make test` green in all three, 776 Vitest tests, `tsc --noEmit`, bindings-check and skill-check clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfVYUVExXsx1nSWrXN8mAh
This commit is contained in:
@@ -144,7 +144,7 @@ meaningless against the seed's one empty playlist, so it builds ten
|
||||
It wraps every bound Go method, so "did that refetch the library" is a
|
||||
fact rather than an inference. It is not a spec and does not run in CI.
|
||||
|
||||
**The cheapest tier needs none of that.** `make ui-test` runs 757
|
||||
**The cheapest tier needs none of that.** `make ui-test` runs 776
|
||||
Vitest tests in a real Chromium with no Wails, no backend, no seeded
|
||||
library and no virtual display, because **v3 routes every runtime call
|
||||
— bindings, event emits, window, dialogs, clipboard — through one IPC
|
||||
@@ -298,12 +298,15 @@ rather than renaming them.
|
||||
`DB.QueryContext`/`QueryContextWith`/`QueryRow` route to a
|
||||
*query-only* read pool (a second `sql.DB` over the same file), so
|
||||
an `INSERT ... RETURNING` issued through one fails at runtime with
|
||||
"attempt to write a readonly database (8)". Use `ExecContext`, or
|
||||
`QueryRowWriter` when the statement really does return a row.
|
||||
Nothing caught this because `NewTestDB` shares one in-memory
|
||||
connection and leaves `readDB` nil, so `reader()` returns the
|
||||
*writer* under test. `TestNoWritesOnTheReadPool` walks the tree for
|
||||
it, in the same spirit as `TestNoDirectRuntimeEmits`.
|
||||
"attempt to write a readonly database (8)" — which is exactly what
|
||||
`CreateSmartPlaylist` did, meaning no smart playlist could be
|
||||
created at all. Use `ExecContext`, or `QueryRowWriter` when the
|
||||
statement really does return a row. Nothing caught this because
|
||||
`NewTestDB` shares one in-memory connection and leaves `readDB`
|
||||
nil, so `reader()` returns the *writer* under test.
|
||||
`TestNoWritesOnTheReadPool` walks the tree for it, in the same
|
||||
spirit as `TestNoDirectRuntimeEmits` and for the same reason — a
|
||||
lint pass only sees one build configuration.
|
||||
- **A new table has to say what kind of data it holds.**
|
||||
`backend/datamap` is a catalogue of every table's Kind and
|
||||
Lifetime, and `TestCatalogCoversSchema` fails on a table missing
|
||||
|
||||
Reference in New Issue
Block a user