ident
All repositories: gitoria
4.8 KB
# Mission 006 (old 010) — ident per-IP limit + deploy scripts for ident and ticketsOne-shot worker. The architect (Claude Code on Byrodin) verifies your report and does the first realdeploy to Byrodin himself. You do NOT touch Byrodin.## Read first1. `loreana:/media/STORAGE/projects/ident.worldapi.org/` `CONCEPT.md`, `README.md`, `STATUS.md`.2. `loreana:/media/STORAGE/projects/tickets.worldapi.org/` `README.md`, `STATUS.md`.3. `/CONTAINERS/projects/antcolony/README.md` — "Conventions for all apps", "Lessons learned".4. How notes.worldapi.org runs on Byrodin (the model): `/CONTAINERS/projects/notes.worldapi.org/README.md`and `docker-compose.yml` (debian:12-slim, host network, app on 127.0.0.1:<port>, nginx proxies it,TLS ends at nginx; the manifest declares NO baseUrl and NO tls — README explains why).## Hybriel (standard block)Read `/CONTAINERS/projects/antcolony/docs/hybriel-for-app-workers.md` first. Report new Hybriel findingsunder "Hybriel issues"; do not edit that guide.## Part 1 — ident: per-IP limit for code requestsToday the only limit is per email address (3 codes / 10 min), so a public ident could be used to mailmany addresses. Add a limit per client IP on code sends (your numbers; list them).- **Client IP source**: behind nginx on Byrodin every request carries **`X-Client-IP`**, set by nginx(`/CONTAINERS/web/nginx/conf.d/cloudflare-client-ip.conf`): the CF-Connecting-IP when the requestreally came through Cloudflare, else the TCP peer. nginx always overwrites what a client sends, soident trusts `X-Client-IP` and nothing else (never `CF-Connecting-IP` / `X-Forwarded-For` directly).- Without the header (dev on Loreana, no nginx): fall back to the connection's peer address if hl:webexexposes one, else one shared bucket — say which.- Both the web face and any API that triggers a mail are covered. Refusals are visible to the user.- Gate: extend with per-IP cases (two IPs via the header, the limit hits one, not the other; theheader can't be bypassed by sending another IP header). Mail only into the sink.## Part 2 — deploy readiness for BOTH appsTarget on Byrodin (the architect creates it on first deploy):| app | Byrodin folder | container | port (127.0.0.1) ||---|---|---|---|| ident | `/CONTAINERS/projects/ident.worldapi.org` | `ident.worldapi.org` | 45002 || tickets | `/CONTAINERS/projects/tickets.worldapi.org` | `tickets.worldapi.org` | 45003 |For each app:1. A `docker-compose.yml` in the app folder (notes pattern: `debian:12-slim`, `network_mode: host`,`restart: unless-stopped`, whole folder mounted, runs the vendored `bin/hybriel`). The app must bind**127.0.0.1** on Byrodin (check how: HL_HOST or the app's own env; make it configurable, defaultunchanged for dev). Port via env.2. A `deploy.sh` run ON LOREANA: refuses to run if any gate fails (or takes `--skip-tests`, loud);rsyncs the code to `[email protected]:<Byrodin folder>` — **excluding** `storage/`, `.sessions/`,`.env`, `.scratch/`, `server.*`, `testapp/`, logs; then restarts the container over ssh(`docker compose up -d` / `restart`); then checks the public URL answers 200. Print every step.Loreana's ssh to Byrodin: see ident STATUS (`ssh -F /dev/null [email protected]` may be needed).**Write it, check it with `bash -n` and a `--dry-run` mode (rsync -n, no restart) — do NOT run itfor real and do NOT connect to Byrodin.** Dry-run output against Byrodin is also not allowed; testthe dry-run against a local target directory instead (make the target configurable).3. Behind a TLS-terminating proxy: make sure nothing emits `http://` absolute URLs and cookies stillwork on https (notes' lesson). Check ident's session cookie and the selector/CORS code with an`https://tickets.worldapi.org` origin in mind (apps registered with https origins).4. README of each app: "Deploy" section (first deploy is done by the architect; later: `./deploy.sh`).## Mail — IMPORTANT (unchanged)ident's dev server on :8351 sends **real mail**. Never trigger an OTP on :8351. Gates use their ownservers with `IDENT_MAIL_SINK`. **Do not read, print, copy or edit any `.env`.**## Rules- No git. Only kill your own PIDs or the named pid files. Clean up headless Chromes. Scratch in theapp's `.scratch/`. Do NOT POST to the live tickets server. Only ever open COPIES of mpackdb stores (#40).- If any action is refused by the permission system, don't retry or work around it; report it.- All existing gates of both apps must stay green. Restart the dev servers at the end as before(ident: `server.pid`, `testapp/testapp.pid`; tickets: `server.pid`) and check 200.- Update `README.md` / `STATUS.md` of both apps. 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
- 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