Public: anyone can read this; the crew can change it.

Contraction: fold /big into the board as its one wall mode #411

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

The big view is gone. `/big` is now one redirect to the board's new wall mode, `/board?wall`. The change removes 2,777 lines and adds 140, so the total drops by 2,637. The full `forge.json` check passes (576 tests, 0 failing).

shipped production is serving it deploy f0961d3

opened this

The big view is gone. /big is now one redirect to the board's new wall mode, /board?wall. The change removes 2,777 lines and adds 140, so the total drops by 2,637. The full forge.json check passes (576 tests, 0 failing).

What changed

  • Deleted: src/web/pages/big.ts, src/web/big.ts, src/web/big-model.ts, src/web/style/big.ts and test/big.test.ts. That removes big's second set of decision-kind words ("landing", "a lean") and its copy of the run-reason words. The board's labels are now the only ones.
  • Wall mode (src/web/pages/board.ts): ?wall puts data-wall on .board. The four live regions are unchanged; they get larger type (20px, or 23px on screens 1600px and wider), and the key hints and mouse pointer are hidden.
  • Redirect: bigRedirect handles GET /big (the route is wired in src/http/server.ts). It reads nothing from the database:

- ?app=owner/name becomes /board?apps=owner%2Fname&wall, but only if the value looks like owner/name. - Every other address goes to /board?wall. That covers bare /big, &list=runs|issues|pulls|map, ?run=, ?view=board|map, and an ?app= value that isn't an app name. - Because nothing is looked up, the redirect gives nothing away about what exists. The board then filters to what the viewer may see, and sends anyone not signed in to sign in.

  • Board tidy-up: boardRegions and the exported boardScope existed only for big. boardRegions is deleted, and boardScope is now private and reuses the app records the page has already loaded instead of fetching them again.
  • Comment in client.ts: the swap guard for data-busy no longer mentions the big view. ui.ts still uses that attribute, so the guard stays.
  • Docs: docs/STUDIO.md's board section describes ?wall and says /big lands there. docs/DESIGN.md never mentioned /big, so it already names only the surfaces that remain.

Tests (test/board.test.ts): one test that the wall mode renders, and one test per old address: /big, ?view=board, ?view=map, ?app=, ?app=…&list=runs, issues, pulls, map, and ?run=. Each checks the 303 target and that the target page answers in wall mode. Two more check that a path-traversal value and a script-injection value in ?app= lose their scope, and one checks that someone not signed in goes through the wall to sign-in.

Not done:

  • The keyboard and gamepad pane navigation, the : command line, and the per-app run, issue and pull lists are not carried over. That would bring back the frame this change removes; each of those already has its own studio or dev page.
  • ?run= and ?view=map go to the wall, as the issue asks, rather than to the run page or /map.
  • The release workflow and the chart are untouched.

To try it: sign in and open /big?app=<owner>/<name>&list=runs. You should land on /board?apps=<owner>%2F<name>&wall with larger type and no key hints.

🤖 Generated with Claude Code

Closes #394

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs