calendar
All repositories: gitoria
16.6 KB
# STATUS## 2026-10-03 — antcolony mission 074: re-vendored Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4) — gates green, NOT deployed by mebin sha256 `21059cc7…d77bdb`, same plugins (old copy `.scratch/pre-074/` = 190aa11d). No app change. Gates (8760–8769): browser**78/0**, short-id-switch **18/0**. Real-data copy (deleted), 0muh8y8myb5z signed in, Chrome: 200 loads + 200 pagings new 194 → 211 →212 MB, 55 ms (old 194 → 214 → 215 MB, 85 ms); 1000 + 1000 new 211/212/213/214 (loads, every 250) then 216/217/218/218 MB(pagings) — flat; old 215 → 227 then 229 → 231 MB. Server logs clean.## 2026-10-02 — antcolony mission 072: re-vendored Hybriel master 190aa11d (GC correctness fc838894, #127) — gates green, NOT deployed by mebin sha256 `860f5e61…0a23626`, same 11 plugins (old copy `.scratch/pre-072/` = 8efba065). No app change. Gates: browser **78/0**,short-id-switch **18/0** (`.scratch/w072/`). Live-data copy, signed in: 200 loads + 200 month pagings new 194 → 214 → 215 MB,avg 48 ms (old 283 → 368 → 376 MB, 59 ms); 1000 + 1000: 229 → 233 MB — flat now (069's 8efba065 reached 528 MB).## 2026-10-02 — antcolony mission 069: re-vendored Hybriel master 8efba065 (#126 memory, #48 lambda copy) — gates green, NOT deployed`bin/hybriel` + `plugins/` (same 11 plugins) = hybriel master 8efba065 (sha256 `56b108f3…f4f201ea`), built read-only in`~/scratch-069-calendar` (removed). Old copy (ff51cf46) + project/components/tests/README/STATUS in `.scratch/pre-069/`. No app code change.- #48 audit (64 lambdas, `.scratch/w069/lambdas.py`, `lambdas2.py`): nothing needs `&`. `project.hl:43` failed / `:55` loginCallback change`req.session` as `s` and save it themselves; `reminders.hl` toReminders/toRows/withIndex/plan and `events.hl` build/createEvent/changeEventonly read their params and build new values. `.scratch/w069/probe48.hl`: new binary `copy: n=1 len=0`, old `n=2 len=1` (#48 is active).- Gates (ports 8720–8731): `CALENDAR_GATE_PORT=8720 CALENDAR_GATE_IDENT_PORT=8721 CALENDAR_GATE_CHROME=8722-8729 node tests/browser.mjs`→ **78 passed, 0 failed**; `CALENDAR_SWITCH_IDENT_PORT=8730 CALENDAR_SWITCH_PORT=8731 node tests/short-id-switch.mjs` → **18 passed, 0 failed**.- Memory (#126), live storage copy (1 user, 5 events, deleted), signed in by a session file, 200 loads of `/` + 200 month pagings (calLoad):old ff51cf46 boot 447 → 1597 after loads → 1620 MB after paging; new 8efba065 boot 283 → 370 → 384 MB. Long run (new, 1000 + 1000):488 / 528 MB — growth slows (~0.15 MB/load, ~0.04 MB/paging) but no flat plateau; watch live RSS after a deploy.## 2026-10-01 — antcolony mission 048: re-vendored Hybriel master ff51cf46 — gates green, NOT deployed`bin/hybriel` + `plugins/` (same 11 plugins) = hybriel master ff51cf46 (#113, #115/#116, #118, client SVG namespace, hl:markdown),built read-only in `.scratch/m048-build/`; old copy (e6720b1f) + old `components/calendar.hl` in `.scratch/pre-048/`.- Workaround removed: `components/calendar.hl` `validWindow`, `soonOf` no longer `static` (#115/#116); 2 new gate checks (bad windowrefused 'not a date', calLoad answers `soon`). Kept: module-level `static` helpers in dates/names/reminders/clock/events/users.hl(plain modules, not workarounds). No #118 detours, no SVG in the app.- `tests/short-id-switch.mjs`: ports overridable (`CALENDAR_SWITCH_IDENT_PORT`, `CALENDAR_SWITCH_PORT`).- Gates (ports 8732–8739): `CALENDAR_GATE_PORT=8732 CALENDAR_GATE_IDENT_PORT=8733 CALENDAR_GATE_CHROME=8734-8739 node tests/browser.mjs`→ **78 passed, 0 failed** (76 before the 2 new checks, also green on the new binary with `static`);`CALENDAR_SWITCH_IDENT_PORT=8732 CALENDAR_SWITCH_PORT=8733 node tests/short-id-switch.mjs` → **18 passed, 0 failed**.- Live data duplicate-@id check (#113, copy of Byrodin storage/ 2026-10-01, deleted afterwards): events 5 live rows / 0 duplicate ids,users 1 / 0, settings 0 / 0.## 2026-09-26 — ticket #8: the offline check was wrong, not the app (gate edited, not yet 3 clean runs in a row)`tests/browser.mjs`: "offline: … its reminder is planned" expected `>= 5`, but the counter only holds reminders still to come; the onesthat 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 is240 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"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:three clean runs in a row (run when the machine is quiet; `.scratch/run3.sh`).## 2026-09-26 — antcolony mission 039: ident#23 short ids — switch tool + gate, NOT deployed`users.hl`: the exchange answer is checked with the new `isIdentId` (lower-case letters/digits, 1–64) instead of`isHex(…, 64)`, which refused ident#23's short ids (`a68sz`) — without it nobody could log in after the switch (shown ontickets, whose code antcolony mission 039 could not change). New `tools/migrate-short-ids.hl` (users.identity old → short id viaident `POST /api/migrate-ids`, idempotent, never `finish`, prints `users seen / mapped / already short / unmapped /conflicts / failed`, key/secret from env only; non-zero exit on refusal/failed write/conflict). New gate`node tests/short-id-switch.mjs` (ports 8722/8723; old ident `ident.worldapi.org/.scratch/pre-023-ident` → data → copies →new ident → control copy = NEW empty user → tool twice → same user + same data, old session too): **18 passed, 0 failed**.`tests/browser.mjs` (ports 8730-8739): 74 passed, 1 failed — "offline: the event shows on its day … 4 reminders"; the SAMEfailure with the pre-039 code + the old ident (`.scratch/m039-gate-orig.out`), so not from this change (known flaky part, below).Runbook (architect, one go for all four apps): Loreana `antcolony-docs/docs/short-id-switch.md`. Deploy this code BEFOREident#23 (accepts old ids too). Not deployed.## 2026-09-26 — antcolony mission 037: re-vendored Hybriel master e6720b1f, LOCAL PATCH and timer workaround dropped`bin/hybriel` + `plugins/` = hybriel master e6720b1f (includes #103/#104, #105 f15a2f7f, #106 04b0fa3d, #94 c12065d8); old copy(13ef4f9b + the Accept-Language LOCAL PATCH) in `.scratch/pre-037/` (bin, plugins, src = calendar.hl, month-view.hl, tests).`plugins/` is byte-identical to master (`diff -rq`), no `LOCAL PATCH`/`pageLang` in it.- calendar#6: `components/calendar.hl` has `headers = null` → `requestLanguage` → `MonthView { acceptLanguage = requestLanguage }`.- calendar#4: the "function per timer" (`schedule(p, ms)`) is gone; `arm()` builds the closure inline (`let p` per pass, #106).- Gate `node tests/browser.mjs`: 70/0 before (old copy), **76 passed, 0 failed** after (6 new language checks: de / en first pagewith the browser itself in the other language, server HTML, names kept after next/next/prev). Negative control: the new code onthe OLD binary (scratch copy) → the notifications check FAILS (only the last reminder fired) → the gate guards #106.- Dev server (`~/scratch-037/hashcheck.sh calendar.worldapi.org CALENDAR /`, port 8720): `hl-runtime.js`, `web/client.js`,`app.css` all `?v=414caca04855c4be` (immutable), bare app.css no-cache; `/__hl/manifest.webmanifest` stays unhashed (framework).Curl: `Accept-Language: de` → `Mo Di …`, `en` → `Mon Tue …`, `fr` → `septembre 2026`, none → `09 2026` + dots. Not deployed.## 2026-09-26 — ticket #7: editing an event saved offline no longer makes a second copyThe page gives a new offline event its temporary id (`local-…`) BEFORE queuing the save; the server keeps it as `ref` on the event(`events.hl`: `saveEvent`, `realId`) and a later edit/delete with that id reaches the same event. Server logic tested (create, edit, deletewith a `local-` id → one event, edited title). Browser offline gate not re-run. Not deployed (architect).## 2026-09-26 — ticket #4: reminders and notifications, also offline — built, gate green (see the report for numbers)Calendar settings (default reminders, 1 hour before + the day before at 20:00), own reminders per event, WorldAPI `$reminders`; the page setsa timer per reminder of the next 7 days and shows the notification through the service worker; offline the timers and the stored`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 aserver push, ident#8); the notification is English only; an event saved offline keeps a temporary id until the page reloads (editing it againbefore that would save a second copy). Real Android/desktop notification not tested (headless Chrome only). Not deployed (architect).## 2026-09-26 — ticket #3: installable app (PWA) — DONE, with Hybriel's own supportTook over the half-done work (manifest, icons, theme colour). Now `project.hl` declares `appIcons`, `appThemeColor`,`appBackgroundColor` and `offline = [ Calendar ]`; hl:web writes the manifest link into every head and serves the manifest andthe service worker itself (`/__hl/manifest.webmanifest`, `/__hl/sw.js`). The own manifest file/route is gone (kept as`.scratch/manifest.webmanifest.old`); the icons stay in `icons/`. No JavaScript of ours, no framework patch.Gate: 48 passed, 0 failed (head links the manifest, Chrome `Page.getInstallabilityErrors` empty, service worker scope `/`).Not tested: a real install on Android/desktop (needs https on the live site), Firefox. Not deployed (architect).## 2026-09-25 — ticket #6, second session: names in the visitor's language on the FIRST pageThe server now reads the request's Accept-Language: `plugins/web/WebFramework.hl` has a LOCAL PATCH (`pageLang`; a component member`acceptLanguage = null` is constructed with it — a Hybriel gap, reported; KEEP IT when re-vendoring). `components/month-view/names.hl`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(paging never switches). Another language → neutral names until the first pointer/key, then the browser's Intl (as before).Gate 45 passed, 0 failed with Chrome `--lang=de` and `--lang=en-US` (new check: names present before any mouse move).## 2026-09-25 — ticket #6: names no longer switch languageThe server can't know the browser's language (page components get no request headers), so it no longer guesses English: the first render showslanguage-neutral names (month number, dots, ‹ ›), and the browser fills in its own language on the first pointer / focus / touch and keeps itwhile paging. Gate: 44 passed, 0 failed (the gate now moves the mouse first, like a user). Not deployed (architect).## 2026-09-25 — ticket #5, second session: re-checked on the current folder (after the Hybriel update)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`.## 2026-09-25 — ticket #5: pure-Hybriel month view, no month-view.js`components/month-view/month-view.hl` is now the components.hybriel.worldapi.org month view (browser today / language read by aHybriel handler on the first pointer / focus / touch, `browserEnv()`), with the calendar's events and editor carried over; the timezone name comes from `Intl` there too. `month-view.js`, its route, its script tag and the hidden `#month-view-env` input are gone:the only hand-written JS left is `login.js` (ident bridge). The month rules moved from `styles.hl` into the component's own `Style`(token `var()`s with fallbacks, as in the components repo; `styles.hl` sets `--color-accent`). The form dates start empty (were `= today`)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(after 7 passed), not reproduced in 18 more. Not deployed (architect).## 2026-09-25 — antcolony mission 035: re-vendored Hybriel master 13ef4f9b`bin/hybriel` + `plugins/` from hybriel master 13ef4f9b (old copy `.scratch/pre-035/`). No local patch existed.Dev server: `/__hl/app.css?v=<hash>`, `hl-runtime.js?v=`, `web/client.js?v=` (immutable); bare `/__hl/app.css` → no-cache.Gate (`CALENDAR_GATE_PORT=8720 CALENDAR_GATE_IDENT_PORT=8721 CALENDAR_GATE_CHROME=8722-8729 node tests/browser.mjs`):44 passed, 0 failed in 3 of 7 runs (9d608332 + 13ef4f9b), else 26 passed, 1 failed ("three all-day days"); the OLD binary(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,NOT the re-vendor — cause found, not fixed (no feature work in 035):** `month-view.js` re-sends `#month-view-env` whenever hl:webre-creates that input (seen after a save); `monthEnv` assigns `today`, and `fStartDate`/`fEndDate` are declared `= today`, sothey re-derive to today in the middle of an open editor (seen: day 20 clicked → form shows today; the end date typed isoverwritten). Fix idea: keep the form dates in monthEnv (save/restore) or don't initialise them from `today`; better, dropmonth-view.js (no-JS rule). The PWA of ticket #3 can now use hl:web's project.hl settings (hybriel #95–#97) — not done.Not deployed (architect).## 2026-09-25 — ticket #3: installable app (PWA) — HALF DONE, waits for HybrielDone in Hybriel/JSON only: web manifest (`/manifest.webmanifest`: standalone, start `/`, dark background, 192/512 icons any +maskable), icons (`icons/`), theme colour (`meta` in project.hl). The first attempt's `sw.js` and `pwa.js` were hand-writtenJavaScript and are removed (kept in `.scratch/removed-js/` for reference only).Missing, both Hybriel gaps: (1) hl:web writes no `<link rel="manifest">` into the head (a `link` in the body View is notused by Chrome: `Page.getInstallabilityErrors` → `no-manifest`); (2) Hybriel has no way to write a service worker file(needs its own script file at `/sw.js`, plus offline caching). Without them Chrome does not offer "Install".Gate: `node tests/browser.mjs` → 44 passed, 0 failed (manifest fields, icons real PNGs, theme colour). The events part wasflaky once in a while (one failed run in three, not reproduced on re-run).## 2026-09-25 — ticket #2: login with ident, private eventsBuilt: ident login (button + identity selector, as in notes), the events table (WorldAPI Event records), click a day → editor(title, at a time / all day, from–to, place, notes), click an event → edit / delete, events on every day they cover, pagingloads the visible six weeks. Every server face refuses without a login and reaches only the owner's events.Gate: `node tests/browser.mjs` → 41 passed, 0 failed (own ident copy; signed out: no editor, faces refuse; login by thecallback with a real one-time code; add / reload / edit / move / all-day of three days / end-before-start refused / paging /log out / second identity sees nothing and cannot change or delete / delete / phone width no overflow / no console errors).A store reopened in a fresh process still holds the events; the record on disk carries the `$` keys.Not deployed (architect). Not tested: ident's own button page in the browser (the gate takes the code from ident's selectorAPI and hits the callback, the same URL the button returns to), a real Byrodin container, Firefox, the real ident key.Workarounds (Hybriel): a nested `for` does not repaint when the outer list is reassigned (#86, fixed on a branch only) →a day has four fixed chips; a form field bound to `f.title` (member object) did not follow a copy into `f` → scalarmembers `fTitle` … as in ident; a member arrow function is not callable from a face → `static`; a face that crashesnever answers the page (the call just hangs).## 2026-09-25 — ticket #1: month viewBuilt the app (Hybriel/hl:web, Dockerfile, docker-compose on port 45005, deploy.sh, browser gate) and put the vendored monthview on `/`. Gate: `node tests/browser.mjs` → 10 passed, 0 failed (server render of 42 days with one today; title in thebrowser language; today marked by the browser's date; next / prev; Feb 2028 = 29 days starting Tuesday; Dec 2027 startsWednesday; no console errors; no overflow at 390 px). `./deploy.sh --dry-run --target <local dir>` passes the gate.Not deployed (architect). Not tested: a real Byrodin container, Firefox. No data, no login yet (tickets #2–#4).The old vendored `plugins/webex` was removed (hl:web is used).## Browser gate (ticket #8)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
- mainmain branch
Latest commits
- d6c59290calendar: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); gates 78/0 + 18/0mre
- 7bd0337ccalendar: Hybriel master 190aa11d (fc838894 GC correctness, #126 closure scopes, #127); gates 78/0 + 18/0mre
- ff41310ccalendar: Hybriel master 8efba065 (#126 memory, #48 lambda copy; audit: no & needed)mre
- 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