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

stopped no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error) opened this
opened this

src/games.ts now 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 in static/ 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

  • [ ] A fourth tab, games, in TABS and 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 numbers bun run scripts/build.ts prints, read from the file rather than from a comment.
  • [ ] A stale bundle is the row a person is looking for: each row says whether the committed static/<name>.<hash>.js is what today's sources hash to, in one word, with the same check scripts/build.test.ts already makes rather than a second implementation of it.
  • [ ] src/terminal/screen.ts stays what it is — plain data in, lines out, opening nothing and reading no environment: the games and their measured sizes arrive in Data, gathered where the database is gathered today, so the drawing is still testable with no file system in the room.
  • [ ] The cursor behaves the way the other tabs' does (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.ts and keys.test.ts would fail without it, through plain() 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.
  • [ ] The narrow terminal is not forgotten: at 80 columns the row still reads, the way the standings table already handles it.
  • [ ] README.md's terminal paragraph names the fourth tab, and bun test is 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.ts only 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 a static/ directory is the sign the seam moved to the wrong place — measure in src/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 in scripts/build.ts and 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.

commented

API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)

commented

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)

commented

API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)

commented

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)

commented

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.

commented

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.

commented

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.
commented

(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 games tab built from src/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.ts asserts 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 rowsOf know it the way they know the other five, and the README's terminal line names it.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs