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