yonlu
44f41785bb
docs(10): capture phase context
2026-03-09 09:05:01 -04:00
yonlu
8ecb1de306
docs: create multi-library roadmap (4 phases, 23 requirements)
...
Phases 10-13 for v1.1 Multi-Library Support:
- Phase 10: Schema & Migration (libraries table, library_id FK, phantom columns)
- Phase 11: Per-Library Scan Pipeline (sequential coordination, per-library progress)
- Phase 12: Library CRUD & Data Integrity (add/rename/remove, orphan cleanup, FTS5)
- Phase 13: Library Views & Phantom Tracks (unified views, filtering, phantom display)
2026-03-08 12:12:50 -04:00
yonlu
cdf8bff01a
docs: restructure v1.1 milestone for multi-library support
...
- Rename milestone from 'Features & Extensibility' to 'Multi-Library Support'
- Replace old phases 10-14 (TAG/SMRT/GAP/MB/LAYOUT/PLUG) with 20 multi-library requirements (LIB/LSCAN/VIEW/PLAY/DATA)
- Move deferred features to Future Requirements
- Update research files with multi-library research (Stack, Features, Architecture, Pitfalls)
- Architecture: hybrid model (library_id on audio_files only), libraries in DB, sequential scanning, phantom tracks
2026-03-08 11:54:37 -04:00
yonlu
595b5e1529
docs(quick-18): add multi-column metadata display to playlist-details track list
2026-03-08 09:37:11 -04:00
yonlu
cab0f082cf
docs(quick-18): complete multi-column metadata display plan
...
- Add 18-SUMMARY.md with execution results
- Update STATE.md quick tasks table
2026-03-08 09:36:50 -04:00
yonlu
ce23177228
feat(quick-18): replace track-info with multi-column grid layout in playlist-details
...
- Remove track-info component, add formatMilliseconds import
- Add 5-column grid (#, Title, Artist, Album, Duration) with header row
- Display 1-indexed playlist order numbers in # column
- Phantom tracks span full grid width with grid-column: 1 / -1
- Add column-specific CSS: tabular-nums, text truncation, alignment
2026-03-08 09:35:59 -04:00
yonlu
8570f76400
docs(quick-17): complete playlist subpage refactoring
...
- Summary documenting playlist-details creation and playlist-view simplification
- Updated STATE.md with quick task 17 completion
2026-03-07 22:11:28 -05:00
yonlu
955cd68be2
refactor(quick-17): simplify playlist-view to navigate instead of expand
...
- Plain click now navigates to playlist-details subpage instead of toggling expand/collapse
- Removed all inline track expansion: renderPlaylistBody, track-item rendering, chevron icons
- Removed SelectionController, ContextMenuController, PlayerController (track-level interactions moved to playlist-details)
- Removed track-info, track-details, phantom-resolver imports (all live in playlist-details now)
- Simplified search to filter by playlist name only (no inline track search)
- Kept: playlist list, context menu (rename/delete/set-default), Ctrl/Shift multi-select, drag-drop target, create/import, sort toolbar
2026-03-07 22:10:24 -05:00
yonlu
dc5c7d6ca6
feat(quick-17): create playlist-details subpage component
...
- New playlist-details component with header (back button, playlist icon, title, track count)
- Full track list with all interactions: select, play, context menu, drag, phantom handling
- Drop target support for adding tracks from other views
- Search filtering for tracks within the detail view
- Navigation routing in index.ts for playlist-details view
- Added playlist-details to SEARCHABLE_VIEWS in search-store
2026-03-07 22:06:53 -05:00
yonlu
2bdabf0940
docs(quick-17): plan playlist view subpage refactor
2026-03-07 22:03:11 -05:00
yonlu
0bd8cefa00
fix(queue-panel): suppress virtualizer scroll corrections during scrollbar drag
...
lit-virtualizer's flow layout has a scroll error correction mechanism that
calls scrollTo() to fix sub-pixel estimation errors. On large lists (20k+),
even with fixed-height items, floating-point differences from
getBoundingClientRect() (e.g. 49.000003px vs 49px) accumulate across items
and trigger corrections that fight the native scrollbar drag gesture,
causing the thumb to desync from the mouse.
Detect scrollbar drag by checking if mousedown occurs in the scrollbar
gutter (clientX > element clientWidth), then monkey-patch the virtualizer's
_correctScrollError method to discard accumulated errors during drag
instead of calling scrollTo(). Items continue to render/recycle normally
since layout updates are not suppressed -- only the scroll position
corrections are skipped.
2026-03-07 11:14:54 -05:00
yonlu
288d9deae2
fix(queue-panel): set flow layout _itemSize to match actual track item height
...
The previous fix (fixed CSS height on .track-item) was insufficient because
lit-virtualizer's flow layout defaults to estimating items at 100px tall.
With 20k items, the difference between 100px estimate and 49px actual creates
a ~1M px scroll height that collapses as items get measured, triggering
scroll error corrections (programmatic scrollTo calls) that fight the native
scrollbar during drag.
Setting _itemSize to { height: 49 } via the flow() config ensures the initial
scroll size estimate matches reality, eliminating the scroll error corrections
that caused the scrollbar thumb to desync from the mouse when dragging down.
2026-03-07 10:49:06 -05:00
yonlu
01fe39cc04
docs(quick-16): add ctrl+a hotkey to multi-select views to select all items
2026-03-07 10:20:57 -05:00
yonlu
8576999ae3
now-playing component scrolls text when hovering
2026-03-07 10:20:51 -05:00
yonlu
043c74c8b3
docs(quick-16): complete Ctrl+A select-all hotkey implementation
2026-03-07 10:20:16 -05:00
yonlu
906ea28751
feat(16-01): wire shortcut:select-all listener in track-list, queue-panel, and playlist-view
...
- Add handleSelectAll bound handler calling selection.selectAll() in all three components
- Register/unregister event listeners in connectedCallback/disconnectedCallback
2026-03-07 10:19:07 -05:00
yonlu
f5677628ef
feat(16-01): add selectAll() to SelectionController and dispatch shortcut:select-all event
...
- Add selectAll() method to SelectionController that selects all items via host interface
- Change app.selectAll dispatch from document.execCommand('selectAll') to CustomEvent('shortcut:select-all')
2026-03-07 10:18:08 -05:00
yonlu
13321b531d
docs(quick-16): plan Ctrl+A select-all for multi-select views
2026-03-07 10:16:58 -05:00
yonlu
e503fb3b67
docs(phase-09): complete phase execution
2026-03-07 10:13:03 -05:00
yonlu
8c8dca31e5
docs(09-05): complete integration testing & verification plan
...
- Created 09-05-SUMMARY.md documenting build verification and human approval
- Updated STATE.md: Phase 9 complete (5/5 plans, 1 phase done)
- Updated ROADMAP.md: Phase 9 and all plans marked complete
- Documented volume data flow bug fix (bb3fd20 ) as deviation
2026-03-07 10:08:35 -05:00
yonlu
bb3fd204f0
fix(09-05): emit VolumeChanged event and persist state in ChangeVolume and MuteToggle
2026-03-07 02:06:08 -05:00
yonlu
77328e95dc
docs(09-04): complete keyboard shortcuts settings UI plan
...
- SUMMARY.md with task commits and deviation documentation
- STATE.md advanced to Plan 5 of 5 (80% complete)
- ROADMAP.md updated with 4/5 plans progress
- Requirements KEY-02 and KEY-03 marked complete
2026-03-06 22:00:38 -05:00
yonlu
0451fb3880
feat(09-04): add keyboard shortcuts section to config page with conflict detection
...
- Keyboard Shortcuts section with shortcuts grouped by Player, Navigation, App categories
- All 16 default shortcuts listed with human-readable labels
- shortcut-capture widget for each action enables record-style rebinding
- Conflict detection warns before overwriting existing bindings with Overwrite/Cancel
- Reset All to Defaults button calls store.resetAll()
- Panel-specific shortcuts display scope label (e.g. track-list)
- ShortcutsController provides reactive state updates
2026-03-06 21:58:13 -05:00
yonlu
0706f804a4
docs(09-03): complete scan control UI plan
...
- SUMMARY.md with scan control UI outcomes and deviations
- STATE.md updated to plan 4 of 5 (60% progress)
- ROADMAP.md updated with 3/5 plan progress
2026-03-06 21:57:47 -05:00
yonlu
391436927c
feat(09-03): add scan control UI with pause/resume/cancel and confirmation dialog
...
- Pause/Resume buttons replace Soft Scan/Full Rescan during active scan
- Cancel button shows confirmation dialog with Keep/Discard/Continue options
- Register LibraryScanPaused/Resumed/Cancelled event handlers
- Status bar shows 'Scan paused.' with accent color when paused
- Add CancelScan/PauseScan/ResumeScan Wails binding stubs
- Cancel dialog overlay dismissible by clicking outside or Continue Scanning
- Add cancelled field to ScanMetrics TypeScript interface
2026-03-06 21:54:50 -05:00
yonlu
6bb266e234
docs(09-02): complete keyboard shortcuts config & service plan
...
- Create 09-02-SUMMARY.md with execution metrics and decisions
- Update STATE.md: advance to plan 3, record metrics
- Mark KEY-01, KEY-04, KEY-05 requirements complete
2026-03-06 21:51:21 -05:00
yonlu
40d48151dd
feat(09-02): add frontend keyboard shortcut service, store, and controller
...
- Create keyboard-shortcut-service.ts singleton with keydown listener
- Shadow DOM active element resolution for scope detection
- Text input suppression (only Escape passes through)
- Scope resolution: text-input > panel-specific > global
- Action dispatch to player/queue stores and Wails bindings
- Create shortcuts-store.ts with Wails persistence and event sync
- Create shortcuts-controller.ts for Lit component integration
- Export store and controller from store/index.ts
- Replace hardcoded Ctrl+F handler in index.ts with service
- Initialize service via import in frontend/index.ts
2026-03-06 21:48:52 -05:00
yonlu
6285ca9dc4
feat(09-02): add shortcuts config package with default bindings and Wails persistence
...
- Create backend/shortcuts/config.go with DefaultBindings(), ApplyDefaults(), Validate()
- Wire Shortcuts field into main Config struct with TOML persistence
- Add GetShortcuts, SetShortcuts, SetShortcut, ResetShortcuts Wails binding methods
- Regenerate Wails TypeScript bindings for new config methods
- Fix wsl lint in library.go (blank line before logger call)
2026-03-06 21:46:09 -05:00
yonlu
42add7fec4
docs(09-01): complete scan control backend plan
...
- Create 09-01-SUMMARY.md with execution metrics and decisions
- Update STATE.md with plan progress and session continuity
- Update ROADMAP.md: mark 09-01 plan complete
- Mark SCAN-01, SCAN-02, SCAN-03 requirements complete
2026-03-06 21:35:39 -05:00
yonlu
cf22e52a64
feat(09-01): add scan control fields and per-scan cancellable context
...
- Add scanActive, scanCancel, scanPaused, scanPauseCh fields to Library struct
- Create scan_control.go with CancelScan, PauseScan, ResumeScan, IsScanActive, IsScanPaused
- Thread per-scan scanCtx through walk and worker pipeline
- Add waitIfPaused checkpoint before each worker extraction
- Skip orphan cleanup and variant generation on cancelled scan
- Emit LibraryScanCancelled instead of LibraryScanComplete when cancelled
2026-03-06 21:30:49 -05:00
yonlu
c695024241
feat(09-01): add scan control events and cancelled metrics field
...
- Add LibraryScanCancelled, LibraryScanPaused, LibraryScanResumed events
- Regenerate frontend/src/events.ts via go generate
- Add Cancelled bool field to ScanMetrics struct
2026-03-06 21:28:37 -05:00
yonlu
08ff00f029
docs(09): create phase plan — 5 plans in 3 waves for scan cancellation & keyboard shortcuts
2026-03-06 13:20:35 -05:00
yonlu
71c200bc5b
docs(09): research phase domain
2026-03-06 11:39:48 -05:00
yonlu
170f6b1b84
docs(state): record phase 9 context session
2026-03-06 11:32:40 -05:00
yonlu
7c30e87895
docs(09): capture phase context
2026-03-06 11:32:22 -05:00
yonlu
e0b88f1a72
docs: create milestone v1.1 roadmap (6 phases)
2026-03-06 11:08:30 -05:00
yonlu
fc7ef4213f
docs: define milestone v1.1 requirements
2026-03-06 11:04:49 -05:00
yonlu
224411bbed
docs: complete v1.1 project research
2026-03-06 10:49:03 -05:00
yonlu
ac3bd4beb4
docs: start milestone v1.1 Features & Extensibility
2026-03-06 10:31:05 -05:00
yonlu
32a8d07644
fixed makefile to workaround obfuscation bug, changed gpu policy to fix wayland issue
2026-03-06 09:53:46 -05:00
github-actions[bot]
c6c5ece956
chore(release): 1.2.2 [skip ci]
...
## [1.2.2](https://github.com/onion-4-dinner/yellowjacket/compare/v1.2.1...v1.2.2 ) (2026-03-06)
### Bug Fixes
* recover from go-mp3 seek panic on startup ([#86 ](https://github.com/onion-4-dinner/yellowjacket/issues/86 )) ([2f9d9f8 ](https://github.com/onion-4-dinner/yellowjacket/commit/2f9d9f8508b90b6188fe894c282c5b8e330e8046 ))
2026-03-06 06:08:50 +00:00
logan
2f9d9f8508
fix: recover from go-mp3 seek panic on startup ( #86 )
...
The go-mp3 library (v0.3.4) has a bug where Seek panics with a slice
bounds error for certain byte positions. This crashes the app when
restoring a saved playback position on startup.
Add bounds clamping and a recover wrapper around the seek call in
seekLocked to convert the panic into a graceful error. When the seek
fails, playback starts from the beginning instead of crashing.
2026-03-06 00:08:11 -06:00
github-actions[bot]
82aef0825b
chore(release): 1.2.1 [skip ci]
...
## [1.2.1](https://github.com/onion-4-dinner/yellowjacket/compare/v1.2.0...v1.2.1 ) (2026-03-06)
### Bug Fixes
* **deps:** pin go-webview2 to v1.0.21 for Wails v2 compat ([25f0fe8 ](https://github.com/onion-4-dinner/yellowjacket/commit/25f0fe81560eeff36a0b2beb52ce1bdf13d5e122 ))
2026-03-06 01:35:02 +00:00
yonlu
4e4d1e078e
Merge pull request #85 from onion-4-dinner/fix/pin-go-webview2
...
fix(deps): pin go-webview2 to v1.0.21 for Wails v2 compat
2026-03-05 20:34:30 -05:00
yonlu
25f0fe8156
fix(deps): pin go-webview2 to v1.0.21 for Wails v2 compat
2026-03-05 20:25:20 -05:00
github-actions[bot]
f01d9c2090
chore(release): 1.2.0 [skip ci]
...
## [1.2.0](https://github.com/onion-4-dinner/yellowjacket/compare/v1.1.3...v1.2.0 ) (2026-03-06)
### Features
* **02-02:** add ScanWarning type and reclassify scan errors as warnings ([e6866de ](https://github.com/onion-4-dinner/yellowjacket/commit/e6866ded9dc0ea30ff942cd31b6c5ea3269e9584 ))
* **03-01:** create NewTestDB helper for in-memory SQLite test databases ([bae9d70 ](https://github.com/onion-4-dinner/yellowjacket/commit/bae9d70d23157ef4e79e60dd713d9a02ab63790b ))
* **03-01:** extract shared applyPRAGMAs and add production PRAGMAs to NewDB ([d348815 ](https://github.com/onion-4-dinner/yellowjacket/commit/d34881530adda7fb75be84737798da46d17bfa8c ))
* **06-01:** create track_metadata VIEW schema and migration 4 ([9c7e5a9 ](https://github.com/onion-4-dinner/yellowjacket/commit/9c7e5a96344a81bf132de487b4763f1dc3ff6df9 ))
* **06-02:** create Go→TypeScript event constant codegen tool ([3e9edd0 ](https://github.com/onion-4-dinner/yellowjacket/commit/3e9edd05e87395499ac24e456640d1f6d9b97f04 ))
* **06-03:** migrate lookupChunk to sqlc-generated LookupTrackMetaByPaths query ([2221a68 ](https://github.com/onion-4-dinner/yellowjacket/commit/2221a68459850a837c996c6e6d2bc95d41b20fb3 ))
* **08-01:** define design token CSS custom properties for icon sizes and type scale ([1444a66 ](https://github.com/onion-4-dinner/yellowjacket/commit/1444a66bb201ce5fdf16552a32bcd281089c64ed ))
* **08-04:** apply design tokens to cover-grid, track-list, queue-panel, and detail components ([1303422 ](https://github.com/onion-4-dinner/yellowjacket/commit/1303422e69c27d528363900b3ca5287a48cc9f8e ))
* **08-04:** convert sidebar em-based spacing to px and apply icon/type tokens ([aed90d7 ](https://github.com/onion-4-dinner/yellowjacket/commit/aed90d7b1710d0c5cece2e4956c0a6ce77b9a999 ))
* add scan progress bar with phase indicator ([a28b4d1 ](https://github.com/onion-4-dinner/yellowjacket/commit/a28b4d1e0673658824750d4c702359321dc9a78e ))
* **quick-001:** add multi-file picker and batch import support ([c34e4ad ](https://github.com/onion-4-dinner/yellowjacket/commit/c34e4ad029c119bff8f70a07ccc6bca58b11ea3c ))
* **quick-001:** regenerate bindings and update frontend for multi-import ([2a542bf ](https://github.com/onion-4-dinner/yellowjacket/commit/2a542bf3bcdc7772edb1aceb41f488774494f656 ))
* **quick-002:** add CountPlaylistsByName SQL query and regenerate sqlc ([04b2088 ](https://github.com/onion-4-dinner/yellowjacket/commit/04b2088b28b84a4d4df25b23d97112c5a955dff1 ))
* **quick-002:** add uniquePlaylistName helper and wire into ImportPlaylist ([8ba8bbe ](https://github.com/onion-4-dinner/yellowjacket/commit/8ba8bbe7bed2ecff97613ebaa42a49a662050353 ))
* **quick-006:** remove list icon from playlists, add favorites icon to default ([3c19766 ](https://github.com/onion-4-dinner/yellowjacket/commit/3c19766fd0885d4171cf9929db6d69a3d5c1a3ff ))
* **quick-11:** add configurable log level via YJ_LOG_LEVEL env var ([55b4902 ](https://github.com/onion-4-dinner/yellowjacket/commit/55b4902fac7b7f2c04ad5efac398ecedc5fedc2f ))
* **quick-11:** add make dev-debug target for verbose logging ([c45bca4 ](https://github.com/onion-4-dinner/yellowjacket/commit/c45bca411ba1d4f32deea6027acf91237173dd15 ))
* **quick-12:** add favorite icon to album dropdown track rows ([12a0bbc ](https://github.com/onion-4-dinner/yellowjacket/commit/12a0bbc89c19128485d597a61bd16bd0786450ad ))
* **quick-15:** add BufferedStreamer with goroutine read-ahead ([85b23ac ](https://github.com/onion-4-dinner/yellowjacket/commit/85b23acb24a048d2f7b85808e477bb991ae124e6 ))
* **quick-15:** insert BufferedStreamer into player pipeline and increase speaker buffer ([8a0b16a ](https://github.com/onion-4-dinner/yellowjacket/commit/8a0b16a4ec08a95bfd3834c8216e21dce854432d ))
* **quick-3:** add playlist-level multi-select state and selection handling ([e13151f ](https://github.com/onion-4-dinner/yellowjacket/commit/e13151ffa5dc86e41ce242421679d65a740c3af0 ))
* **quick-3:** wire playlist context menu for batch delete of selected playlists ([c92ced2 ](https://github.com/onion-4-dinner/yellowjacket/commit/c92ced2c74e72bfc123c880c047462dc969cde34 ))
* **quick-4:** add 'Set as Default Playlist' context menu option ([9971b63 ](https://github.com/onion-4-dinner/yellowjacket/commit/9971b635b81fe3f8621c80a6664eccb3e1fc4bb8 ))
* **quick-5:** add CreatedAt/UpdatedAt to playlist Summary struct ([bdaff47 ](https://github.com/onion-4-dinner/yellowjacket/commit/bdaff478e802ee5c0745327c52dd9b190fcfef7d ))
* **quick-5:** add sort dropdown UI and client-side sorting to playlist view ([5c07485 ](https://github.com/onion-4-dinner/yellowjacket/commit/5c074855351f1363cc7918837a78bbd3c0b7ebf5 ))
* **quick-7:** add PinDefault config field with backend getter/setter ([6e123bd ](https://github.com/onion-4-dinner/yellowjacket/commit/6e123bd47f55e6d565f20bf7f19950e65f80787f ))
* **quick-7:** wire frontend pin-default-playlist feature end-to-end ([e6378e1 ](https://github.com/onion-4-dinner/yellowjacket/commit/e6378e1f0d3b0f2a7604b8ef6097dba9050cdd16 ))
* **quick-8:** add FindDuplicateTracksInPlaylist backend method ([83de934 ](https://github.com/onion-4-dinner/yellowjacket/commit/83de934c39ca7d850a8b5925c90e6d0b3fe0a487 ))
* **quick-8:** create duplicate-tracks-dialog component ([9f3ba2b ](https://github.com/onion-4-dinner/yellowjacket/commit/9f3ba2b9d474fa30dcb4934b01d4650e0d0d3cba ))
* **quick-8:** wire duplicate detection into playlist-picker and playlist-view ([917a79a ](https://github.com/onion-4-dinner/yellowjacket/commit/917a79a8d6e30dddd2170323bb26692386794872 ))
### Bug Fixes
* **01-01:** add mutex protection to Queue, Library, and Playlist SetContext methods ([daaa6b7 ](https://github.com/onion-4-dinner/yellowjacket/commit/daaa6b7f9779385979fe9dddae4e7bb388b3e5fb ))
* **01-01:** collapse Player.SetContext double-lock into single acquisition ([3abaeba ](https://github.com/onion-4-dinner/yellowjacket/commit/3abaeba3afb0f4d0edb81e26ca55b31bf59990ac ))
* **02-01:** eliminate package-level startupErr and fix config file permissions ([2a86408 ](https://github.com/onion-4-dinner/yellowjacket/commit/2a864082017e489ffa086c136f1002277a77a7c4 ))
* **02-01:** log MPRIS callback errors instead of discarding them ([0860b2f ](https://github.com/onion-4-dinner/yellowjacket/commit/0860b2fd4b2250da1eeb80c21f14fdf341697501 ))
* **08-02:** revert repeat() inside lit-virtualizer, restore .renderItem + .keyFunction ([72ef719 ](https://github.com/onion-4-dinner/yellowjacket/commit/72ef719ba70eeca0fa4bae47df092706f6fbaeed ))
* drop+recreate contentless FTS5 index instead of DELETE ([8e9a616 ](https://github.com/onion-4-dinner/yellowjacket/commit/8e9a61603779eacbee7013b9bc760b315baf782a ))
* **frontend:** reposition search indicator into toolbar and fix album cover art lookup ([a29137b ](https://github.com/onion-4-dinner/yellowjacket/commit/a29137b2ba4c6b33ce9a5f868cbd6013e0e3b116 ))
* include full track metadata in GetAudioFilesByReleaseGroup query ([97f256d ](https://github.com/onion-4-dinner/yellowjacket/commit/97f256d67f463d752f7adc5b400c4bf34eae1df1 ))
* **quick-10:** add migration 5 and fix entity cache for composite album key ([d43ba7b ](https://github.com/onion-4-dinner/yellowjacket/commit/d43ba7bd0c7ace2a9ed71990a19498f8e9f90751 ))
* **quick-10:** update release_groups schema and queries for composite uniqueness ([999ab96 ](https://github.com/onion-4-dinner/yellowjacket/commit/999ab967beb9107a3f30ba287acbffad22f0b0de ))
* **quick-13:** resolve lint issues in main source files ([e1a95e6 ](https://github.com/onion-4-dinner/yellowjacket/commit/e1a95e65a9f0f436b2e2d92befa9c881b6e8e430 ))
* **quick-14:** add roll-back-on-failure to queue index advancement ([2820de2 ](https://github.com/onion-4-dinner/yellowjacket/commit/2820de2510560fcd6d1015c18542d5ac30468247 ))
* **quick-9:** set fixed height on queue track items for stable virtualizer scroll ([ebde5e5 ](https://github.com/onion-4-dinner/yellowjacket/commit/ebde5e5a8bc4da8f40bef8f171c7ed86c213a336 ))
### Performance
* **07-01:** add incremental persistence helpers for queue mutations ([cdd17db ](https://github.com/onion-4-dinner/yellowjacket/commit/cdd17db27509908514c21517631306655a2b3bd7 ))
* **07-01:** eliminate redundant lookups in SetQueue Phase 2 ([ced58fe ](https://github.com/onion-4-dinner/yellowjacket/commit/ced58fe6a93d6f220137562b8ff09ffc33c69266 ))
* **07-02:** defer eagerFetch to after DOM ready for instant app shell ([cd98ad6 ](https://github.com/onion-4-dinner/yellowjacket/commit/cd98ad6dc8c2e4e6e0f01a48099b0c0511bf5a98 ))
* **08-01:** add queueMicrotask coalescing to library store and debounce search input ([3bf66ed ](https://github.com/onion-4-dinner/yellowjacket/commit/3bf66ed125ed55bfbde95b0bc973710c2f2243b8 ))
* **08-02:** migrate cover-grid, artists-view, and genres-view virtualizers to repeat() directive ([1c3514d ](https://github.com/onion-4-dinner/yellowjacket/commit/1c3514da1d0491b9758d7a6f9f72d59ef78fc8ed ))
* **08-02:** migrate track-list and queue-panel virtualizers to repeat() directive ([d2d7d8c ](https://github.com/onion-4-dinner/yellowjacket/commit/d2d7d8c6ce22923772cae4858b02804d15f74bb7 ))
* **08-03:** optimize column rendering and apply classMap to queue-panel renderTrackItem ([62f41c2 ](https://github.com/onion-4-dinner/yellowjacket/commit/62f41c24910632b270f9f5765e20e48db4b95ec9 ))
* **08-03:** replace class string construction with classMap directive in renderTrackRow ([ad21027 ](https://github.com/onion-4-dinner/yellowjacket/commit/ad210278fc20729dc76390e6bba9bff050549046 ))
### Refactoring
* **06-01:** consolidate search queries to use track_metadata VIEW ([9159b40 ](https://github.com/onion-4-dinner/yellowjacket/commit/9159b409dcd2afaa7dcc97bf5b0694edf85f06a4 ))
* **quick-14:** make playOrLoadCurrentTrack and playCurrentTrack return bool ([6eeddda ](https://github.com/onion-4-dinner/yellowjacket/commit/6eeddda97669258cc5b7ba175a3c98d598a2871f ))
2026-03-06 00:28:28 +00:00
yonlu
f68c3a3a84
Merge pull request #84 from onion-4-dinner/wip
...
feat: lots of stuff
2026-03-05 19:27:57 -05:00
yonlu
b725b801c1
fix CI: skip metadata tests when test_data is absent, use fmt.Fprintf in genevents
2026-03-05 19:11:56 -05:00
yonlu
517c1685d8
ran go mod tidy
2026-03-05 18:49:09 -05:00
yonlu
b8277326ee
Merge branch 'main' into wip
2026-03-05 18:19:35 -05:00