gitoriaLog in with ident

tracker

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit4ecc67b24ecc67b2tracker: STATUS/LOG for the t38 + t40 merge (gates 374/0, 32/0, 53/0, 229/0, 26/0, check-theme 0; live copy checks)mre4ecc67b2/reports/015-tracker-filmography-complete.md

5.1 KB

  1. # w059 — tracker#26: filmography titles complete
  2. **Commit**: `25a50bc` on branch `t26` (worktree loreana:/media/STORAGE/projects/tracker-wt26, based on main 1704ec4). Not pushed, not merged, not deployed. main untouched.
  3. ## What the filmography stored (vs a full import)
  4. - `people.hl addMinimalTitle` (#16) stores title, year/release, overview, type, tmdbId, adult, genres, language, and only that one person as cast.
  5. - It stores no poster, no seasons/episodes, no imdb/tvdb/tvmaze ids, no homepage/tagline/status and no `tmdbSync`. Nothing ever completed these records, so the page stayed that way.
  6. - A search import (`importTitle` + `syncShow`) has all of that, but no cast either.
  7. - The live copy has 321 such titles.
  8. ## Built
  9. - **`details.hl` `completeStep`**:
  10. - Step 1 is one TMDB request: `/movie|tv/<id>?append_to_response=external_ids,credits|aggregate_credits`. It stores the fields and the cast (TMDB's first 20, adult people left out). People we don't have yet get a new person record (slug, search entry); their page fills on the first visit.
  11. - A movie is complete after step 1 (ids + poster).
  12. - A series then continues in steps through `tmdbsync.hl syncShowPart`: one step per ≤ 300 episodes of seasons, then a last step for ids, the TVmaze lookup + merge and the poster.
  13. - `detailsAt` marks a title complete. `detailsCheck` marks TMDB 404 and adult titles, which are never asked again.
  14. - **Show page** (`components/show.hl`): an incomplete title shows what it has plus shimmer skeletons (poster, cast line, 3 season rows for a series). An invisible probe calls the sessionless face `showComplete` step by step until it is done. The last answer replaces the skeletons without a reload.
  15. - **Details repair** (`project.hl repairTick`):
  16. - At start it queues every incomplete title that is not adult and does one step per clock tick.
  17. - It paces itself with `pauseMsAfter` (TMDB ≤ 40 / 10 s, TVmaze ≤ 20 / 10 s) and runs only after the adult backfill and never during the daily sync.
  18. - It resumes after a restart and retries passing failures up to 2 times.
  19. - Env: `TRACKER_REPAIR` (default on), `TRACKER_REPAIR_LOG_EVERY`, `TRACKER_REPAIR_FAST` (gate only).
  20. - New titles from a filmography get `minimal = true`.
  21. - Adult titles are never completed: the public face refuses them and the repair skips them.
  22. ## Gate
  23. ```
  24. TRACKER_GATE_SHOTS=/tmp/w059/shots TRACKER_GATE_PORT=8754 TRACKER_GATE_IDENT_PORT=8755 TRACKER_GATE_CHROME=8756-8758 TRACKER_GATE_TMDB_PORT=8759 node tests/browser.mjs
  25. 231 passed, 0 failed
  26. ```
  27. - 214 → 231 checks. The new ones cover:
  28. - artist page → click a new movie → skeleton → full page without a reload, one TMDB request;
  29. - the series case in 4 steps;
  30. - the new cast person's page and search entry;
  31. - the repair: 82 titles, stopped after 6, resumes, 404s marked, adult title never asked, pages < 1.2 s meanwhile, a 3rd start has nothing to do.
  32. - The offline home check now expects 6 series instead of 5, because Person Series has released episodes once it is completed.
  33. ## Real data (copy of live `storage/`, real TMDB; copy deleted afterwards)
  34. **Opening a title** (ms from the click):
  35. - **Skeleton:** shown after 178–258 ms.
  36. - **Movies:** complete after 642–712 ms.
  37. - **Series:** complete after 1262–1361 ms.
  38. - **Other requests meanwhile:** at most 586 ms.
  39. - **Reload afterwards:** complete at once, 157–205 ms.
  40. - **Biggest titles:** The Late Show (4,252 episodes) took 11.4 s in 23 steps, with other requests waiting at most 1.3 s.
  41. **Repair**: 321/321 complete, 0 failed, +638 seasons, +16,528 episodes, 299 posters, 5,196 cast entries, 787 TMDB + 218 TVmaze requests, 507 s.
  42. - Page latency meanwhile: median 0.13 s, p99 1.03 s, max 2.35 s.
  43. - The next start logs "nothing to do".
  44. - My first version did one title per step; the Late Show then blocked the server for 10.7 s. That is why series are now split into steps.
  45. **Screenshots** (looked at), on Loreana:
  46. - `/tmp/w059/real/`: `{movie,series}-{skeleton,complete,reload}-{390,1280}.png`, `repaired-*-{390,1280}.png`, `direct-*-1280.png`
  47. - gate: `/tmp/w059/shots/{title,series}-skeleton-1280.png`
  48. ## Merge notes for main (mission 014 (old 058) touches `components/show.hl`)
  49. - **`components/show.hl`:** my changes are additive:
  50. - 1 import;
  51. - 2 statics (`completingOf`, `completedPageOf`, which calls `buildRows(show, null, cl)`);
  52. - 4 members after `adultShow`;
  53. - the View blocks (poster skeleton, cast skeleton, `showLoading`);
  54. - the handler `completeTick`;
  55. - the face `showComplete`.
  56. - **`tmdbsync.hl`:** `syncMovie` gained a third parameter `pre`, and `syncShow` now calls `syncShowPart(id, null, null)`.
  57. - **Gate:** new fixtures, startServer defaults (`TRACKER_REPAIR=0`, `TRACKER_DETAILS_PART_EPISODES=1`), and the #16 block's "added title" check is replaced by the #26 block.
  58. - **Deploy:** on live the repair waits for the adult backfill (~80 min), then takes ~9 min.
  59. ## Open points
  60. 1. Merge and deploy.
  61. 2. Search imports still have no cast.
  62. 3. Titles added while the app runs are only completed when opened or at the next start.
  63. 4. After a client-side click, the title page keeps the person page's scroll position (hl:web behaviour, not new).
  64. ## Hybriel issues
  65. None new.

Branches

Latest commits

  • 4ecc67b2tracker: STATUS/LOG for the t38 + t40 merge (gates 374/0, 32/0, 53/0, 229/0, 26/0, check-theme 0; live copy checks)mre
  • e5945d2fMerge t40 (tracker#40 curated franchises, Franchises menu, superseded collections) into main: deploy.sh lists all six gates (browser, kinds, franchises, pager, franchiseseed, check-theme); search.hl keeps #37's personPhotoOf + #40's importWithCredits; pager gate runs with TRACKER_FRANCHISE_SEED=0; gates 374/0, 32/0, 53/0, 229/0, 26/0, check-theme 0mre
  • b638e99dMerge t38 (tracker#38 pagination, #35 Returning/Airing label) into main: LOG/STATUS keep both sides; pager gate follows #37's /people (everyone, last updated first: seed updatedAt); gates pager 229/0, browser 374/0mre
  • f8ffa4dbtracker: report 032 + The Remaining + #39mre
  • 7565a863tracker: LOG timemre
  • b10f00c8tracker#39: double episodes — migrated episodes whose TMDB id TMDB replaced are adopted by their number in the sync (old id -> migratedTmdbId); merge.hl step 3 merges each season's doubles at start (keeper: most watches > synced > first; watches moved/parked; tombstones into mergedEpisodes, nothing deleted); tools/count-duplicate-episodes.hl; gate fixture + paths-m039; live copy 850 -> 0 in 64 s; gates 373/0, 32/0, 52/0mre
  • 8f1d4542tracker#40: superseded collections — a TMDB collection timeline whose titles are all in one curated timeline is hidden (supersededBy; kept: own page + editor finder), set by the collection seed when it makes one and by the curated build (lifted when the cover is gone); partly covered ones join that franchise; no second widget (First Contact: only Star Trek — Prime); gate franchiseseed 26/0, browser 365/0, kinds 32/0, franchises 53/0, check-theme 0; real copy 24 supersededmre
  • 9448d643tracker#35 follow-up (mission 033): TVmaze 'Running' is labelled 'Returning', or 'Airing' while a non-special episode of the two newest seasons is released within today +-7 days (data unchanged); gate fixtures Running/Airing/Aired + a special; browser 366/0, kinds 32/0, franchises 52/0, pager 229/0, check-theme 0mre
  • 7d4b293dtracker#40: "Franchises" in the main menu (desktop header after People, phone sidebar) → /franchises, marked on franchise and timeline pages; gates 365/0, 32/0, 53/0, 24/0, check-theme 0mre
  • 8751adb8tracker: report 032mre
  • 9bce1f65tracker mission 032: STATUS gate files + the hour-boundary flakemre
  • 718bfb89tracker#37 (mission 032): /people = everyone, last updated first (updatedAt stamped by the person fill; view built at boot, touched people first at once), photo + name tiles (person colour) with the /movies pagination, /people/<letter> removed; photo = our file, tmdbProfile, a cast/crew entry's profile (in-memory map at boot), else the new 'no photo' placeholder; new cast/crew/created_by people keep tmdbProfile; search people rows with the photo; /settings = the heading only; util.hl sortDesc starts from sorted runs (same result, 105k: 1.6 s -> 0.15 s); gates 369/0, 32/0, 52/0, check-theme 0; README/STATUS/LOGmre
  • 93dfb0batracker#40 (mission 034): the curated franchises — data/franchises.json (17 franchises, 31 timelines, 285 TMDB titles, movies + series, in-universe/release order, 12 TMDB collections attached); lib/franchiseseed.hl + jobs.hl franchiseSeedTick (last start job, imports missing titles via details.hl importWithCredits = the search's Add, one per step paced, then one build; franchiseseed.db: editor changes win, the creator's same-name franchise adopted / timeline left alone, 404 remembered, resumable, idempotent); timeline heads 'N titles · in-universe order' (orderKind) and wrap on a phone; series pages show the widget; new gate tests/franchiseseed.mjs (5th in deploy.sh), the others run with TRACKER_FRANCHISE_SEED=0; gates 365/0, 32/0, 52/0, 24/0, check-theme 0; real copy 196 imported, 0 failed, 7 min, restart unchanged=31mre
  • 03ec792ftracker#38 (mission 033): pagination goes exactly to the clicked page — tilelist read the clicked button's text after pagination.hl's own handler had rebuilt the buttons (real clicks only); now li.current, else the button's own text; new gate tests/pager.mjs (5 lists x 11 pages, 390/1280, real + script clicks, Back/Forward) 229/0; browser 365/0, kinds 32/0, franchises 52/0, check-theme 0mre
  • 96ba683adeploy.sh: a gate without a 'passed,' line (check-theme) no longer ends the scriptmre
  • eb3b9205tracker: report 031mre
  • 9b5d2e89tracker mission 031: README (What it does, Test: four gates + the #32 checks, Files: theme/, new pages), STATUS (real copy, A/B load, how to repeat, open points), LOGmre
  • 39950e4ctracker#32 (mission 031): the WorldAPI theme (theme/ vendored verbatim from layouts.worldapi.org 85b5654; styles.hl inherits it: accent green-dark, type colours 1-6; own base/header rules, row lines, genre-pill and inverted-button frames removed, the season foldable keeps its line; check-theme 21 -> 0, 4th deploy gate; main actions class primary) and the #32 header (theme AppHeader/MainMenu/UserMenu/Sidebar/ContentFirst: desktop brand, search, Series|Shows|Movies|Genres|People, user icon with Unwatched..Settings, Logout; signed out the ident selector, phone the iD icon dropdown; phone menu in the sidebar overlay; marked entry by :has); /find -> /search/<q>, /genres, /people(/<letter>), /settings; main { ContentFirst { slot } } works around the hl:web one-line slot bug; gates 365/0, 32/0, 52/0, check-theme 0mre
  • a386dc92tracker: reports 029 + 030mre
  • 71e0fd7dtracker missions 029 + 030: README (What it does, Files, gate count), STATUS (real-copy numbers, how to repeat, open points), LOGmre