gitoriaLog in with ident

ident

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commitff805b9aff805b9aantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmreff805b9a/missions/008-ident-signin-remembers-code-step.md

3.2 KB

  1. # Mission 008 (old 032) — ident: the sign-in page remembers the code step (ident#20)
  2. Ticket: https://tickets.worldapi.org/projects/ident.worldapi.org/20 — the creator is blocked by this right now.
  3. ## The bug
  4. `components/home.hl`: after "Send me a code" (`on ask` → POST /api/code) the step lives only in client memory
  5. (`askCode = true`, `sentTo`). Any reload — a phone reloading the tab while the user reads the mail, a second tab, a
  6. socket reconnect that re-seeds — shows the email form again; the code cannot be entered. Same on `/` and `/signin/<rid>`.
  7. ## Build (properly — no shortcut)
  8. - The server remembers the pending sign-in **in the browser's session** (the webex session): the address a code was
  9. sent to. The page's seed then starts on the code step (`askCode` true, `sentTo` = that address) while a code for it
  10. is waiting and unused and not expired — on `/` and on `/signin/<rid>` (the rid stays in the URL, keep the app flow).
  11. - /api/code is a plain HTTP route and our vendored webex gives function routes NO session (hybriel#11, fixed only on
  12. Anton's branch — do not re-vendor). So after a successful POST, record it through a face that has the session
  13. (e.g. `emit server rememberPending(email)`), and the server must only accept it when a code for that address is
  14. really waiting (never a way to show a code step for an arbitrary address without a sent code — it holds no secret,
  15. but keep it honest). Use `realSession()` as the other faces do (hybriel#16 workaround).
  16. - Cleared on: successful sign-in, "Other address" (back), expiry. A wrong code keeps the step.
  17. - Keep the look; the only visible change: the code step survives reloads.
  18. ## Where and how
  19. - Workspace: `loreana:/media/STORAGE/projects/ident.worldapi.org` (ssh loreana, user mre). Read its README.md,
  20. STATUS.md, CONCEPT.md, DECISIONS.md first. No git (not a repo). Never read or print `.env`.
  21. - Hybriel pitfalls: `/CONTAINERS/projects/antcolony/docs/hybriel-for-app-workers.md` and
  22. `/CONTAINERS/projects/antcolony/missions/TEMPLATE-hybriel-block.md` — read both.
  23. - Never trigger an OTP on the live port or the dev server :8351 (it mails for real). Tests start their own servers
  24. (see README "Test"); use ports 8740-8749 for anything new.
  25. - Gates: all existing gates (README "Test") must still pass. Add a real-browser check to the gate that fits
  26. (`tests/browser.mjs` uses Chrome via cdp.mjs): request a code → RELOAD the page → the code field is there with the
  27. address → enter the code (read it from the test server's store/outbox as the gate does) → signed in. Also: reload
  28. after "Other address" → email form; `/signin/<rid>` + reload → code step, and the app flow still completes.
  29. - Do NOT deploy. Update ident README (test section) and STATUS.md, append a line to ident LOG.md if it has one.
  30. ## Report back
  31. What you changed (files), the gate results with counts, the exact new checks, anything you could not do.
  32. ## CHANGE (creator, 06:45): a real /code page
  33. Creator: "just make a /code where it checks a pending code". After "Send me a code" the browser goes to `/code`
  34. (app login: `/signin/<rid>/code`). The page checks the session for a pending, unused, unexpired code → code form with
  35. the address; none → back to the email form (`/` or `/signin/<rid>`). Reload of /code keeps the code form.

Branches

Latest commits

  • 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