gitoriaLog in with ident

tracker

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit93dfb0ba93dfb0batracker#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=31mre93dfb0ba/reports/014-tracker-small-bugs.md

4.0 KB

  1. # w058 — tracker#22–#25 (mission 014 (old 058))
  2. **Commit**: `f14db67` on main in loreana:/media/STORAGE/projects/tracker.worldapi.org. Not pushed and not deployed. I did not touch tracker-wt26.
  3. ## What changed
  4. - **#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`.
  5. - **#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.
  6. - **#24 movie watched check**: a movie's page has `#moviewatch` with the label "Watched" / "Not watched".
  7. - It saves a watch with the new target type `'movie'` through the face `showToggleMovie`.
  8. - Signed out, a click opens the sign-in modal and saves nothing.
  9. - `/my/movies` shows "N movies · M watched" and a solid check on each watched movie.
  10. - **#25 genre pages**: `/genres/<genre>` and `/genres/<genre>/page/<n>` (`components/genre.hl`, using `catalog.hl` `index.genres`).
  11. - Movies and series are listed together, newest first, 24 per page, with adult titles hidden.
  12. - The genre pills on show pages link here, and the old `/genre/<x>` answers 301.
  13. - 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`.
  14. ## Gate
  15. `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`
  16. → `238 passed, 0 failed` (was 214; 24 new checks).
  17. - #23 is tested in both directions, live and after a reload.
  18. - #24 is tested signed out (modal) and signed in, and the watch is still there after a reload.
  19. - 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.
  20. ## Real data
  21. Copy 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:
  22. | Page | 390 px | 1280 px |
  23. |---|---|---|
  24. | `/shows/Foundation` | 549 / 277 / 221 | 224 / 228 / 225 |
  25. | movie `/shows/Star-Trek-First-Contact` | 234 / 250 / 250 | 237 / 238 / 239 |
  26. | `/genres/Action` | 118 / 991 / 42 | 92 / 39 / 43 |
  27. | `/genres/Action/page/2` | 41 / 103 / 749 | 93 / 48 / 110 |
  28. | `/my/movies` | 66 / 63 / 66 | 68 / 63 / 63 |
  29. - `/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.
  30. - On Foundation, the open season's 10 rows all show a date, and the top season's check matches its episodes.
  31. - 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.
  32. - 0 console problems.
  33. - The copy is deleted and nothing of mine is still running on 8720–8731.
  34. ## Screenshots (looked at)
  35. - Gate: Loreana `/tmp/w058/shots/`, especially `show-open-*`, `movie-watched-*`, `genre-action-*`, `my-movies-*` and `movie-signed-out-modal-1280`.
  36. - 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/`.
  37. ## Open points
  38. 1. **`/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.
  39. 2. A series tile shows its start year but is placed by its newest episode, the same as on /shows.
  40. 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.
  41. 4. Deploy is still to do.
  42. 5. No Hybriel issues found.

Branches

Latest commits

  • 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
  • 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
  • 2e89b968tracker mission 028 (code order) 5/5 let: `let` only where a variable is reassigned — 667 never-reassigned lets became plain declarations (project.hl, lib/, components/, tools/, tests/); kept: 264 in loop bodies (a plain declaration there is 'Cannot reassign' on the 2nd pass), 234 reassigned, 27 whose name is also a member/outer/free name (a plain write would rebind it); tools/let-audit.py decides and fixes (README 'Code order'); tests/realdata-m028.{sh,mjs} = the page-output diff on a real copy; gates 342/0, 32/0, 52/0, real-copy pages identicalmre
  • 54796ff2tracker mission 028 (code order) 4/5 thin faces + last copies: the show page's check/follow faces call lib/watches.hl toggleWatched / toggleSeasonWatched (seasonAllWatched moved there) and lib/follows.hl toggleFollowed; both logins (header selector face, /login/callback) share lib/users.hl userOfCode; todayStr/listOf copies in components and the export readers copied into tools/migrate.hl + tools/old-short-ids.hl now once (lib/util.hl, lib/export.hl); gates 342/0, 32/0, 52/0; old-short-ids output byte-identical, migrate output identicalmre
  • 06b078e3tracker mission 028 (code order) 3/5 project.hl is the map: config, routes, wiring and a feature → file index (914 → 258 lines); the background jobs (daily sync run, backfills, details repair, credits job, merge, short ids, collection seed) moved unchanged into lib/jobs.hl (a class: their state is reassigned every step, a static cannot be; one instance made after the server), the login callback into lib/users.hl, poster/photo serving into lib/images.hl, the /shows/<slug> rule into lib/shows.hl showsMovedPath; route handlers are thin wrappers; gates 342/0, 32/0, 52/0, real-copy pages identicalmre
  • 94716fd2tracker mission 028 (code order) 2/5 util + topics: lib/util.hl holds envOr, storageDir, postersDir, profilesDir, newId, hexDigits, todayStr, dateOr, textOr, hasId, listOr, firstOf, sortDesc once (were copied into up to 5 files); tmdbsync.hl split into tmdb.hl (TMDB/TVmaze requests), sync.hl (one title's sync), sync-helpers.hl, backfill.hl; details.hl split into details.hl, credits.hl, credits-helpers.hl (isIncomplete to shows.hl); search-helpers.hl (words, query, ranking, slugs); collections.hl (the TMDB collection seed, out of franchises.hl); deltasync.hl renamed dailysync.hl; no behaviour change: gates 342/0, 32/0, 52/0, real-copy pages identicalmre
  • 186079b0tracker mission 028 (code order) 1/5 move: every root .hl except project.hl into lib/ (styles.hl into components/), import paths only; gates 342/0, 32/0, 52/0; real-copy pages identicalmre
  • 4f47f181tracker: report 027mre
  • dc1d4be4tracker mission 027: Hybriel master 06617221 vendored (plugin allocator fixes 3a781359 + 413f60e4); real copy RSS through first-start jobs + 400 loads flat ~2.55 GB (190aa11d 2.3 -> 5.6 GB), page times <= 1.1x; gates 342/0, 32/0, 52/0mre
  • 84e1b3e1tracker: reports 025 + 026mre