gitoriaLog in with ident

ident

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit9101716491017164ident 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 changemre91017164/missions/001-ident-mvp.md

3.9 KB

  1. # Mission 001 (old 003) — ident.worldapi.org MVP in Hybriel (ticket #2)
  2. One-shot worker. Architect (Claude Code on Byrodin) verifies your report.
  3. Read first: `/CONTAINERS/projects/antcolony/README.md`, `STATUS.md`, `loreana:/media/STORAGE/projects/tickets.worldapi.org/missions/001-tickets-mvp.md`
  4. and its result: the tickets app `loreana:/media/STORAGE/projects/tickets.worldapi.org`
  5. (README, STATUS, project.hl, store.hl, tests/) — same stack, same conventions, copy its setup.
  6. ## Where
  7. - Host Loreana (`ssh loreana`, fish login shell → `bash -c '…'` or script files).
  8. - New app folder: `/media/STORAGE/projects/ident.worldapi.org`. Vendor `bin/hybriel` + plugins
  9. exactly like the tickets app does (same binary, sha256 c51d163d…).
  10. - Hybriel repo `/media/STORAGE/projects/hybriel` READ ONLY. Reference for login:
  11. `projects/demo-social-network` (mail.hl, login_form.hl, signup_form.hl, store.hl, tests/).
  12. - Dev port **8351**, bind 0.0.0.0. Gate ports: pick your own range, not 8352 and not the social
  13. gate's 8600-8619 (another worker runs the tickets gate at the same time).
  14. ## What ident is
  15. Login for all worldapi apps (tickets, gitoria, …). Email one-time codes only, no passwords.
  16. Accent orange `--color-accent: #ce9178` (tokens: `/CONTAINERS/projects/layouts.worldapi.org/css/foundation/tokens.css`
  17. on Byrodin, read only; markup rules in `docs/conventions.md` there).
  18. ## Scope
  19. 1. Users: email (unique, lowercased), display name, created. Sign up = first login with a new email
  20. (ask for a name once). Codes: 6 digits, expire after 10 min, single use, max 5 attempts, rate
  21. limit sends per email.
  22. 2. Pages: `/` (signed out: login form; signed in: "signed in as …", sign out), code entry,
  23. name prompt for new users.
  24. 3. **Login for other apps — architect decision, redirect + code exchange (OAuth-code style,
  25. works across domains and dev ports):**
  26. - App sends browser to `ident/login?return=<url>&app=<name>`.
  27. - After successful OTP, ident redirects to `<return>?ident_code=<one-time code>` (code valid 60 s,
  28. single use). Only return URLs whose origin is on an allow list (config, for now: the tickets dev
  29. origins `http://100.77.141.84:8350`, `http://192.168.178.75:8350`, `http://127.0.0.1:8350`, plus
  30. whatever your test client uses). Unknown origin → error page, no redirect.
  31. - App's server calls `POST ident/api/exchange {code}` → `{ user: { id, email, name } }` or 400.
  32. - ident keeps its own session cookie so a second app login does not need a new OTP.
  33. - Write this down as a short spec in the app README ("How apps use ident").
  34. 4. Mail: do NOT send real mail in this mission. Use a file sink like the social app
  35. (`HL_SOCIAL_MAIL_SINK` pattern) configured via `.env`; tests read the code from the sink.
  36. Leave the hl:smtp path wired and configurable (SMTP_* env) for mail.byrod.in later.
  37. 5. A minimal test client (a tiny second hybriel app or a route in the gate) that proves the whole
  38. redirect → OTP → return → exchange flow end to end.
  39. Out of scope: wiring tickets to ident (next mission), deploy, Docker.
  40. ## Rules
  41. - No git. Don't touch other project folders (read the tickets app only). Only kill your own PIDs.
  42. Clean up every headless Chrome (`--disable-gpu`, GPU is wedged). Scratch in `.scratch/`.
  43. - A test is the whole process: real headless browser drives login, observe the result;
  44. plus API negative cases (expired/reused code, wrong code 5x, bad return origin, reused exchange code).
  45. - Strict API from day one: unknown/missing fields → 400 naming the field.
  46. - Hybriel bugs: don't fix in the repo; report with repro.
  47. - Leave the dev server RUNNING on 8351 (setsid/nohup, `server.pid`, `server.log`).
  48. - Deliver `README.md`, `STATUS.md`, `tests/browser.mjs`.
  49. ## Report (final answer, this structure)
  50. ```
  51. ## Done
  52. ## Verified (each: command run + observed output)
  53. ## Not verified / open
  54. ## Hybriel issues (repro, observed, expected)
  55. ## Questions for the creator
  56. ## Running (URL, PID, log path)
  57. ```

Branches

Latest commits

  • 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