tracker
All repositories: gitoria
4.0 KB
# w058 — tracker#22–#25 (mission 014 (old 058))**Commit**: `f14db67` on main in loreana:/media/STORAGE/projects/tracker.worldapi.org. Not pushed and not deployed. I did not touch tracker-wt26.## What changed- **#22 air dates**: every episode row ends with its air date (`YYYY-MM-DD`). This works for rows rendered on the server and for rows of a season opened with `showSeasonEpisodes`.- **#23 season check**: the season check is now worked out from the episodes. It is checked exactly when all its episodes are watched, and it updates as soon as the face answers. Clicking a partly watched season watches the rest.- **#24 movie watched check**: a movie's page has `#moviewatch` with the label "Watched" / "Not watched".- It saves a watch with the new target type `'movie'` through the face `showToggleMovie`.- Signed out, a click opens the sign-in modal and saves nothing.- `/my/movies` shows "N movies · M watched" and a solid check on each watched movie.- **#25 genre pages**: `/genres/<genre>` and `/genres/<genre>/page/<n>` (`components/genre.hl`, using `catalog.hl` `index.genres`).- Movies and series are listed together, newest first, 24 per page, with adult titles hidden.- The genre pills on show pages link here, and the old `/genre/<x>` answers 301.- Files: `components/show.hl`, `components/mymovies.hl`, `components/genre.hl` (new), `catalog.hl`, `shows.hl`, `project.hl`, `styles.hl`, `watches.hl`, `tools/verify.hl`, `tests/browser.mjs`, `tests/seed-show.hl`, `tests/realdata-058.mjs` (new), `README.md`, `STATUS.md`.## Gate`TRACKER_GATE_SHOTS=/tmp/w058/shots TRACKER_GATE_PORT=8720 TRACKER_GATE_IDENT_PORT=8721 TRACKER_GATE_CHROME=8722-8726 TRACKER_GATE_TMDB_PORT=8727 node tests/browser.mjs`→ `238 passed, 0 failed` (was 214; 24 new checks).- #23 is tested in both directions, live and after a reload.- #24 is tested signed out (modal) and signed in, and the watch is still there after a reload.- One old check had to change. "An unwatched check is the inverted icon" now styles a detached copy of a check classed `regular`, because with #23 every check on that page is solid at that point.## Real dataCopy of Byrodin `storage/` taken 2026-10-01 12:03 UTC, server on :8730, signed in as the creator, `node tests/realdata-058.mjs`. Full page loads in ms, 3 runs each:| Page | 390 px | 1280 px ||---|---|---|| `/shows/Foundation` | 549 / 277 / 221 | 224 / 228 / 225 || movie `/shows/Star-Trek-First-Contact` | 234 / 250 / 250 | 237 / 238 / 239 || `/genres/Action` | 118 / 991 / 42 | 92 / 39 / 43 || `/genres/Action/page/2` | 41 / 103 / 749 | 93 / 48 / 110 || `/my/movies` | 66 / 63 / 66 | 68 / 63 / 63 |- `/genres/Action` has 643 titles on 27 pages. The server answers it in 6–8 ms (curl); the occasional ~1 s loads are probably the poster images loading.- On Foundation, the open season's 10 rows all show a date, and the top season's check matches its episodes.- Movie check on the copy: click took 361 ms, after a reload it was solid, I clicked it back, and after another reload it was not watched.- 0 console problems.- The copy is deleted and nothing of mine is still running on 8720–8731.## Screenshots (looked at)- Gate: Loreana `/tmp/w058/shots/`, especially `show-open-*`, `movie-watched-*`, `genre-action-*`, `my-movies-*` and `movie-signed-out-modal-1280`.- Real data: Loreana `/tmp/w058/real/` (`show`, `movie`, `genre`, `genre-2`, `my-movies` at 390 and 1280) and `/tmp/w058/real-Drama/`, `/tmp/w058/real-Action-Adventure/`.## Open points1. **`/genres/Action` has no series on real data.** TMDB uses different genres for TV ("Action & Adventure", "Sci-Fi & Fantasy", "War & Politics") than for movies. So Action has only movies (page 1: 24 movies), Action-Adventure only series (0 movies / 24 series) and Drama both (5 movies / 19 series). Merging them is a question for the creator.2. A series tile shows its start year but is placed by its newest episode, the same as on /shows.3. A season click still writes the season's own watch record, but nothing reads it for the check any more, so it can disagree with the episodes.4. Deploy is still to do.5. No Hybriel issues found.
Branches
- mainmain branch
Latest commits
- 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
- 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
- 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
- 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
- d36ea6eatracker#34 + #35 (mission 030): Follow directly under the poster, as wide as the poster (show.hl, styles.hl); the status pill next to a series' title — TVmaze's status (new tvmazeStatus, stored by the sync's TVmaze merge) else TMDB's, TVmaze Ended + TMDB Canceled = Canceled, inverted (filled, dark text, no border), green running / yellow pending / red canceled / muted ended (shows.hl statusOf); the daily delta asks TVmaze's status of an unfollowed series TVmaze's change list names (dailysync.hl syncRunStep, sync.hl syncTvmazeStatus); the status backfill after the details repair (backfill.hl, jobs.hl statusTick; resumable, 550 ms per TVmaze request); gates 354/0, 32/0, 52/0mre
- 7d7d4487tracker#33 (mission 029): reduced titles — every title TMDB's details never went through this app (no detailsAt, no tmdbSync) is incomplete (shows.hl isIncomplete; the old tracker's migrated rows passed #26's test: 5,697 non-adult on the live copy, 691 series without seasons); the repair job does the visibly reduced first (shows.hl missingParts), the page completes one on open; a title TMDB has no poster for (The Remaining) shows the placeholder; tools/count-incomplete.hl; gate fixtures stand for synced titles (tmdbSync), tests/seed-reduced.hl + #33 checks; gates 347/0, 32/0, 52/0mre
- 661c2592tracker: report 028mre
- 27c916fatracker mission 028: README ("Code order", the new file map), STATUS (counts before/after, tests, how to repeat, open), LOGmre
- d924f398tracker mission 028: comments name the new files (sync.hl, dailysync.hl, backfill.hl, credits.hl, jobs.hl, images.hl …); tools/ref-params.py + tools/lambda-audit.py also scan lib/ (they globbed the root only), lambda-audit counts a plain `x = p` alias like `let x = p`mre