fix(explore): merge the catalog artifact in its own mbid encoding (#258) #259
Open
yonlu
wants to merge 6 commits from
fix/258-artifact-blob-cursor into main
pull from: fix/258-artifact-blob-cursor
merge into: :main
:main
:fix/258-artifact-blob-cursor
:batch/248-249
:fix/248-artist-metadata-sweep
:fix/247-cover-art-orphans
:fix/249-unbounded-growth
:fix/246-incremental-scan-phantoms
:fix/183-phantom-across-retire
:fix/243-model-fallback
:feat/31-play-all-shuffle-all
:fix/240-loop-operational-fixes
:docs/220-skill-check-scope
:fix/231-setter-rollback
:fix/197-duplicate-column-label
:fix/175-wizard-follows-the-library
:fix/146-stub-etxtbsy
:docs/225-fixtures-wav-tags
:feat/238-merge-leg-refresh-watch
:feat/236-autonomous-backlog-loop
:test/217-fixture-names-in-queue-selection
:fix/216-riff-parse-allocation
:fix/170-queue-header-action-names
:fix/210-nav-sheet-scroll-affordance
:docs/50-readme-landing-page
:feat/65-art-prefetch-ahead
:feat/71-more-as-a-bottom-sheet
:feat/54-native-touch-feel
:feat/67-entity-links-into-menus
:test/196-visual-tier-gates
:fix/138-ui-test-storage-leak
:fix/104-wav-tags-read
:fix/207-sheet-scroll-affordance
:fix/204-ui-visual-update-filter
:pi-agent-backlog-automation
:63-touch-model-phase-2
:63-android-touch-model
:186-touch-targets-settings
:186-touch-targets-page-header
:187-seek-bar-hit-area
:189-190-explore-correctness
:135-android-underrun-instrumentation
:51-android-small-screens
:fix/171-phone-queue-scrim
:fix/137-touch-only-affordances
:fix/154-nested-css-check
:feat/58-mini-player-progress-line
:fix/66-album-page-scrolls-as-one
:60-context-menu-action-sheet
:64-android-system-volume
:59-slim-the-mini-player
:55-queue-as-a-screen
:feat/57-drop-the-android-top-bar
:feat/62-jobs-as-a-notification
:fix/53-seek-bar-never-moves
:fix/159-android-task-app-id
:fix/52-android-activity-recreation-restarts-the-process
:fix/150-expand-button-under-the-art
:feat/42-inline-volume-and-centred-transport
:fix/156-queue-selection-fixture-order
:fix/151-fuse-the-scroll-guard-and-the-write
:fix/43-queue-panel-selection
:fix/143-top-bar-fits-its-window
:feat/27-jobs-into-settings
:feat/25-configurable-sidebar-tabs
:feat/6-global-back-forward
:fix/72-active-view-broadcast
:fix/69-page-header-action-overflow
:fix/quick-wins-batch
:fix/118-in-library-clear
:fix/61-mini-player-plain-text
:fix/68-hover-affordances-pointer
:fix/119-dev-headless-port
:fix/130-issue-claim-user
:fix/131-codegen-check-scope
:feat/28-autotag-match-on-album
:feat/17-demote-version-selector
:feat/38-ownership-visibility
:ci/115-manual-release
:feat/34-icon-language
:feat/7-full-tracklist-toggle
:fix/16-tagwriter-totals
:fix/unclaim-ca-certs
:fix/unclaim-shell
:ci/unclaim-on-close
:docs/closing-keyword
:docs/retire-stale-planning-docs
:docs/issue-driven-workflow
:integration/small-fixes
:fix/small-issue-batch
:fix/queue-toggle-state
:fix/drag-count-badge
:fix/album-card-year
:fix/album-tracklist-heading
:fix/seek-bar-clock-width
:fix/explore-art-scanner-requests
:chore/workflow-guardrails
No Reviewers
Labels
Clear labels
Area/Design
Area/Downloads
Area/Explore
Area/Library-UI
Area/Metadata
Area/Packaging
Area/Player
Area/Queue
Area/Settings
Area/Shell-Nav
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Platform/Android
Platform/Desktop
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Medium
3
The priority is medium
Priority
Low
4
The priority is low
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
In Progress
Somebody is actively working on this right now
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yonlu/yellowjacket#259
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The prebuilt catalog never merged on a fresh install:
mergeArtifactRowspositioned its batch walk with a Go
stringcursor against the artifact'sBLOBmbidcolumn, so every batch merged nothing and the walk neveradvanced — an unbounded loop at 100% CPU behind a progress bar reading
0 of 1,077,893 rows. Closes #258.d4ea14ca1e3a490c5d9c677cVerification
The bug, reproduced.
TestImportCoreArtifactBatchWalkCoversAllRowsCompactcrosses several batch boundaries over a compact artifact. Against the pre-fix
comparison behaviour it goes red in ~3 seconds, at
artifact walk did not advance past 0bea635cc6ec422182fb8eaaa46fbf9f— the newguard turning the day-long spin into a named failure. Covered on both
encodings, because the walk was only ever tested against the text one.
TestImportCoreArtifactRefusesAMergeThatLosesRowsreaches the row-countassertion honestly: a row with an empty mbid is excluded by
mbid > ?in bothencodings, so an artifact carrying one used to import as a success with a row
missing.
The real artifact, end to end.
TestImportPublishedArtifacttakes thepublished file and runs the client's own path over it — checksum, decompress,
merge — asserting the row count, the rows carrying a listen count, an FTS index
in step with the table, and one row read back through the app's MBID
conversions. Measured against the current artifact (64.8 MB compressed →
135 MB, 1,077,893 rows): 39 seconds, and it fails in ~3 seconds on the
pre-fix behaviour. The workflow step that runs it was extracted from the YAML
and run for real, both on the success and the missing-file paths.
In the app.
make sandbox calebre-fetched, merged 1,077,893 rows in ~50 s,removed the staging file, and the index now reports 50,115 artists / 330,839
release groups / 787,346 recordings with popularity on 50,000 / 274,293 /
777,087,
explore_index_ftsin sync at 1,168,350, andcore_artifact_version+dump_import_done+champion_builtstamped. The run before it sat at 111,482rows for a day.
Gates.
make lint— 0 issues, all three build configurations;go teston the explore package in the default and
indexbuildtag sets;go vet,gofmt,codegen-check,bindings-check; pre-push ran the fullgo test ./....Two environment notes.
make lintneedsGOTOOLCHAIN=go1.26.0locally: thelocal toolchain is 1.27.0 and
honnef.co/go/tools@v0.7.0panics inbuildironit, which reproduces on pristine
main— CI pinsGO_VERSION: 1.26.0, where itwas checked. And the local pre-commit hook inherits that, so the commits here
were made with the pinned toolchain rather than by skipping the hook.
Closes #258
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.