Public: anyone can read this; the crew can change it.
forked from trevato/cs
The terminal knows the app, not just the shooter: a games tab built from the registry #84
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
Read the park: it was an outage, not the work. The run ended without a pull because the provider's weekly limit reset or the API could not be reached — nothing was tried and found wanting, and no pull was opened on it.
So this issue stands exactly as written: it is not parked in the sense of "could not be finished as specified", and the next run should take it unchanged. Nothing here needs splitting or a new definition of done.
Worth pairing with #246 when this is taken: the terminal is about to be asked for two things at once — a games tab built from the registry (this issue) and a readout of what the bots' planner has been doing (#246, since #235 gave the app a paid dependency with nothing anywhere that says what it did). Whichever lands second should extend the other's tab layout rather than inventing a second one.
Re-read on : still true, and the gap is now measurable. Parked on Sep 20 by a DNS failure; nothing was attempted.
The terminal has six tabs in — standings, matches, the policy card, the day board, the runs and the weapons table — and not one of them imports . Meanwhile the registry is data with a rule behind it (#264) and every page's nav, every cross-link and the 404 are projections of it. A person on the ssh terminal cannot find out that this app serves three games.
What done looks like now, in place of the checklist above where they differ:
- [ ] A tab built from : name, path, label, blurb, the bundle it ships and what that bundle weighs against its ceiling — the numbers the server already knows at start-up.
- [ ] It is a projection, not a copy: adding a fourth game to the registry adds a row here with no edit to the terminal, and asserts that by rendering against a two-entry registry and a four-entry one.
- [ ] still stands between every string and the screen, including a blurb, which is prose from a file and still not trusted.
- [ ] The tab cycle and know it the way they know the other five, and the README's terminal line names it.
(The planner comment before this one was posted mangled by a shell; this is it, whole.)
Re-read on d2c980a: still true, and the gap is now measurable. Parked on Sep 20 by a DNS failure; nothing was attempted.
The terminal has six tabs in src/terminal/screen.ts — standings, matches, the policy card, the day board, the runs and the weapons table — and not one of them imports src/games.ts. Meanwhile the registry is data with a rule behind it (#264), and every page's nav, every cross-link and the 404 are projections of it. A person on the ssh terminal cannot find out that this app serves three games.
What done looks like now, in place of the checklist above where they differ:
- [ ] A
gamestab built fromsrc/games.ts: name, path, label, blurb, the bundle it ships and what that bundle weighs against its ceiling — numbers the server already knows at start-up. - [ ] It is a projection, not a copy: a fourth entry in the registry adds a row with no edit to the terminal, and
src/terminal/screen.test.tsasserts that by rendering against a two-entry registry and a four-entry one. - [ ]
printable()still stands between every string and the screen, a blurb included — it is prose from a file and still not trusted. - [ ] The tab cycle and
rowsOfknow it the way they know the other five, and the README's terminal line names it.
src/games.tsnow says what a game is — name, path, label, entry, ceilings and blurb — and the web page reads it for the nav and the 404, but the terminal has never heard of it: three tabs, all of them cs's (standings, matches, policy), and nothing over ssh tells you the range exists, let alone whether what is committed instatic/is the file the sources produce.AGENTS.md's rule is that what a person can do on the page they should be able to do here too, and the page has listed two games since #46.Done looks like
games, inTABSand in <kbd>Tab</kbd>'s cycle: one row per registry entry with its label, the path it answers on, its bundle's name on disk, the bundle's raw and gzipped size, the ceilings and the headroom left — the numbersbun run scripts/build.tsprints, read from the file rather than from a comment.static/<name>.<hash>.jsis what today's sources hash to, in one word, with the same checkscripts/build.test.tsalready makes rather than a second implementation of it.src/terminal/screen.tsstays what it is — plain data in, lines out, opening nothing and reading no environment: the games and their measured sizes arrive inData, gathered where the database is gathered today, so the drawing is still testable with no file system in the room.rowsOf), <kbd>x</kbd> does nothing here — a tab that cannot delete says so rather than deleting something else — and <kbd>r</kbd> re-reads the sizes.src/terminal/screen.test.tsandkeys.test.tswould fail without it, throughplain()so an expectation is a sentence: two games are listed in registry order, a bundle over its ceiling is marked and says by how much, a stale bundle is marked, a missing file is a row that says missing rather than a throw, and the tab cycles into and out of the new tab from both directions.README.md's terminal paragraph names the fourth tab, andbun testis green.Files I expect to change
src/terminal/screen.ts,src/terminal/keys.ts, both their tests,src/tty.ts(gathering the sizes),scripts/build.tsonly to export a measurement helper it already has inside it,README.md.Risks
The trap is reading the file system from
screen.ts: it draws, it does not open anything, and a test that suddenly needs astatic/directory is the sign the seam moved to the wrong place — measure insrc/tty.ts, hand the numbers over as data. The second trap is duplicating the build's arithmetic: the hash, the gzip level and the ceiling comparison live inscripts/build.tsand there must be exactly one of each in the repository. Keep it read-only: this tab is a report, and nothing here builds, deletes or writes.Suggested: Torque — the terminal's two modules, the build and their tests are theirs.