gitoriaLog in with ident

tracker

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit8081350a8081350atracker docs (mission 070): README (summary, Config HL_GC_BYTES — kept at Hybriel's default, the 256 MiB setting is taken out of docker-compose.yml again: the jobs grew to 12+ GB with it too, see STATUS), Test (three gates), Deploy (first start ~50 min: kinds then seed, restart once after collections done, memory numbers), Vendored Hybriel 8efba065 + #48 audit, Files; STATUS mission 070 entry (merges, migrated counts, lambda audit, gates, RSS old vs new, how to repeat, open points); docs/kinds.md + docs/franchises.md job order; tests/realdata-070-*.sh, tools/count-migrated.hl, tools/ref-params.py, tools/lambda-audit.pymre8081350a/DECISIONS.md

10.5 KB

  1. # Decisions — tracker.worldapi.org
  2. <!-- generated by the antcolony librarian (antcolony-scheduler: ./colony librarian) from librarian/decisions.json — do not edit by hand, it is rewritten -->
  3. The creator's decisions for **tracker.worldapi.org** — current state only (superseded ones: `DECISIONS-archive.md` beside this file).
  4. **A decision here overrides anything else; ask only if it is not decided here.**
  5. Each entry: date · the creator's exact words in quotes · where it was said · "means" = a READING (the librarian's or the architect's), not the creator's words — when in doubt, the quote counts.
  6. ## Contents
  7. - [ident registration](#ident-registration) — 1
  8. - [look and style](#look-and-style) — 1
  9. - [tracker concept](#tracker-concept) — 11
  10. ## ident registration
  11. - 2026-09-27 · **"Before you can test:** register the app in ident (/apps) for the origin https://tracker.worldapi.org and give me the key and secret — until then the sign-in button shows "not registered with ident yet"."** · [tracker.worldapi.org #1 — Step 1: an empty tracker with the ident login](https://tickets.worldapi.org/projects/tracker.worldapi.org/1)
  12. - means (the librarian's reading, not the creator's words): Register the tracker app in ident (/apps) for origin https://tracker.worldapi.org and give the creator the key and secret; without this the sign-in button stays broken.
  13. ## look and style
  14. - 2026-09-27 · **"Fixed by the architect after your correction: now NO button has a border — also "Log out", the signed-in ident status and the identities in the ident dropdown. Only an inverted button (class "inverted", accent outline) would have one; tracker has none yet."** · [tracker.worldapi.org #3 — Design notes from the first test: no borders on the header and the bu…](https://tickets.worldapi.org/projects/tracker.worldapi.org/3)
  15. - means (the librarian's reading, not the creator's words): No border on any tracker button including "Log out", the signed-in ident status pill, and identities in the ident dropdown; only class "inverted" (accent outline) buttons keep a border — tracker currently has none.
  16. ## tracker concept
  17. - 2026-09-27 · **"Step 5 (/unwatched) is live — step 6 can start."** · [tracker.worldapi.org #6 — Step 6: /schedule — the upcoming episodes of the shows you follow](https://tickets.worldapi.org/projects/tracker.worldapi.org/6)
  18. - means (the librarian's reading, not the creator's words): Tracker step 6 (/schedule) is now unblocked and may begin; the hold is lifted.
  19. - 2026-09-27 · **"Step 4 (the show page) is live — step 5 can start."** · [tracker.worldapi.org #5 — Step 5: /unwatched — the unwatched episodes of the shows you follow](https://tickets.worldapi.org/projects/tracker.worldapi.org/5)
  20. - means (the librarian's reading, not the creator's words): Tracker step 5 (/unwatched) is now unblocked and may begin; the hold is lifted.
  21. - 2026-09-27 · **"Posters: the old tracker kept them as files (storage/posters/<id>.jpg); those files are gone — they were never in the backup (see LOG). Keep the placeholder for now; getting posters again from TMDB (the show's tmdbId) is a later step with the TMDB token. The open point that matters in this step is the check click: it must really toggle (and a season's check all its episodes)."** · [tracker.worldapi.org #4 — Step 4: the show page /shows/:slug with seasons, episodes and watch c…](https://tickets.worldapi.org/projects/tracker.worldapi.org/4)
  22. - means (the librarian's reading, not the creator's words): Real poster images are out of scope now (files lost, not backed up); keep the placeholder and defer TMDB re-fetching to a later ticket. For this step, prioritize making the watch check actually toggle, including a season check toggling all its episodes.
  23. - 2026-09-27 · [tracker.worldapi.org #6 — Step 6: /schedule — the upcoming episodes of the shows you follow](https://tickets.worldapi.org/projects/tracker.worldapi.org/6) · the creator wrote:
  24. > Step 6: /schedule — the upcoming episodes of the shows you follow
  25. >
  26. > A list of the episodes still to come from the shows you follow, soonest first, without checks.
  27. > **Test:** open /schedule — only future episodes of followed shows, the next one on top, no check icons.
  28. > **Details:**
  29. > - Creator: "/schedule has a similar list without check icons for he upcoming episodes of shows followed".
  30. > - Upcoming = release date after today; order soonest first (decided by the architect; the creator named the order only for /unwatched).
  31. > - Same row layout as /unwatched (step 5) minus the check.
  32. - means (the librarian's reading, not the creator's words): Build /schedule: upcoming (release date after today) episodes of followed shows, soonest first, same row layout as /unwatched but without the check icon.
  33. - 2026-09-27 · [tracker.worldapi.org #5 — Step 5: /unwatched — the unwatched episodes of the shows you follow](https://tickets.worldapi.org/projects/tracker.worldapi.org/5) · the creator wrote:
  34. > - Creator: "/unwatched lists all unwatched episodes of shows followed in release date desc order"; "check icon is a disc with a check in it".
  35. > - Only episodes already released (release date today or earlier); each row: check icon, show title, episode number, episode title, release date; the show links to /shows/:slug.
  36. > - Same check icon and watch logic as the show page (step 4) — reuse, don't copy.
  37. - means (the librarian's reading, not the creator's words): Build /unwatched: list unwatched episodes of followed shows, newest release first, only already-released episodes; each row shows check icon, show title, episode number, episode title, release date, show links to /shows/:slug; reuse the show page's check icon and watch logic, don't duplicate it.
  38. - 2026-09-27 · **"/shows/:slug shows the poster on the left, right of it the title of the show, the genre pills, below the plot summary, below that the artists just as normal links, separated with comma color red, genres are blue i think, this is the show header. then all sesions in reverse order, latest on top, below them collapsable their episodes episodes first the round check icon, if the episode was watche by the user looking its solid, if not its regular. then the episode number, then the title. the last season is not collpased. click on the check adds a watch. the season also has a check, if the season is checked or unchecked all its episodes get checked or unchecked. artists link to /person/<artist-slug> the genre to /genre/<genre-slug>"** · [tracker.worldapi.org #4 — Step 4: the show page /shows/:slug with seasons, episodes and watch c…](https://tickets.worldapi.org/projects/tracker.worldapi.org/4)
  39. - means (the librarian's reading, not the creator's words): Build /shows/:slug exactly as specified: poster left, title/genre pills/plot right, artists below as red comma-separated links, genre pills blue, artist/genre links use slugs; seasons listed reverse-chronological, all collapsible except the latest; each episode shows a check icon (solid disc if the…
  40. - 2026-09-27 · **"The old data itself had 36,194 episodes without a season link (and 3 watches without a target) — kept as they were; they can be re-linked by show + season number later."** · [tracker.worldapi.org #2 — Step 2: move the old tracker data into the new app](https://tickets.worldapi.org/projects/tracker.worldapi.org/2)
  41. - means (the librarian's reading, not the creator's words): Episodes without a season link and watches without a target were migrated as-is, not dropped or fixed now; a later step may re-link them by matching show + season number.
  42. - 2026-09-27 · **"Copy calendar.worldapi.org's login unchanged: the header in components/main.hl with <ident-selector>, users.hl, login.js, and the login routes in project.hl. Open those files in /media/STORAGE/projects/calendar.worldapi.org — not ident's test app."** · [tracker.worldapi.org #1 — Step 1: an empty tracker with the ident login](https://tickets.worldapi.org/projects/tracker.worldapi.org/1)
  43. - means (the librarian's reading, not the creator's words): Tracker's login must copy calendar's unchanged (identity selector in header, homepage stays empty, no centered sign-in); rejected for not matching.
  44. - 2026-09-27 · **"Step 1 is live (https://tickets.worldapi.org/projects/tracker.worldapi.org/1) — step 2 can start."** · [tracker.worldapi.org #2 — Step 2: move the old tracker data into the new app](https://tickets.worldapi.org/projects/tracker.worldapi.org/2)
  45. - means (the librarian's reading, not the creator's words): Tracker step 2 (moving old data into the new app) is now unblocked and may begin; the earlier hold is lifted.
  46. - 2026-09-27 · **"Every record gets a NEW mpackdb id. Build the map old id → new id, then re-point EVERY reference: Show.seasons/genres/cast, Season.show/episodes, Episode.show/season, Person.shows, Follow.oid/userId, Watch.oid (episode or season, sometimes a plain string)/userId."** · [tracker.worldapi.org #2 — Step 2: move the old tracker data into the new app](https://tickets.worldapi.org/projects/tracker.worldapi.org/2)
  47. - means (the librarian's reading, not the creator's words): Tracker step 2: migrate old MongoDB export into new app db with fresh mpackdb ids via an old→new id map, re-pointing every reference listed; only user is creator (ident az5b2), old password hash dropped; build an idempotent one-off tool in tools/ that prints counts and proves counts match, zero d…
  48. - 2026-09-27 · [tracker.worldapi.org #1 — Step 1: an empty tracker with the ident login](https://tickets.worldapi.org/projects/tracker.worldapi.org/1) · the creator wrote:
  49. > Step 1: an empty tracker with the ident login
  50. >
  51. > The new tracker starts as an empty app: sign in with ident, then an empty homepage.
  52. > **Test:** open https://tracker.worldapi.org, sign in with ident, see the empty homepage with your name and a sign-out.
  53. > **Details:**
  54. > - New Hybriel app in its own folder, set up like calendar/notes (vendored Hybriel, deploy script, container, port 45008).
  55. > - Login exactly like calendar: ident only, no own passwords.
  56. > - Nothing else: no shows, no data, no design from the old app. The next steps come from the creator (see CONCEPT.md).
  57. > - Proof: a gate with a real ident copy and a real browser: signed out → sign in → homepage → sign out.
  58. - means (the librarian's reading, not the creator's words): Tracker step 1 is a new Hybriel app (own folder, vendored Hybriel, deploy script, container, port 45008) with ident-only login like calendar (no own passwords); build nothing else — no shows, data, or design from the old app; further steps wait for the creator via CONCEPT.md.

Branches

Latest commits

  • 8081350atracker docs (mission 070): README (summary, Config HL_GC_BYTES — kept at Hybriel's default, the 256 MiB setting is taken out of docker-compose.yml again: the jobs grew to 12+ GB with it too, see STATUS), Test (three gates), Deploy (first start ~50 min: kinds then seed, restart once after collections done, memory numbers), Vendored Hybriel 8efba065 + #48 audit, Files; STATUS mission 070 entry (merges, migrated counts, lambda audit, gates, RSS old vs new, how to repeat, open points); docs/kinds.md + docs/franchises.md job order; tests/realdata-070-*.sh, tools/count-migrated.hl, tools/ref-params.py, tools/lambda-audit.pymre
  • 1ad19c8ctracker: re-vendor Hybriel master 8efba065 (#126 GC by bytes, #48 lambda parameters copy) (mission 070): bin/hybriel sha256 50361e95…, plugins core crypto data fetch fs http http1 mpackdb proc smtp time web; lambda audit: 13 lambdas change a passed record/list (11 through a local alias), no caller relies on it — unchanged; 319 read-only lambda parameters get & (no copy per call: /my/schedule 2.35 → 0.46 s, /my/unwatched 13.7 → 5.7 s on the real copy); /my/unwatched one merge sort instead of n² inserts; docker-compose HL_GC_BYTES=268435456; deploy.sh runs kinds.mjs + franchises.mjs too (default ports 8700–8710); tests/realdata-070.mjs; gates browser 325/0, kinds 32/0, franchises 50/0mre
  • 46b21389tracker (mission 070, conductor): the sync never destroys migrated data — the one-time summary step MOVES a copied summary to migratedSummary (marker summaries-moved.txt) instead of clearing it; a migrated record's first title/genres/homepage/tagline TMDB replaces → migratedTitle/migratedGenres/migratedHomepage/migratedTagline, a migrated season's/episode's title/summary → migratedTitle/migratedSummary (set once); tests/peek-shows.hl prints them; gate 325/0mre
  • 749019b0Merge t19 (tracker#19 franchises + timelines) into main (mission 070): conflicts README/STATUS/show.hl/project.hl/browser.mjs/faketmdb.mjs, both sides kept; franchise/timeline pages get #20's typed heading (Franchise | …, Timeline | …), their title links via titlePath (/movies|/series|/shows); the collection seed waits for repair, kinds and credits too; franchises.mjs URLs + 2 new checks; gates browser 323/0, kinds 32/0, franchises 50/0mre
  • daf49feaMerge t20 (tracker#20 typed headings + #21 series/shows split) into main (mission 070): conflicts README/STATUS/show.hl/project.hl/search.hl/components/search.hl/browser.mjs/faketmdb.mjs, both sides kept; clock order backfill → repair → kinds → credits; withDetailsFields stores tmdbType + kind; gates: browser.mjs URLs → /series|/movies, typed h1 selectors; kinds.mjs repair/credits off, fixture name = seed name; browser 323/0, kinds 32/0mre
  • 20e09d89Merge t18 (tracker#18 delta sync) into main (mission 070): conflicts README/STATUS/show.hl/project.hl/browser.mjs, both sides kept; pageShowOf summary = summaryOfmre
  • f83571c3tracker#18 (mission 067): daily sync by change lists — TMDB /tv|movie/changes (since the stored day, paged) + TVmaze /updates/shows → only our changed titles (followed: full step, unfollowed: light step — changed seasons, no TVmaze), full walk on first run / gap > 14 days / failed list; show record refreshed (title, tmdbSummary, tagline, status, genres …; renamed titles re-indexed); summary = the creator's own text (page: summary > tmdbSummary > tvmazeSummary), one-time clear of copied summaries (9,647 on the live copy); gate 261, tests/realdata-018*.mjs, README + STATUSmre
  • 1ed5457etracker#20 + #21 (mission 068): typed headings "<Type> | <name>" in type colours; TV titles split into Series (/series) and Shows (/shows) by TMDB type + Reality/Talk/News genres — kind stored by sync/import/adult backfill + new kind backfill (resumes), /movies/<slug>, /shows/<slug> of a series/movie → 301, /my/series + /my/shows, home 5 tiles + 3 rows, search/filmography labels; gates kinds 32 + browser 266, tests/realdata-068.mjs, tools/count-kinds.hl, docs/kinds.md, README + STATUSmre
  • f2b00674Merge t26 (tracker#26 + #28) into main (mission 062): short ids for every new person (castPersonId, guest route), guest stars stored on the title and created as people only when opened (/person/tmdb/<id>?show=<id> → 302), lean watch/follow clicks (showRow a small object, cast/crew from the slug, watches cached per user, face rows only after a season toggle); gate 311, tests/realdata-062.mjs, README + STATUSmre
  • 0553b51ftracker#19 (mission 066): franchises and timelines — tables, /franchises, /franchises/<slug>, /timelines/<slug> (Timeline | Release sort, series by last episode), the Prequel | Timeline | Sequel widget with the franchise above, the creator's editor, TMDB collection seed in the app (resumes, paced); gate tests/franchises.mjs 48/0 + browser.mjs 266/0, tests/realdata-066.mjs, docs/franchises.md, README + STATUSmre
  • fa1f9dfatracker#29 (mission 063): unwatched check muted grey outline + check (accent only on hover), watched stays solid — no code regression, the accent outline read as ticked; gate checks real checks visibly (computed style + screenshot pixel) on /my/unwatched, show, movie, /my/movies; gate 266, tests/realdata-063.mjs, README + STATUSmre
  • 10bb3f93tracker#28 (mission 061): full cast (all seasons, main cast by episodes, guest stars) + crew (created by, directed by, written by, screenplay, story, music) — stored by the details completion, the daily sync, the search import (one details request) and a background credits job (resumes, RSS limit); show page collapsed after 20 with client-side Show all; showBySlug via a slug map; gate 249, tests/realdata-028.mjs, README + STATUSmre
  • d8b12d67tracker#27 (mission 060): short ids for movies, series and persons — old 702 kept (data/old-short-ids.json), new random [a-z0-9]{5} unique across both, claimed at creation, background backfill (resumes), shown under poster/photo, /<shortId> → 301; gate 259, tests/realdata-060*, README + STATUSmre
  • 25a50bc4tracker#26 (mission 059): titles from a filmography are completed — on open (skeleton, step-wise face showComplete, no reload) and by the in-app details repair (resumes, TMDB-paced, series in parts); cast from TMDB credits; gate 231, tests/realdata-026.mjs, README + STATUSmre
  • f14db671tracker#22-#25 (mission 058): episode air dates, season check = all episodes watched, movie watched check (+ /my/movies count), /genres/<genre> pages (movies + series, newest first, paginated); gate 238, tests/realdata-058.mjs, README + STATUSmre
  • 1704ec45tracker#17 (mission 057): season caret down/up, skeleton rows while a season loads, sessionless showSeasonEpisodes face (no page re-mount), client-only close; gate 214, tests/realdata-057.mjs, README + STATUSmre
  • f2fe3e36mission 056: README + STATUS (merge, fixes, Hybriel 8590df63, real-data check), tests/realdata-056.mjs, tools/check-public-slugs.hlmre
  • f40c250emission 056: re-vendor hybriel master 8590df63 (#121, #122); an adult title's page is Not found for non-followers; gate: leave the page before stopping the servermre
  • 2b7fdd6cmission 056: signed-out header one row on phones ("Log in", nowrap), backfill skips adult titles' posters, gate checksmre
  • 2c53d5efMerge branch 't16-person' (tracker#16 person pages) into main; filmography shows only public titles (054 adult flag), gate race fix (backfill start line)mre