gitoriaLog in with ident

notes

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit2149e9022149e902notes mission 002 (4/4): code order — README file map + same-output test, STATUS, LOG, report; tests/letcount.py, tests/realdata-baseline.mjs, tests/realdata-compare.pymre2149e902/STATUS.md

12.5 KB

  1. # STATUS — notes.worldapi.org
  2. ## 2026-10-03 — notes mission 002: code order (no behaviour change) — on main, NOT pushed, NOT deployed
  3. Commits 8cda541 (moves) · 3f8cb38 (topics, map, thin wrappers) · 47db4fc (`let`) · docs/tests. Layout: README "Files".
  4. - Counts (`python3 tests/letcount.py .`): root .hl 5 → 1; project.hl 183 → 91 lines; `let` 114 (71 never reassigned)
  5. → 34 (19 reassigned, 15 loop-bound, 0 never).
  6. - Gates (`.scratch/w085/gates.sh <label>`: browser `NOTES_GATE_PORT=8760 NOTES_GATE_IDENT_PORT=8761 NOTES_GATE_CHROME=8767-8769`,
  7. short-id-switch via a copy on 8760/8761): **50/0 + 18/0** before and after each step.
  8. - Same output (README "Test" → "Same output", live-data copy, 286 answers): old vs old 0 different; new vs old 0
  9. different except **4 intended**: `/login/failed` after a failed `/login/callback` in a browser WITH a session now shows
  10. the reason (before: "the login did not finish — try again"; the by-value `failed(req)` lost its session write). Fix =
  11. `&req`/`&server.sessions` (as tickets 010 / gitoria 002). Undo: pass `req` by value to `loginFailed` in lib/api.hl.
  12. - Removed dead notes#1 code (createNote, saveNote, noteRows, noteTextOf, subjectOf, rowOf, aliveOf — called nowhere).
  13. - A server without NOTES_STORAGE still reads `./storage/mpackdb` (40 notes, old and new).
  14. - Lessons: plain declarations in sibling blocks (`ed`, `after`, `cid`, `cp` in pushNote) work (conflict paths covered by the
  15. live-data run); the realdata run needs a fixed NOTES_PUBLIC_URL (the login href carries it) to compare two ports.
  16. - Deploy (architect): `./deploy.sh`; rsync does not delete → remove the old root `notes.hl users.hl jsoncheck.hl styles.hl`
  17. on Byrodin by hand afterwards. No data change.
  18. ## 2026-10-03 — antcolony mission 074: re-vendored Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4) — NOT deployed by me
  19. bin sha256 21059cc7…d77bdb, same plugins (old copy `.scratch/pre-074/` = 190aa11d). No app change. Gates: browser **50/0**,
  20. short-id-switch **18/0** (ports 8760–8769). Real-data copy (deleted), 0muh6o5a3kkd signed in:
  21. - 200 loads + 200 sync rounds: new 115 → 152 → 169 MB; old 116 → 192 → 217 MB.
  22. - 1000 loads + 1000 rounds: loads new 181 → 184 MB flat (old 187 → 212); rounds new 234 → 379 MB (old 274 → 465).
  23. - Split (2000 rounds each): pulls only new 177 → 210 MB (plateau); **saves only new 160 → 332 MB, old 164 → 344 MB** — the
  24. remaining growth is the save path (`notesTable.update`, mpackdb file only +1.3 MB per 1000 saves), unchanged by this vendor.
  25. Hybriel follow-up. Watch live RSS.
  26. ## 2026-10-02 — antcolony mission 072: re-vendored Hybriel master 190aa11d (GC correctness fc838894, #127) — NOT deployed by me
  27. bin sha256 860f5e61…0a23626, same plugins (old copy `.scratch/pre-072/` = 8efba065). No app change. Gates: browser **50/0**,
  28. short-id-switch **18/0** (`.scratch/w072/`). Live-data copy (40 notes, 26 alive): 200 Chrome loads + 200 sync rounds new
  29. 114 → 186 → 230 MB, old 124 → 222 → 277 MB; long run 1000+1000: 213 MB after loads, 486 MB after the sync rounds — the sync
  30. API still grows ~0.27 MB per round (pull of 26 notes + 1 push). Watch live RSS. Commands in README "Hybriel notes".
  31. ## 2026-10-02 — antcolony mission 069: re-vendored Hybriel master 8efba065 (#126 memory, #48 lambda copy) — NOT deployed
  32. `bin/hybriel` (sha256 ebf31876…5c0ad2a2, ReleaseFast from read-only `git archive master`) + the same 11 `plugins/` = master
  33. 8efba065; old copy (ff51cf46) + project.hl/README/STATUS in `.scratch/pre-069/`. No app code change.
  34. - Gate `NOTES_GATE_PORT=8720 NOTES_GATE_IDENT_PORT=8721 NOTES_GATE_CHROME=8722-8729 node tests/browser.mjs` → **50 passed,
  35. 0 failed** (`.scratch/w069/gate1.txt`; ident from its current folder, itself on 8efba065).
  36. - #48 audit: 56 lambdas (`.scratch/w069/lambdas.py`, `lambdas2.py`), none writes a parameter the caller relies on
  37. (failed/loginCallback alias `req.session`, then save it themselves; audience lambdas only read) → no `&` added.
  38. - #126 memory, live-data copy (1 user, 40 notes; deleted after), `.scratch/w069/memtest.mjs`: RSS boot / 200 Chrome loads /
  39. +200 sync rounds (full pull of 26 notes + 1 push each) / 5 s idle: new **124 / 220 / 287 / 287 MB**, old **97 / 902 / 1282
  40. / 1282 MB**. New with 1000 + 1000: 311 MB after loads, 598 MB after the API — still grows slowly (~0.1 MB per page load,
  41. ~0.3 MB per sync round), no plateau: watch live RSS after a deploy.
  42. ## 2026-10-01 — mission 001 (old 051) (notes#4, offline in pure Hybriel): STOPPED at Hybriel gaps — app unchanged
  43. notes-offline.js + sw.js stay (no file of the app changed). hl:web's `offline = [Notes]` was measured on a minimal repro
  44. (`.scratch/w051/repro/`: one page at `/` and `/p/:id`, a push-fed `count`; `node run.mjs`, ports 8762 + Chrome 8767-8769):
  45. (1) kept state is per URL — after 3 pushes on /p/1, offline `/` shows 0, /p/1 shows 3; (2) a param page never loaded as a
  46. document is "Unavailable offline" (a note made offline, or opened in-app, could not be reloaded); (3) kept state, kept
  47. documents (SSR seed = the notes) and the queue are not per user and cannot be forgotten at log out. Works: `__hlQueue`
  48. survives a reload (local edits can be re-applied from it), `e.preventDefault()` in an `on click` claims a link.
  49. Ticket texts: antcolony report w051. Gate on the unchanged app (8760/8761/8767-8769): **50 passed, 0 failed**.
  50. App-side design for when the tickets land (in the report): faces notesPut/notesDrop (statement form = queued), push
  51. `notesChanged(user, list)` with audience = same user, rows derived from notes + __hlQueue + this tab's unsent edits,
  52. server continuation rule (`by` = session tag, `from` = base) so queued saves of one device do not conflict with each other.
  53. ## 2026-10-01 — antcolony mission 048: re-vendored Hybriel master ff51cf46 — NOT deployed
  54. `bin/hybriel` (sha256 e70631f0…eff3471b, ReleaseFast from read-only `git archive master`) + `plugins/` (same 11 packages)
  55. = master ff51cf46 (#113, #115/#116, #118, client SVG namespace, hl:markdown #111); old copy (e6720b1f) in `.scratch/pre-048/`.
  56. No app change. Gate `NOTES_GATE_PORT=8732 NOTES_GATE_IDENT_PORT=8733 NOTES_GATE_CHROME=8734-8739 node tests/browser.mjs`
  57. → **50 passed, 0 failed**. Duplicate @id check (#113) on a copy of the LIVE storage (deleted after): users 1 row / 0 dup,
  58. notes 40 rows / 40 distinct / 0 dup (records = 4-byte LE total length incl. prefix + msgpack map with `id`; `<t>.id.txt` =
  59. `id,offset,len`). Workarounds: none for #115/#116/#118 in notes (module `static`s in notes.hl/users.hl are plain module
  60. members, not workarounds; the hand sort for hybriel#1 stays). SVG: no Hybriel-built SVG in the browser (md-editor.js toolbar
  61. icons are plain-JS innerHTML) → no namespace check added. `tests/short-id-switch.mjs` not run (fixed ports 8720/8721).
  62. ## 2026-10-01 — antcolony mission 046: installable app (PWA) + own icons — built, NOT deployed
  63. `project.hl`: `appThemeColor` = token `darker` (the header, rgb(15, 20, 25); rule changed from the accent mid-mission), `appBackgroundColor` = `dark`, `appIcons` (192/512,
  64. any + maskable), `appTouchIcon`, `appFavicon`; file routes for `icons/*` and a real `/favicon.ico` (was `direct ""`).
  65. hl:web serves `/__hl/manifest.webmanifest` and links it + apple-touch-icon + theme-color from every head.
  66. **No `offline = [...]`** on purpose: it would make hl:web register `/__hl/sw.js` for scope `/` over notes' own `/sw.js`
  67. (same scope, one replaces the other). Offline stays notes' own (sw.js + notes-offline.js, notes#2) until notes#4.
  68. Icon: a note page (folded corner, text lines) with a pencil writing the last line; `icons/icon.svg` source, PNGs via
  69. rsvg-convert (README "PWA"). Images looked at: Loreana `/tmp/w046-notes/` (icon-48/192/512, sheet.png, maskable-preview,
  70. gate-pwa-phone-offline.png). Gate: `NOTES_GATE_PORT=8720 NOTES_GATE_IDENT_PORT=8721 NOTES_GATE_CHROME=8722-8726 node
  71. tests/browser.mjs` → **50 passed, 0 failed** (42 old + 8 new: head links, manifest, icons, Chrome manifest/installability,
  72. one worker = /sw.js, offline reload of `/` shows the shell). Signed out there is no worker (notes-offline.js only
  73. registers it when signed in) — unchanged behaviour.
  74. ## 2026-09-26 — antcolony mission 039: ident#23 short ids — switch tool + gate, NOT deployed
  75. `users.hl`: the exchange answer is checked with the new `isIdentId` (lower-case letters/digits, 1–64) instead of
  76. `isHex(…, 64)`, which refused ident#23's short ids (`a68sz`) — without it nobody could log in after the switch (shown on
  77. tickets, whose code antcolony mission 039 could not change). New `tools/migrate-short-ids.hl` (users.identity old → short id via
  78. ident `POST /api/migrate-ids`, idempotent, never `finish`, prints `users seen / mapped / already short / unmapped /
  79. conflicts / failed`, key/secret from env only; non-zero exit on refusal/failed write/conflict). New gate
  80. `node tests/short-id-switch.mjs` (ports 8720/8721; old ident `ident.worldapi.org/.scratch/pre-023-ident` → data → copies →
  81. new ident → control copy = NEW empty user → tool twice → same user + same data, old session too): **18 passed, 0 failed**.
  82. `tests/browser.mjs` (ident#23 in the folder, ports 8730-8739): 42 passed, 0 failed. Docker proof of the runbook command
  83. (fake .env, copy): `.scratch/m039-docker-proof.sh`.
  84. Runbook (architect, one go for all four apps): Loreana `antcolony-docs/docs/short-id-switch.md`. Deploy this code BEFORE
  85. ident#23 (accepts old ids too). Not deployed.
  86. ## 2026-09-26 — antcolony mission 037: re-vendored Hybriel master e6720b1f
  87. `bin/hybriel` + `plugins/` = hybriel master e6720b1f (includes #103/#104, #105 f15a2f7f, #106, #94 c12065d8); old copy
  88. (13ef4f9b) in `.scratch/pre-037/`. No local patch, no app change. Gate `node tests/browser.mjs`: 42 passed, 0 failed.
  89. Dev server (`~/scratch-037/hashcheck.sh notes.worldapi.org NOTES /`, port 8720): `hl-runtime.js`, `web/client.js`, `app.css`
  90. all `?v=39f4c3bb5bd56621` (immutable), bare app.css no-cache, 0 unhashed refs. Not deployed.
  91. ## 2026-09-25 — antcolony mission 035: re-vendored Hybriel master 13ef4f9b
  92. `bin/hybriel` + `plugins/` from hybriel master 13ef4f9b (old copy `.scratch/pre-035/`). No local patch existed.
  93. Gate (`NOTES_GATE_PORT=8720 NOTES_GATE_IDENT_PORT=8721 NOTES_GATE_CHROME=8722-8729 node tests/browser.mjs`): 42 passed,
  94. 0 failed before, on 9d608332 (2 runs) and on 13ef4f9b. Dev server: `/__hl/app.css?v=<hash>`, `hl-runtime.js?v=`,
  95. `web/client.js?v=` (immutable); bare `/__hl/app.css` → no-cache. sw.js caches by full URL, so `?v=` needs no change.
  96. Not deployed (architect).
  97. ## Ticket notes#1 — notes with a sidebar and the Markdown editor (2026-09-25) — built, not deployed
  98. Built: ident login (button + selector), sidebar by subject / last edited first, note on the right in `<md-editor>`,
  99. New note, Delete note (with a question), live sidebar across tabs, phone layout (list, then note), storage in
  100. `storage/mpackdb/`. `node tests/browser.mjs`: 33 checks green (own ident copy, real Chrome, 390 and 1280 px
  101. screenshots in `.scratch/gate-*.png`) — login, create, heading via "# ", edit moves to top, second tab follows,
  102. reload and server restart keep everything, another user sees nothing and cannot save/delete, size limit,
  103. delete with "Keep", phone and desktop layout, logout. `./deploy.sh --dry-run --skip-tests --target <dir>` shows a
  104. clean file list (no storage, no `.env`).
  105. Not done / next: the first deploy is the architect's (README "First deploy"). Not built because the concept does not ask: JSON / Markdown API, search,
  106. folders, display names.
  107. ## Ticket notes#2 — notes offline, synced when back online (2026-09-25) — built, not deployed
  108. Built: the notes area is now client-side (`notes-offline.js`): IndexedDB copy per user, edits written there first, sent
  109. to `/api/notes`, pulled every 10 s / on online / on tab focus; `sw.js` keeps the page so a reload works offline; a note
  110. made offline gets its server id at the first push; conflicts: later edit wins, the other version is kept as a copy;
  111. deletes are tombstones; log out sends the unsent and wipes the browser copy. The old hl faces for save/create/delete
  112. and the `notesChanged` push are gone (old components in `.scratch/old/`). `node tests/browser.mjs`: 42 checks green —
  113. real Chrome, the server really stopped for "offline" (reload, edit, new note offline; back online → server and second
  114. device; two devices editing one note → copy; delete; other user; phone/desktop; log out wipes).
  115. Not done: the service worker needs https (worldapi.org has it); no update-available prompt; Back button does not step
  116. through notes (replaceState); a note is compared by its edit time from the device's clock (large clock skew can make
  117. the "wrong" version the copy — nothing is lost).

Branches

Latest commits

  • 2149e902notes mission 002 (4/4): code order — README file map + same-output test, STATUS, LOG, report; tests/letcount.py, tests/realdata-baseline.mjs, tests/realdata-compare.pymre
  • 47db4fc1notes mission 002 (3/4): code order — let only where reassigned (58 dropped; 34 left: 19 reassigned, 15 loop-bound); gates 50/0 + 18/0, live-data run = step 2mre
  • 3f8cb383notes mission 002 (2/4): code order — topics, map, thin wrappers: lib/util.hl, lib/notes(-helpers).hl, lib/users.hl (+userOfLoginCode, tagOf), lib/api(-helpers).hl; project.hl = map; login routes take &req/&sessions (failed-login reason now kept); dead notes#1 functions removed; gates 50/0 + 18/0mre
  • 8cda5412notes mission 002 (1/4): code order — files moved: lib/notes.hl, lib/users.hl, lib/jsoncheck.hl, components/styles.hl (imports only); gates 50/0 + 18/0, live-data run identicalmre
  • 47dad68bnotes: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); gates 50/0 + 18/0mre
  • a4a2b2aeantcolony#40: tracker missions moved too — references to them in missions/reports/LOG.md updatedmre
  • 3dea0ef2notes: Hybriel master 190aa11d (fc838894 GC correctness, #126 closure scopes, #127); gate 50/0mre
  • e27c7d71notes: Hybriel master 8efba065 (#126 GC by bytes, #48 lambda params copy; audit: nothing to fix; gate 50/0)mre
  • 124613b6antcolony#40: mission references point to the moved missionsmre
  • 1ca2f34dantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
  • 2bebebdanotes: Hybriel master ff51cf46 (re-vendor round)mre
  • 3eff126dnotes#3: installable app (manifest + own icon/favicon; notes' own sw.js kept)mre
  • 9883c540deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
  • eee693b8deploy.sh: never send .git or .gitignore to Byrodinmre
  • c8904061State of 2026-09-27, before the move to gitoriamre