ident
All repositories: gitoria
4.6 KB
# ident — concept (from the creator, 2026-09-24)ident is a login to ident itself (email one-time code). Everything else happens inside ident.ident, tickets and gitoria are PWAs; on the phone ident can register for push notifications.## In ident- **Account**: you log in to ident with an email code. **There is no registration**: the firstsuccessful OTP login creates the user with a default identity, then shows the name fields andclearly states they are optional.- **Time zone**: set to the browser's time zone at first ident use.- **Identities**: a user has a **default identity from the beginning**. If they don't createanother one, that one is always chosen. An identity has **no mandatory fields**; it can havenickname, firstname, lastname and an **avatar** (creator, 2026-09-24: apps show it, e.g. in comments). Inside ident it has an **identity name** — that one is shownin the selector.- **One id per app**: an identity gets a different id for every app, so ids are not transferablebetween apps.- **Apps**: **any ident user can register apps**. An app gets an **API key**. It uses one of two flows.- **The app never exposes the identity id** — it uses it server side only.- **Notifications**: apps never get the real email. To send a notification in an app's name you needthat app's API key and the identity id (the one for that app). The user reads them in ident'snotifications inbox.- A notification has: **name**, **text**, optional **icon**, optional **action link**. The action linkmay be any link; the icon may come from any URL (creator, 2026-09-24).- Channels: the **app presets** the channels, the **user can overwrite** them.- **Default: every notification goes to the daily mail**, sent at **17:00 in the user's time zone**.- An app that wants to send **pushes directly must first register that kind of notification**(by its name).- **Urgent** notifications are sent immediately: **push** if the user has registered a pushdevice, **email** otherwise — always within the user's switches (creator, 2026-09-24).- The daily mail at 17:00 in the user's time zone needs **time-zone support in Hybriel** (creator: "hybrielneeds time zone support") — ident does not ship its own zone rules.- **Per-app page**: for each app and identity the user has a page showing when they registeredin that app and all its notifications (by name), each with **push** and **email** switches, andon top **one override for all**.- **More fields**: if an app needs more data from the user, it asks for it itself when the userregisters with their ident id. ident does not hand out more.- **Later**: merge user accounts, move an identity to another account.- **Later**: ident hands over identity properties to the app **during the first handshake** (creator,2026-09-24: "ident does handover properties during the first handshake, just not yet").## Flow 1: login buttonThe app shows "login with ident", which sends you to ident and back.## Flow 2: identity selector- The app's page includes a script from ident, configured with the app's API key.- The script fetches from ident. If the requesting website is registered as an app in ident anduses its API key, ident answers with the identities of the logged-in ident user.- The selector is displayed: a shadow-DOM element in ident's design, which the target website canrestyle.- It first says "choose ident". When the user selects an identity, that is the login.- What happens then is up to the app: our apps just switch the frontend to logged in; othersmight do a reload.## Decided 2026-09-24 (architect proposal, accepted by the creator)- **Selector knows the website is already logged in**: the host tells the selector (it knows its ownsession), e.g. `<ident-selector logged-in>` / a property. The selector sets no cookie of its own.Logout on the website = host resets the selector.- **Server-side check of a selection**: selecting hands the script a one-time code; the website'sserver exchanges it with ident for the identity id. The API key sits in a public script, so servercalls (exchange, notifications) use a separate **app secret**.## In the appThe app creates its own user connected to that ident identity by storing the identity id (server side).## Open- **Client-only apps** (no server to keep the identity id): not figured out yet (creator).## Not thisThe mission-003 build (`{id, email, name}` handed to apps, no identities, apps as a config allowlist, no selector, no inbox) was built without this concept. Its email-code login to ident and thebutton redirect flow can be reused; the rest is rebuilt from this document.
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