gitoria
All repositories: gitoria
7.5 KB
# Report 002 (w082): gitoria code order, no behaviour change**Where:** commits on main in loreana:/media/STORAGE/projects/gitoria.worldapi.org:- `110c279`: file moves (1/4)- `090a20c`: topics, map and thin wrappers (2/4)- `cc7bf7b`: `let` (3/4)- the docs + tests commit (4/4), which also holds this report and the mission briefNot pushed, not deployed. No `.env` read. Only ports 8750–8759 were used. Every server and sshd container was stopped by its PID or name; nothing of mine is still running.## Counts (before → after; `python3 tests/letcount.py .`)| | before (fdfb4b1) | after ||---|---|---|| `.hl` files in the root | 14 | **1** (project.hl) || project.hl lines | 251 | **126** (index comment, PWA config, routes, audience, server) || `let` total | 530 | 213 || `let` never reassigned | **296** | **0** |The 213 `let`s left are all needed:- 125 are reassigned;- 88 are re-bound in a loop body. Hybriel refuses a plain declaration there on its 2nd pass (tickets lesson).## LayoutThe full file map is in README "Files". Imports only go one way: util / git-helpers / markdown ← users ← repos-helpers ← git ← repos ← tickets-helpers ← homepage / code / pulls / releases ← tickets ← tokens / sshkeys ← transport ← api-helpers ← api ← project.hl.- **`lib/git.hl`** was 732 lines covering five topics. It is now split:- `git.hl`: the git calls, branches, `initRepo`, `isEmptyNow`, `tmpDir` (moved here from transport.hl);- `homepage.hl`, `code.hl`, `pulls.hl`, `releases.hl`: one per topic;- `git-helpers.hl`: path, name and id checks, tab fields, sizes, and the `|||PR` / `|||RL` subject parsers.- **`lib/repos.hl`**: the table and every write to it.- `mayPush` is new here. It is the single "only the owner pushes" rule; before, transport.hl and sshgate.hl each had their own copy.- `repos-helpers.hl`: slug rules, the row a page shows, `withChange`, `pageTitle`, the Markdown view.- **`lib/users.hl`**: users and ident.- `userOfLoginCode` is the one exchange + `ensureUser` step. Before, the login route and the selector face each had their own copy.- `tagOf` moved here out of project.hl.- **`lib/tickets.hl`** gained `finishConnect`, the logic of `/settings/connected` (taken out of project.hl).- `tickets-helpers.hl`: the tickets URL, the answer shapes, `#12` references.- **`lib/transport.hl`** holds `gitTransport` and `callGit`.- `transport-helpers.hl`: the Basic password, plain answers, `Git-Protocol`, pkt-line.- **`lib/sshkeys.hl`** gained `keyLine`, the authorized_keys line (taken out of sshgate.hl).- **`lib/api.hl`**: every function route, as thin wrappers:- `/api/repos…`;- `/login/callback`;- `/settings/connect…`;- `/__git/keys` and `/__git/access` (this was sshgate.hl).- **`lib/api-helpers.hl`**: JSON / Markdown / text answers, `goTo`, `sshGuard`, `repoOfRequest`, `safeNext`.- **`lib/util.hl`**:- was localtime.hl;- also holds env, `storageDir`, the addresses (`publicUrl`, `slugOfHost`, `domainFor`), lists, text checks;- `newestFirst` replaces three copies of the same insertion sort.- **Faces made thin:**- "Make main" → `code.hl makeMain`;- the Merge answer → `pulls.hl pullsView`;- the selector login → `userOfLoginCode`.- The session writes stay in the faces, because a face's `session` parameter is the framework's own.- **Removed:**- `jsoncheck.hl` was imported nowhere;- `git.hl parseView` was called nowhere.- **Moved:** `styles.hl` → `components/styles.hl`. `tools/migrate-short-ids.hl` now imports from `lib/`.## Tests| test | result ||---|---|| gate `tests/browser.mjs` (8750–8759) | **200 passed, 0 failed** before and after each step || `tests/push.mjs` | **46/0** before and after each step || `tests/ssh.mjs` | **44/0** before and after each step || live-data reads + writes | identical, except **1 intended difference** (below) |The gate commands are in README "Test". The browser gate runs with `GITORIA_GATE_TICKETS_DIR` set to a `git archive HEAD` copy of tickets. The reason: the tickets working tree is currently being changed by another worker, and with it the gate crashed at the start ("tickets name failed").**Live-data comparison** (new `tests/realdata-baseline.mjs` and `tests/realdata-compare.py`; how to run: README "Test" → "Same output"):- **Data:** a copy of Byrodin's `storage/mpackdb` + `storage/git`, taken 2026-10-03. Each run gets a fresh copy.- **Reads** (678), signed in as az5b2 through a session file:- every page of all 13 repos, signed in and out: `/` including the 3 MB tracker README, code, files, folders, branches, commits, pulls, releases, tickets, settings;- unknown addresses;- the 20 browser modules;- `/api/repos…` as JSON and as Markdown;- every refs advertisement, v0 and v2;- the refusals;- the login, connect and `/__git` routes.- **Writes** (80):- faces: create, token, ssh key, Make main, Merge, open ticket, disconnect, remove, login, logout;- over HTTPS: clone, then push with a token (also refused without one or with a bad one);- over SSH, through the real sshd container: clone tracker, push a branch to email, refused after the key is removed;- the pages that follow each write.- **Tickets:** the connected repo's tickets are a snapshot, served on port 8759, so nothing reaches live tickets. The live tickets API changed its links during this run, which is why a snapshot is needed.- **Masks:** two runs of the OLD code compare clean (758/758).- **Browser modules:** they differ only in the tables of imported statics and in source positions. The script checks the component code and the kind of every imported name it uses. Step 3 also changes `var` → `const`.**The 1 difference (intended, a fix that came with the cleanup):**- **What changed:** a failed `/login/callback` in a browser that already has a session now shows its reason on `/login/failed`. For example: "login is not set up …".- **Before:** it always showed "the login did not finish — try again".- **Cause:** the old `failed(req, why)` was a second call. It got a COPY of `req` and so a copy of the session, and its write was lost.- **Fix:** project.hl now hands `&req` and `&server.sessions` to the session-writing routes, the same fix as in tickets mission 010.- **To undo it:** pass `req` by value to `loginFailed` in lib/api.hl.**Other checks:**- `tools/migrate-short-ids.hl` loads and refuses exactly as before (no storage, no key, ident down).- `tests/short-id-switch.mjs` was **not run**: it is historical and uses fixed ports 8724/8725, which are outside my range.## Found (in STATUS "Lessons")1. **A session-writing route needs `&req` and `&server.sessions`.** gitoria lost the login-failure reason through a by-value `req`.2. **The browser module carries the statics of every file a component imports.** Moving a static changes the module's tables and the `?v=` hashes, but not the page. Compare the component code instead.3. **The tickets working tree can be mid-change.** Gate against a `git archive HEAD` copy.4. **A crashed gate leaves its servers running.** Check `ss -ltnp | grep :875` and kill by PID.## Not done / open- **Not deployed** (that is the architect's job). Use the normal `deploy.sh`. There is no data change.- deploy.sh's rsync does not delete, so the old root `.hl` files stay on Byrodin. They are unused and can be removed by hand.- **Scratch** (gitignored) in `.scratch/w082/`:- `old/` (the old tree, code only);- `tickets-head/` (code only);- `gates.sh` (the three gates on 8750–8759);- `unlet.py`.- **Deleted after the run:** the live-data copy and every baseline output (they hold live data).
Branches
- mainmain branch
Latest commits
- 4f47843egate: ticket links use the tickets short URL (/<slug>/<n>, tickets#25)mre
- 86605446mission 002 (code order) 4/4: README file map + import order + 'Same output' test + gate run with a tickets HEAD copy, STATUS (entry, lessons), LOG, report; tests/realdata-baseline.mjs + realdata-compare.py (a cleanup answers the same on live data: pages, modules, API, git over HTTPS and SSH, faces), tests/letcount.pymre
- cc7bf7bamission 002 (code order) 3/4: let only where a variable is reassigned or re-bound in a loop body (289 lets → plain declarations; 213 left: 125 reassigned, 88 loop-bound; no member/import/param clash). gates 200/0, 46/0, 44/0; real-data reads + writes identical (browser modules: var → const only)mre
- 090a20c6mission 002 (code order) 2/4: one lib/ file per topic — git.hl split into git (calls, branches, init, temp folder) / homepage / code / pulls / releases (+ git-helpers: paths, ids, |||PR/|||RL markers); repos-helpers, tickets-helpers, transport-helpers; util.hl = localtime + env, storage dir, addresses, lists, text checks, one newest-first sort (was 3 copies); the function routes out of project.hl into lib/api.hl (thin; plumbing in api-helpers.hl), sshgate.hl folded into api.hl + sshkeys.hl keyLine + repos.hl mayPush; 'Make main' and the merge answer out of the faces (code.hl makeMain, pulls.hl pullsView), one login helper (users.hl userOfLoginCode); project.hl is the map. Session-writing routes get &req + &server.sessions. gates 200/0, 46/0, 44/0; real-data identical except /login/failed now shows the parked reason for a browser that already had a session (the old copy-of-req lost it)mre
- 110c2799mission 002 (code order) 1/4: .hl files out of the root — lib/ (api, git, localtime, markdown, repos, sshgate, sshkeys, tickets, tokens, transport, users), components/styles.hl; jsoncheck.hl removed (imported nowhere); import paths only. gates 200/0, 46/0, 44/0; real-data reads + writes identicalmre
- fdfb4b1bgitoria: Hybriel master 06617221 (plugin allocators 3a781359 + 413f60e4, mpackdb 2cb7ae5e, http1 773de63e); gates 200/0, 46/0, 44/0mre
- 5b46ac84antcolony#40: LOG.md — missions 069/072 are antcolony missions (report paths on Byrodin)mre
- 5602ff41gitoria: Hybriel master 190aa11d (fc838894 GC correctness, #127 mountKids by reference, #126, #48) — tracker README flat; gates 200/0, 46/0, 44/0mre
- e85eaf01gitoria: 069 round 2 — hybriel 1a096ad3 not adopted (Markdown SSR still grows); browser gate waits for the server-side logout before restartmre
- 09ce4f3fgitoria: mission 069 re-vendor hybriel 8efba065 stopped (big SSR pages grow + slow down); lambda audit clean; old vendor keptmre
- 3dc43108antcolony#40: mission references point to the moved missionsmre
- 8d9450fdantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- 205d5fe4gitoria: Hybriel master ff51cf46; ssh keys/tokens no double rows (session sync); gates follow #20mre
- 9b27cb26gitoria#21: installable app (manifest, service worker, offline start page), own iconmre
- 68dcb603deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- e2deed6dgitoria#20: "Add code" only on the Code page of an empty repository, no collapsiblemre
- 8bb97ffddeploy.sh: never send .git or .gitignore to Byrodinmre
- fd981932State of 2026-09-27; bin/ no longer tracked (Hybriel commit is in README)mre
- 4a2d7125initial commitmre