tracker
All repositories: gitoria
5.0 KB
# w056: tracker, #16 merged, 3 fixes, Hybriel master (mission 012 (old 056))The work is in loreana:/media/STORAGE/projects/tracker.worldapi.org, on main. Nothing was pushed and nothing was deployed.**Commits**- `2c53d5e`: merges t16-person into main.- All conflicts only added code on both sides, so both sides were kept.- The filmography now lists only public titles (`isPublicTitle`, which means `adult == false`) whose TMDB credit is not adult either.- The worktree tracker-wt16 and the branch are removed. Their `.scratch/w055` notes were moved to `.scratch/w055-wt16`.- `2b7fdd6`: the header fix and the backfill fix.- Signed out on a phone, the header is now one row. The buttons do not wrap their text, and the phone shows "Log in" ("Log in with ident" from 40rem up). It is 46 px high at 320 and 390 px (it was 73 px).- The backfill no longer downloads the posters of adult titles. Their flag and ids are still stored.- `f40c250`: the new Hybriel and the hidden adult show page.- Hybriel master is re-vendored.- The page of an adult title says "Not found" to everyone who does not follow it.- Two flaky gate checks are fixed.- `f2fe3e3`: README, STATUS, `tests/realdata-056.mjs` and `tools/check-public-slugs.hl`.**Gate**`TRACKER_GATE_SHOTS=/tmp/w056/shots TRACKER_GATE_PORT=8720 TRACKER_GATE_IDENT_PORT=8721 TRACKER_GATE_CHROME=8722-8726 TRACKER_GATE_TMDB_PORT=8727 node tests/browser.mjs`- Last line: **`208 passed, 0 failed`**. That is 203 after the merge plus 5 new checks.- I made two gate fixes:- The backfill's "start" line is written at the first clock tick, which comes after the server's first answer. The check now waits for that line; without the wait it failed every time after the merge.- The tab now goes to about:blank before each server stop. Without that, websocket reconnect errors sometimes failed the console check.- I proved two of the new checks catch the bug they are for:- With the old poster download put back, the poster check fails.- With the old Hybriel binary, the "Unfollow hides the page" check fails.**Hybriel**- Master **8590df63** (it includes 73267707 / #122 and #121 426944c7). Built read-only, ReleaseFast, sha256 `ca830ef8…`.- The old copy is in `.scratch/pre-056/`.- Duplicate @ids in the live copy: 0 in all 8 tables.- No workaround was removed. The SVG check was already in the gate.**Hiding the adult show page: it works now**- Why mission 010 (old 054)'s attempt failed: `collapsed` (which seasons are open, kept in the browser) was derived from the session-dependent `found`.- After every session face, the server re-derived it from the page's starting state. The seasons snapped back and the second click did nothing.- Now `collapsed` comes from the slug only. `showRow` itself is null when the page is hidden, because every member is sent to the browser.- What a user sees:- A follower sees the page.- If the follower unfollows on the page, it changes to "Not found" at once.- No minimal repro for Anton was needed.**Real data** (copy of the live `storage/`, one tar, real TMDB, the backfill run on the copy; the copy was deleted afterwards)| | ||---|---|| Backfill | 78 min: adult 3,450, not adult 5,866, unknown 137 || Posters | **5,433 downloaded (was 8,740), 269 MB (was 459 MB)** |Full page loads in ms, at 390 / 1280 px:| page | 390 | 1280 ||---|---|---|| `/` | 426 | 91 || `/movies` | 92 | 90 || `/movies/page/2` | 93 | 37 || `/shows` | 287 | 41 || `/shows/page/2` | 92 | 42 || `/search/the` | 336 | 126 || `/search/sex` | 442 | 91 || `/person/Jared-Harris` | 242 | 102 || `/shows/Foundation` | 189 | 145 || `/my/shows` | 650 | 219 || `/my/movies` | 41 | 38 || `/my/unwatched` | 1478 | 1655 || `/my/schedule` | 457 | 322 |- The first visit of the person page loaded the filmography from TMDB: 97 credits, 80 titles added, 487 ms.- `/my/unwatched` took 1.5–2.4 s over repeated loads (the server part is 1.33 s, 1,595 rows). The old Hybriel gives the same times.- The header is one row on every page.- The adult page (`/shows/This-Aint-Star-Trek-XXX`) says "Not found" signed out, and its slug is not in the HTML. It also says "Not found" for az5b2, who follows no adult title.- I collected every link on all 251 list pages, `/`, 6 searches and the person page: 5,914 slugs. All of them are `adult == false`; 0 adult, 0 unknown.- 0 console problems.- Screenshots on Loreana: `/tmp/w056/real/{out,in}-*-{390,1280}.png` and the gate's `header-signed-out-{320,390,1280}.png`. I looked at them.**Open points**1. Deploy: the backfill runs on the live data for about 80 min and adds about 270 MB of posters.2. `/my/unwatched` is at the 2 s target (1.5–2.4 s).3. hl:fetch blocks the whole server while a TMDB answer is slow (the slowest step in this run took 5 s).4. When someone unfollows an adult title on its page, the page turns into "Not found" at once. That follows from the rule; tell me if a softer behaviour is wanted.5. Still open from before: 137 TMDB-404 titles stay hidden, adult people are not hidden, and people are never refreshed.
Branches
- mainmain branch
Latest commits
- 5cb85d75deploy.sh: a backup taken while a background job writes (tar exit 1) is a warning; archive checked with gzip -tmre
- 9abda75dtracker: report 035mre
- 12595e47mission 035: theme re-vendored from layouts.worldapi.org 0222f67 (two corner radii: radiusSmall 5px, radiusLarge 10px); the tracker's 18 own radii -> radiusSmall/radiusLarge (--layout-radius is gone); check-theme 0; gates 379/0, 32/0, 53/0, 229/0, 26/0; real copy: every computed radius in {0, 5px, 10px, 50%}mre
- e7305014tracker: report 032 (art + photos)mre
- fbb903cctracker#33/#37 (mission 032): a title without a TMDB poster gets its backdrop (w780, posterFromBackdrop, shown 2:3 centre-cropped); movies store runtime, the page shows release date + runtime; art backfill (public titles without poster file / movies without runtime) and person photo backfill (tmdbProfile / photoCheck) as the last start jobs (TRACKER_ART, TRACKER_PHOTOS; off in every gate start); gates 379/0, 32/0, 53/0, 229/0, 26/0, check-theme 0; live copy: art 4977 titles in 42 min (115 posters, 15 backdrops, 4609 runtimes), The Remaining shows its backdrop + 7 minmre
- 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