gitoriaLog in with ident

calendar

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit14ba08c714ba08c7antcolony#40: mission references point to the moved missionsmre14ba08c7/STATUS.md

14.0 KB

  1. # STATUS
  2. ## 2026-10-01 — antcolony mission 048: re-vendored Hybriel master ff51cf46 — gates green, NOT deployed
  3. `bin/hybriel` + `plugins/` (same 11 plugins) = hybriel master ff51cf46 (#113, #115/#116, #118, client SVG namespace, hl:markdown),
  4. built read-only in `.scratch/m048-build/`; old copy (e6720b1f) + old `components/calendar.hl` in `.scratch/pre-048/`.
  5. - Workaround removed: `components/calendar.hl` `validWindow`, `soonOf` no longer `static` (#115/#116); 2 new gate checks (bad window
  6. refused 'not a date', calLoad answers `soon`). Kept: module-level `static` helpers in dates/names/reminders/clock/events/users.hl
  7. (plain modules, not workarounds). No #118 detours, no SVG in the app.
  8. - `tests/short-id-switch.mjs`: ports overridable (`CALENDAR_SWITCH_IDENT_PORT`, `CALENDAR_SWITCH_PORT`).
  9. - Gates (ports 8732–8739): `CALENDAR_GATE_PORT=8732 CALENDAR_GATE_IDENT_PORT=8733 CALENDAR_GATE_CHROME=8734-8739 node tests/browser.mjs`
  10. → **78 passed, 0 failed** (76 before the 2 new checks, also green on the new binary with `static`);
  11. `CALENDAR_SWITCH_IDENT_PORT=8732 CALENDAR_SWITCH_PORT=8733 node tests/short-id-switch.mjs` → **18 passed, 0 failed**.
  12. - Live data duplicate-@id check (#113, copy of Byrodin storage/ 2026-10-01, deleted afterwards): events 5 live rows / 0 duplicate ids,
  13. users 1 / 0, settings 0 / 0.
  14. ## 2026-09-26 — ticket #8: the offline check was wrong, not the app (gate edited, not yet 3 clean runs in a row)
  15. `tests/browser.mjs`: "offline: … its reminder is planned" expected `>= 5`, but the counter only holds reminders still to come; the ones
  16. that already fired are gone, so 4 is right (Bus to the lake 1 + Own reminders 2 + the new one). Now `>= 4`; the notification-on-time wait is
  17. 240 s (was 150 s). Runs on ports 8710-8719: 75/0, 75/0, then one run each with a CDP timeout, a missed notification, a 10 s "next month"
  18. wait — all on a loaded machine (other workers), each in a DIFFERENT place; the offline check passed in every run that reached it. Still open:
  19. three clean runs in a row (run when the machine is quiet; `.scratch/run3.sh`).
  20. ## 2026-09-26 — antcolony mission 039: ident#23 short ids — switch tool + gate, NOT deployed
  21. `users.hl`: the exchange answer is checked with the new `isIdentId` (lower-case letters/digits, 1–64) instead of
  22. `isHex(…, 64)`, which refused ident#23's short ids (`a68sz`) — without it nobody could log in after the switch (shown on
  23. tickets, whose code antcolony mission 039 could not change). New `tools/migrate-short-ids.hl` (users.identity old → short id via
  24. ident `POST /api/migrate-ids`, idempotent, never `finish`, prints `users seen / mapped / already short / unmapped /
  25. conflicts / failed`, key/secret from env only; non-zero exit on refusal/failed write/conflict). New gate
  26. `node tests/short-id-switch.mjs` (ports 8722/8723; old ident `ident.worldapi.org/.scratch/pre-023-ident` → data → copies →
  27. new ident → control copy = NEW empty user → tool twice → same user + same data, old session too): **18 passed, 0 failed**.
  28. `tests/browser.mjs` (ports 8730-8739): 74 passed, 1 failed — "offline: the event shows on its day … 4 reminders"; the SAME
  29. failure with the pre-039 code + the old ident (`.scratch/m039-gate-orig.out`), so not from this change (known flaky part, below).
  30. Runbook (architect, one go for all four apps): Loreana `antcolony-docs/docs/short-id-switch.md`. Deploy this code BEFORE
  31. ident#23 (accepts old ids too). Not deployed.
  32. ## 2026-09-26 — antcolony mission 037: re-vendored Hybriel master e6720b1f, LOCAL PATCH and timer workaround dropped
  33. `bin/hybriel` + `plugins/` = hybriel master e6720b1f (includes #103/#104, #105 f15a2f7f, #106 04b0fa3d, #94 c12065d8); old copy
  34. (13ef4f9b + the Accept-Language LOCAL PATCH) in `.scratch/pre-037/` (bin, plugins, src = calendar.hl, month-view.hl, tests).
  35. `plugins/` is byte-identical to master (`diff -rq`), no `LOCAL PATCH`/`pageLang` in it.
  36. - calendar#6: `components/calendar.hl` has `headers = null` → `requestLanguage` → `MonthView { acceptLanguage = requestLanguage }`.
  37. - calendar#4: the "function per timer" (`schedule(p, ms)`) is gone; `arm()` builds the closure inline (`let p` per pass, #106).
  38. - Gate `node tests/browser.mjs`: 70/0 before (old copy), **76 passed, 0 failed** after (6 new language checks: de / en first page
  39. with the browser itself in the other language, server HTML, names kept after next/next/prev). Negative control: the new code on
  40. the OLD binary (scratch copy) → the notifications check FAILS (only the last reminder fired) → the gate guards #106.
  41. - Dev server (`~/scratch-037/hashcheck.sh calendar.worldapi.org CALENDAR /`, port 8720): `hl-runtime.js`, `web/client.js`,
  42. `app.css` all `?v=414caca04855c4be` (immutable), bare app.css no-cache; `/__hl/manifest.webmanifest` stays unhashed (framework).
  43. Curl: `Accept-Language: de` → `Mo Di …`, `en` → `Mon Tue …`, `fr` → `septembre 2026`, none → `09 2026` + dots. Not deployed.
  44. ## 2026-09-26 — ticket #7: editing an event saved offline no longer makes a second copy
  45. The page gives a new offline event its temporary id (`local-…`) BEFORE queuing the save; the server keeps it as `ref` on the event
  46. (`events.hl`: `saveEvent`, `realId`) and a later edit/delete with that id reaches the same event. Server logic tested (create, edit, delete
  47. with a `local-` id → one event, edited title). Browser offline gate not re-run. Not deployed (architect).
  48. ## 2026-09-26 — ticket #4: reminders and notifications, also offline — built, gate green (see the report for numbers)
  49. Calendar settings (default reminders, 1 hour before + the day before at 20:00), own reminders per event, WorldAPI `$reminders`; the page sets
  50. a timer per reminder of the next 7 days and shows the notification through the service worker; offline the timers and the stored
  51. `soon` keep working, and an event saved offline is queued (hl:web emit queue) and set at once. Not built: waking a CLOSED app (needs a
  52. server push, ident#8); the notification is English only; an event saved offline keeps a temporary id until the page reloads (editing it again
  53. before that would save a second copy). Real Android/desktop notification not tested (headless Chrome only). Not deployed (architect).
  54. ## 2026-09-26 — ticket #3: installable app (PWA) — DONE, with Hybriel's own support
  55. Took over the half-done work (manifest, icons, theme colour). Now `project.hl` declares `appIcons`, `appThemeColor`,
  56. `appBackgroundColor` and `offline = [ Calendar ]`; hl:web writes the manifest link into every head and serves the manifest and
  57. the service worker itself (`/__hl/manifest.webmanifest`, `/__hl/sw.js`). The own manifest file/route is gone (kept as
  58. `.scratch/manifest.webmanifest.old`); the icons stay in `icons/`. No JavaScript of ours, no framework patch.
  59. Gate: 48 passed, 0 failed (head links the manifest, Chrome `Page.getInstallabilityErrors` empty, service worker scope `/`).
  60. Not tested: a real install on Android/desktop (needs https on the live site), Firefox. Not deployed (architect).
  61. ## 2026-09-25 — ticket #6, second session: names in the visitor's language on the FIRST page
  62. The server now reads the request's Accept-Language: `plugins/web/WebFramework.hl` has a LOCAL PATCH (`pageLang`; a component member
  63. `acceptLanguage = null` is constructed with it — a Hybriel gap, reported; KEEP IT when re-vendoring). `components/month-view/names.hl`
  64. holds month/weekday names for en, de, fr, es, it, nl, pt (same as Intl); the first render writes them and the browser keeps them
  65. (paging never switches). Another language → neutral names until the first pointer/key, then the browser's Intl (as before).
  66. Gate 45 passed, 0 failed with Chrome `--lang=de` and `--lang=en-US` (new check: names present before any mouse move).
  67. ## 2026-09-25 — ticket #6: names no longer switch language
  68. The server can't know the browser's language (page components get no request headers), so it no longer guesses English: the first render shows
  69. language-neutral names (month number, dots, ‹ ›), and the browser fills in its own language on the first pointer / focus / touch and keeps it
  70. while paging. Gate: 44 passed, 0 failed (the gate now moves the mouse first, like a user). Not deployed (architect).
  71. ## 2026-09-25 — ticket #5, second session: re-checked on the current folder (after the Hybriel update)
  72. No code change needed: `node tests/browser.mjs` → 44 passed, 0 failed in 7 of 7 runs (signed-out login button shows, no classList crash). Only hand-written JS: `login.js`.
  73. ## 2026-09-25 — ticket #5: pure-Hybriel month view, no month-view.js
  74. `components/month-view/month-view.hl` is now the components.hybriel.worldapi.org month view (browser today / language read by a
  75. Hybriel handler on the first pointer / focus / touch, `browserEnv()`), with the calendar's events and editor carried over; the time
  76. zone name comes from `Intl` there too. `month-view.js`, its route, its script tag and the hidden `#month-view-env` input are gone:
  77. the only hand-written JS left is `login.js` (ident bridge). The month rules moved from `styles.hl` into the component's own `Style`
  78. (token `var()`s with fallbacks, as in the components repo; `styles.hl` sets `--color-accent`). The form dates start empty (were `= today`)
  79. so nothing re-derives them mid-edit; no re-sent env any more. Gate: 44 passed, 0 failed in 18 of 19 runs; one run failed early
  80. (after 7 passed), not reproduced in 18 more. Not deployed (architect).
  81. ## 2026-09-25 — antcolony mission 035: re-vendored Hybriel master 13ef4f9b
  82. `bin/hybriel` + `plugins/` from hybriel master 13ef4f9b (old copy `.scratch/pre-035/`). No local patch existed.
  83. Dev server: `/__hl/app.css?v=<hash>`, `hl-runtime.js?v=`, `web/client.js?v=` (immutable); bare `/__hl/app.css` → no-cache.
  84. Gate (`CALENDAR_GATE_PORT=8720 CALENDAR_GATE_IDENT_PORT=8721 CALENDAR_GATE_CHROME=8722-8729 node tests/browser.mjs`):
  85. 44 passed, 0 failed in 3 of 7 runs (9d608332 + 13ef4f9b), else 26 passed, 1 failed ("three all-day days"); the OLD binary
  86. (scratch copy with `.scratch/pre-035/`) fails the same way: 2 of 5 runs green, else 18 passed, 1 failed ("event shows on its day"). **Flaky events part,
  87. NOT the re-vendor — cause found, not fixed (no feature work in 035):** `month-view.js` re-sends `#month-view-env` whenever hl:web
  88. re-creates that input (seen after a save); `monthEnv` assigns `today`, and `fStartDate`/`fEndDate` are declared `= today`, so
  89. they re-derive to today in the middle of an open editor (seen: day 20 clicked → form shows today; the end date typed is
  90. overwritten). Fix idea: keep the form dates in monthEnv (save/restore) or don't initialise them from `today`; better, drop
  91. month-view.js (no-JS rule). The PWA of ticket #3 can now use hl:web's project.hl settings (hybriel #95–#97) — not done.
  92. Not deployed (architect).
  93. ## 2026-09-25 — ticket #3: installable app (PWA) — HALF DONE, waits for Hybriel
  94. Done in Hybriel/JSON only: web manifest (`/manifest.webmanifest`: standalone, start `/`, dark background, 192/512 icons any +
  95. maskable), icons (`icons/`), theme colour (`meta` in project.hl). The first attempt's `sw.js` and `pwa.js` were hand-written
  96. JavaScript and are removed (kept in `.scratch/removed-js/` for reference only).
  97. Missing, both Hybriel gaps: (1) hl:web writes no `<link rel="manifest">` into the head (a `link` in the body View is not
  98. used by Chrome: `Page.getInstallabilityErrors` → `no-manifest`); (2) Hybriel has no way to write a service worker file
  99. (needs its own script file at `/sw.js`, plus offline caching). Without them Chrome does not offer "Install".
  100. Gate: `node tests/browser.mjs` → 44 passed, 0 failed (manifest fields, icons real PNGs, theme colour). The events part was
  101. flaky once in a while (one failed run in three, not reproduced on re-run).
  102. ## 2026-09-25 — ticket #2: login with ident, private events
  103. Built: ident login (button + identity selector, as in notes), the events table (WorldAPI Event records), click a day → editor
  104. (title, at a time / all day, from–to, place, notes), click an event → edit / delete, events on every day they cover, paging
  105. loads the visible six weeks. Every server face refuses without a login and reaches only the owner's events.
  106. Gate: `node tests/browser.mjs` → 41 passed, 0 failed (own ident copy; signed out: no editor, faces refuse; login by the
  107. callback with a real one-time code; add / reload / edit / move / all-day of three days / end-before-start refused / paging /
  108. log out / second identity sees nothing and cannot change or delete / delete / phone width no overflow / no console errors).
  109. A store reopened in a fresh process still holds the events; the record on disk carries the `$` keys.
  110. Not deployed (architect). Not tested: ident's own button page in the browser (the gate takes the code from ident's selector
  111. API and hits the callback, the same URL the button returns to), a real Byrodin container, Firefox, the real ident key.
  112. Workarounds (Hybriel): a nested `for` does not repaint when the outer list is reassigned (#86, fixed on a branch only) →
  113. a day has four fixed chips; a form field bound to `f.title` (member object) did not follow a copy into `f` → scalar
  114. members `fTitle` … as in ident; a member arrow function is not callable from a face → `static`; a face that crashes
  115. never answers the page (the call just hangs).
  116. ## 2026-09-25 — ticket #1: month view
  117. Built the app (Hybriel/hl:web, Dockerfile, docker-compose on port 45005, deploy.sh, browser gate) and put the vendored month
  118. view on `/`. Gate: `node tests/browser.mjs` → 10 passed, 0 failed (server render of 42 days with one today; title in the
  119. browser language; today marked by the browser's date; next / prev; Feb 2028 = 29 days starting Tuesday; Dec 2027 starts
  120. Wednesday; no console errors; no overflow at 390 px). `./deploy.sh --dry-run --target <local dir>` passes the gate.
  121. Not deployed (architect). Not tested: a real Byrodin container, Firefox. No data, no login yet (tickets #2–#4).
  122. The old vendored `plugins/webex` was removed (hl:web is used).
  123. ## Browser gate (ticket #8)
  124. Offline count check is "at least 4" pending reminders; check waits widened (waitFor 30 s, CDP call 60 s) for loaded machines. 3 clean runs in a row: 76 passed, 0 failed. Run with CALENDAR_GATE_PORT/IDENT_PORT/CHROME env inside the worker port range (see .scratch/run3.sh).

Branches

Latest commits

  • 14ba08c7antcolony#40: mission references point to the moved missionsmre
  • 99c73346antcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
  • 76edaa62calendar: Hybriel master ff51cf46 (re-vendor round, static workaround removed)mre
  • 90a3fc2cdeploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
  • 6722b72ddeploy.sh: never send .git or .gitignore to Byrodinmre
  • be099807State of 2026-09-27, before the move to gitoriamre