gitoriaLog in with ident

ident

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Main branchmain5fdbb6b2ident mission 009: report — scratch folder notemremain/missions/007-ident-notifications-inbox.md

4.1 KB

  1. # Mission 007 (old 013) — ident 4/6: notifications API and inbox (ticket ident.worldapi.org#6)
  2. One-shot worker. The architect (Claude Code on Byrodin) verifies your report and deploys; you do NOT deploy
  3. and do NOT touch Byrodin.
  4. ## Read first — in this order
  5. 1. **`loreana:/media/STORAGE/projects/ident.worldapi.org/CONCEPT.md`** — the creator's concept, section
  6. "Notifications" and "Per-app page". Source of truth; don't add what it doesn't describe; where it is silent,
  7. make the smallest choice and list it under "Questions for the creator".
  8. 2. ident's `README.md` / `STATUS.md` (pieces 1–3 done and deployed; per-IP limit; `storage/mpackdb/`, `@id`).
  9. 3. Ticket: `GET https://tickets.worldapi.org/api/projects/ident.worldapi.org/tickets/6` (send a `user-agent`).
  10. 4. `/CONTAINERS/projects/antcolony/README.md` — conventions (UUID keys, storage/mpackdb, JSON writes + Markdown
  11. text fields), lessons.
  12. ## Hybriel (standard block)
  13. Read `/CONTAINERS/projects/antcolony/docs/hybriel-for-app-workers.md` first — known pitfalls (#31 forged face
  14. sessions, #25 faces get no request context, #40 open only COPIES of stores, hybriel#23 never pass client
  15. objects to put()), conventions, deploy notes. Report new Hybriel findings under "Hybriel issues"; do not edit it.
  16. ## Scope (piece 4 of 6 — NOT delivery)
  17. From the concept:
  18. - **Send API**: an app sends a notification in its name with its API key + app secret and the per-app identity id.
  19. A notification has **name**, **text**, optional **icon**, optional **action link**, and an **urgent** flag.
  20. Unknown identity for that app / wrong secret → refused. Strict JSON body.
  21. - **Notification kinds**: an app registers the kinds (by name) it sends, with its **preset channels**; a kind
  22. must be registered before the app can send **push** directly. Sending an unregistered name: decide the
  23. smallest consistent rule from the concept (e.g. allowed, default channel = daily mail) and list it.
  24. - **Inbox in ident**: the signed-in user sees their notifications (all identities), newest first, with
  25. identity, app, name, text, icon, action link, time; read/unread.
  26. - **Per-app page per identity**: when they registered in that app (the connection's created time), all that
  27. app's notification kinds with **push** and **email** switches, and on top **one override for all**.
  28. The app presets, the user's switches override. Store the effective settings.
  29. - **Delivery is OUT of scope** (piece 5/6: daily mail at 17:00, urgent immediately; piece 6/6: push). Store
  30. what delivery will need (channel per notification, delivered-or-not), but send nothing.
  31. ## Mail — IMPORTANT
  32. Never trigger an OTP on any live server. Your gate uses its own ident servers with `IDENT_MAIL_SINK` (as the
  33. existing gates do). **Do not read, print, copy or edit any `.env`.**
  34. ## Rules
  35. - Develop in `loreana:/media/STORAGE/projects/ident.worldapi.org` via a dev copy (`.scratch/dev-m013`), copy back
  36. when green (it is DEVELOPMENT only; live is on Byrodin; its `storage/` is a stale copy).
  37. - No git. Don't touch Byrodin. Don't POST to the live tickets server. Only kill your own PIDs. Clean up headless
  38. Chromes (`--disable-gpu`). Only open copies of mpackdb stores.
  39. - If any action is refused by the permission system, don't retry or work around it; report it.
  40. - A test is the whole process: real headless browsers + API: an app registers kinds, sends to an identity
  41. (normal + urgent, with/without icon/link), the user sees them in the inbox, marks read, opens the per-app
  42. page, flips switches + the override, the stored effective settings change; negatives: wrong secret, other
  43. app's identity id, unknown fields, forged face sessions (#31), another account can't see or change them.
  44. All five existing gates stay green. Screenshots at 390px and 1280px (inbox, per-app page), look at them.
  45. - Live data must survive the deploy: new tables only, no manual migration step if avoidable.
  46. - Update `README.md` ("How apps send notifications") and `STATUS.md`. Do NOT edit `CONCEPT.md`.
  47. ## Report (final answer, this structure)
  48. ```
  49. ## Done
  50. ## Verified (each: command run + observed output)
  51. ## Not verified / open
  52. ## Hybriel issues (repro, observed, expected)
  53. ## Questions for the creator
  54. ## Running (URL, PID, log path)
  55. ```

Branches

Latest commits

  • 5fdbb6b2ident mission 009: report — scratch folder notemre
  • 74235815ident mission 009 (4/4): docs (README files map + same-output test, STATUS, LOG), report, tests/letcount.py + realdata-baseline/comparemre
  • fe183516ident mission 009 (3/4): let only where reassigned — 293 never-reassigned lets are plain declarations; kept: reassigned, loop bodies, names of a file member, a name declared twice in one function; same outputmre
  • d2e7f91bident mission 009 (2/4): one lib file per topic (login, accounts, identities, apps, invites, selector, notify + helpers, util), function routes as thin wrappers in lib/api.hl, project.hl = the map; same outputmre
  • 91017164ident mission 009 (1/4): file moves — the root .hl files into lib/ (api.hl → lib/api-helpers.hl), styles.hl → components/styles.hl; imports adjusted, no other changemre
  • f8bdcbc2ident: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); all gates greenmre
  • ff78726cident: Hybriel master 190aa11d (fc838894 GC correctness, #127, #126 closure scopes); gates all greenmre
  • a3a7d21aident: Hybriel master 8efba065 (#126 GC by bytes, #48 lambda params copy); session-writing lambdas take &sessionmre
  • 98226b41antcolony#40: mission references point to the moved missionsmre
  • ff805b9aantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
  • 51a7bcdfident: Hybriel master 73267707 (#122); /code uses the new page() signature; pending address passed as parameter; once-checksmre
  • 836f644fident#24: installable app (manifest, service worker, data-free offline /start), own iconmre
  • 8bebbbf2deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
  • cc063ea2deploy.sh: never send .git or .gitignore to Byrodinmre
  • 81b15b7bState of 2026-09-27, before the move to gitoriamre