diff --git a/apps/amethyst/package.json b/apps/amethyst/package.json index b3d940b..67965f0 100644 --- a/apps/amethyst/package.json +++ b/apps/amethyst/package.json @@ -13,7 +13,8 @@ "build:ios": "expo export --output-dir ./build --platform ios --clear", "test": "CI=1 jest --config jest.lib.config.ts --runInBand --watchAll=false", "lexgen": "lex gen-server ./lexicons/generated/server/ ./lexicons/src/", - "install": "CI=1 EXPO_NO_TELEMETRY=1 expo prebuild --no-install" + "prebuild:native": "CI=1 EXPO_NO_TELEMETRY=1 expo prebuild --no-install", + "install": ":" }, "jest": { "preset": "jest-expo", diff --git a/todo.md b/todo.md index ccf2a1f..bc6d866 100644 --- a/todo.md +++ b/todo.md @@ -61,10 +61,12 @@ This file is the working handoff for the Teal-native Teal clone. Keep it updated - [x] Recover cadet jetstream cursor after Garnet restarts: initialise `Some(now_us)` on a fresh start so `rocketman::handler` can advance it, mirror to a persistent file in `/var/lib/cadet`, and clamp stale stored cursors so we don't try to replay history jetstream no longer retains. - [x] Record the manually applied `20241220000014_deduplicate_plays` migration in `_sqlx_migrations` so future `pnpm db:migrate` runs do not re-create the existing `uq_plays_did_cid` constraint. - [x] Deduplicate logical play duplicates created by users running multiple scrobblers (same did + played_time + track_name, different CIDs): removed 5,709 duplicate `plays` rows and 5,989 extended artist joins from the preview Postgres on 2026-06-11. -- [x] Repair the Leroy artist over-attribution on the preview database: moved 2,192 name-only `leroy` joins for `did:plc:tas6hj2xjrqben5653v5kohk` from MusicBrainz MBID `4c3cebc5-ee75-4934-92f2-66bd5e05d392` to a synthetic artist row, leaving the exact-MBID page at 24 total plays and 1 play for `matt.evil.gay`. +- [x] Re-ran duplicate cleanup on preview Postgres on 2026-06-13: removed 24,237 logical duplicate `plays` rows and 25,262 `play_to_artists_extended` joins, then refreshed play-count materialized views and verified zero remaining duplicate groups. - [x] Fixed slow stable-preview appview latest feed on 2026-06-13: added feed pagination indexes, changed Aqua `getLatest` to page plays before artist/profile joins, rebuilt Aqua, and verified `https://sigilyph.teal.fm/xrpc/fm.teal.alpha.stats.getLatest?limit=5` at ~206ms through the public tunnel. +- [x] Repair the Leroy artist over-attribution on the preview database: moved 2,192 name-only `leroy` joins for `did:plc:tas6hj2xjrqben5653v5kohk` from MusicBrainz MBID `4c3cebc5-ee75-4934-92f2-66bd5e05d392` to a synthetic artist row, leaving the exact-MBID page at 24 total plays and 1 play for `matt.evil.gay`. - [x] Prevent future name-only artist records from being auto-matched onto MusicBrainz artists by name alone in Cadet ingestion. - [x] Fix PR CI setup by moving the shared GitHub Actions Node runtime to 22 for pnpm 11 compatibility, skipping duplicate postinstall lexicon generation in CI, approving required pnpm dependency build scripts, and committing regenerated Rust lexicon bindings. Added a lexicon CLI post-process step that canonicalizes jacquard-generated Rust builder state ordering so `pnpm lex:gen && git diff --exit-code` is stable across repeated CI/Linux runs. Updated Amethyst tests to invoke the package-local Jest binary instead of a pnpm-layout-sensitive root `node_modules` path. +- [x] Fix `pnpm backfill:lightrail:retry` setup by moving Amethyst's Expo native prebuild out of the package `install` lifecycle and into an explicit `prebuild:native` script, so pnpm install/build-script checks no longer fail Rust-only backfill commands. - [ ] Drain the in-flight CAR import backfill queue for users with stale ingestion (93 jobs enqueued after the 6/7\u20136/10 cadet outage). Track via Redis `LLEN car_import_jobs` and cadet logs. - [ ] Backfill the 381 current `fm.teal.alpha.feed.play` records present in `did:plc:tas6hj2xjrqben5653v5kohk`'s PDS repo but missing from the preview Postgres index; URI-set comparison on 2026-06-11 showed 10,193 repo records, 9,812 indexed DB rows, and no stale extra DB URIs.