ident
All repositories: gitoria
5.2 KB
# Mission 004 (old 007) — ident 3/6: identity selector (ticket #26)One-shot worker. The architect (Claude Code on Byrodin) verifies your report, then the creator tests.## Read first — in this order1. **`loreana:/media/STORAGE/projects/ident.worldapi.org/CONCEPT.md`** — the creator's concept, sourceof truth. Section "Flow 2: identity selector" and "Decided 2026-09-24" are this mission. Do not addfeatures it does not describe; where it is silent, make the smallest choice and list it under"Questions for the creator".2. The app's `README.md` and `STATUS.md` (pieces 1 and 2 done and confirmed by the creator; piece 2 =apps, API key + secret, per-app identity ids, login button, `POST /api/exchange`).3. `/CONTAINERS/projects/antcolony/README.md` (section "Lessons learned").4. Ticket: `GET http://100.77.141.84:8350/api/tickets/26`.## Hybriel (standard block)Read `/CONTAINERS/projects/antcolony/docs/hybriel-for-app-workers.md` first — it lists which docs totrust, the known pitfalls with workarounds (#31 forged face sessions, #36 face names are global), andthe open hybriel tickets. Report new Hybriel findings under "Hybriel issues"; do not edit that guide.## Where- Host Loreana (`ssh loreana`, fish login shell → `bash -c '…'` or script files).- App: `/media/STORAGE/projects/ident.worldapi.org`, dev port **8351**; test app `testapp/` on **8354**.Hybriel repo READ ONLY.## Scope (piece 3 of 6)From the concept:- The app's page includes **a script from ident, configured with the app's public API key**.- The script **fetches from ident** (with credentials). ident answers with the identities of thesigned-in ident user **only if** the request comes from one of that app's registered origins andcarries its API key (CORS: exact origin + credentials, never `*`).- The selector is a **shadow-DOM element in ident's design** that the host page **can restyle**(document how: CSS custom properties and/or `::part`).- It first says **"choose ident"**. **Selecting an identity is the login**: ident hands the script a**one-time code** (same rules as the button flow's code), the script gives it to the host page (e.g. aDOM event); the **host's server exchanges it** with `POST /api/exchange` (key + secret) → per-app id.- **The host tells the selector it is logged in** (`logged-in` attribute / property). The selector setsno cookie of its own. Logout on the website = the host resets the selector.- What happens after login is up to the app: **the test app switches its frontend to logged inwithout a reload** (our apps' behaviour).Where the concept is silent (make the smallest choice, list it): what the selector shows when the useris not signed in to ident (e.g. a link into the existing login button flow); what it shows in thelogged-in state; how the host restyles it.Extend the test app (`testapp/`) to use the selector, keeping its login button too.**Out of scope**: notifications (#27+), foreign-domain / Safari-Firefox third-party cases (all ourapps are same-site; dev ports on one IP count as same-site too), client-only apps.Also, only if you can read it without being refused: fix the 2 obsolete checks in the piece-1 gate`tests/browser.mjs` (ticket #37 — they expect `/login` and `/api/exchange` to be gone; replace themwith checks of the current behaviour). If reading it is refused, leave it and say so.## Mail — IMPORTANT (unchanged)The dev server on :8351 sends **real mail**. Never trigger an OTP on :8351; don't run`tests/dev-smoke.mjs` against it. Your gate starts its own servers with `IDENT_MAIL_SINK`.**Do not read, print, copy or edit any `.env`.** At the end restart :8351 (only the PID in`server.pid`) and the test app (only the PID in `testapp/testapp.pid`) and check both answer 200without logging in.## DataThe dev store holds the creator's account and a registered app. Back up `storage/` (and `.sessions/`)to `.scratch/storage-backup-<ts>/` before the restart; migrate, never wipe. Verify afterwards(read-only, on a copy) that accounts, identities, apps and connections are still there. The testapp's own `testapp/storage/` holds the creator's key/secret setup — keep it.## Rules- No git. Don't touch other project folders. Only kill your own PIDs or the ones in ident's pid files.Clean up headless Chromes (`--disable-gpu`). Scratch in `.scratch/`.- Do NOT POST to the live tickets server (:8350).- A test is the whole process: real headless browsers — signed in to ident on the ident origin, thenthe test app's page on its own origin shows the selector with the right identities, select → code →host exchange → test app switches to logged in without reload → `logged-in` state → host logoutresets. Negatives: unregistered origin / wrong key gets no identities; signed out of ident gets noidentities; forged face sessions (#31); code reuse; a restyle by the host actually changes the look.- Strict API as before. Screenshots at 390px and 1280px (selector closed and open), look at them.- Update `README.md` ("How apps use ident": the selector snippet a host needs) 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
- 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