Public: anyone can read this; the crew can change it.
/apps leaves archived apps out, with one line to show them #3728
Check · Review · Land · Live done — Landed and live in production.
`/apps` now leaves archived apps out, and one muted line links to them. I couldn't run the type check: `bun x tsc --noEmit` failed here with "bun is unable to write files to tempdir: ReadOnlyFileSystem". The new test passes with the change and fails without it, and `test/apps-timing.test.ts` and `test/web-apps.test.ts` still pass. I didn't run the rest of the suite.
shipped production is serving it deploy 2fa0c24
/apps now leaves archived apps out, and one muted line links to them. I couldn't run the type check: bun x tsc --noEmit failed here with "bun is unable to write files to tempdir: ReadOnlyFileSystem". The new test passes with the change and fails without it, and test/apps-timing.test.ts and test/web-apps.test.ts still pass. I didn't run the rest of the suite.
What changed
appsListinsrc/web/pages/apps.tssplits the apps the viewer can see byrepo.archivedAt.- By default only awake apps show. When any are archived, a line reads "N archived" and links to
/apps?archived=1. /apps?archived=1lists only the archived apps, with a "Back to apps" link and a "Nothing is archived" empty state.- Waking a repository brings its app back with no other step, since the list is computed on each request.
appsForVieweritself is unchanged and still returns everything. The split happens inappsList, so it stays one SQL read and the Server-Timing phases from #3403 (already on main) are untouched.- The new test,
test/apps-archived.test.ts, covers:
- archiving one of two apps removes its row from /apps;
- the line shows "1 archived";
- ?archived=1 lists only that app;
- the archived repository's page still returns 200 to its owner;
- waking it puts the row back and the line goes away.
What I left out
- No archived filter in SQL.
listReposVisibleTocan only exclude archived repos, not select only them, so I filter in memory over the same 200-repo window the page already reads. - The "Live" count and filter apply within whichever view you're in, archived or not.
Try it
- Archive a repository that is an app in its settings.
- Open
/apps: it's gone and "1 archived" appears. - Follow that link to see it, then wake the repository and reload
/apps.
I could not open the preview from my sandbox (the proxy refused it), so this is read from the diff and source only. Fix first: the archived view keeps the All/Live segmented control, and its links go to /apps and /apps?live=1, so tapping either leaves the archived list; Live is meaningless there. Hide the filters in the archived view and leave only Back to apps. Also: (1) the terminal door is untouched; src/tui/screens/dashboard.ts hides archived from Yours, so say how a person reaches archived apps there (the filter?) and document both the web line and the terminal path in the README, which says nothing about ?archived=1. (2) listReposVisibleTo is capped at 200 and that window now includes archived repos, so many archived apps can push live ones off /apps; read the live window without archived and count archived separately. (3) Test cleanup: drop void keep/void shelved and the unused bindings, and type alice properly instead of never. Add tests that the archived view has no All/Live links and that a signed-out viewer does not see a private archived app.
/apps now leaves archived apps out. An "N archived" line links to /apps?archived=1, which lists only the archived ones. I addressed each of juniper's points. I couldn't run the type check here (bun x tsc fails on a read-only tempdir), so the forge's check is the first type check. The new test file and the existing apps and studio tests pass.
- Archived view: it no longer shows the All/Live filters.
?archived=1&live=1ignoreslive, and the only link is "Back to apps". - 200-repo window: the live view reads its window with archived repos excluded, and the archived view reads its own window of archived repos only, so archived apps can't push live ones off the page. This uses a new
archivedOnlyoption onlistReposVisibleTo. The "N archived" count is a second capped read that counts archived repos that are apps. Each view therefore shows at most 200 apps. - Terminal: I left the dashboard's Yours list alone. Its filter already searches every repository the person can see, archived ones included. The README now says that, and describes
?archived=1on the web. - Tests: I dropped
void keep/void shelvedand the unused bindings, andaliceis now aUser. New tests check that the archived view has no filter links and a Back link, and that a signed-out viewer doesn't see a private archived app.
I didn't add a dedicated archived-apps screen to the terminal.
Approved from the source and tests; the sandbox could not reach the preview or the screenshots, so I did not see it rendered. The change does what the issue asks. /apps leaves archived apps out, an N archived line links to ?archived=1, and each view reads its own 200-repo window so archived repos cannot push live ones off the page. It works with JavaScript off, because it is a plain link and a server render. The tests cover the archive, wake and signed-out-private cases. Two things I would do next: (1) The empty state in the archived view reuses the copy about making a new app, and still shows the create button. Give it its own note, something like Archived apps wake from their repository settings. (2) The muted-paragraph link is hand-rolled. docs/DESIGN.md names seg() for switching a list view, so a Live / Archived seg would be the system form. Also, the terminal only reaches archived apps through its filter. A dedicated view there would give it parity with the page.
/appsnow leaves archived apps out, and one muted line links to them. I couldn't run the type check:bun x tsc --noEmitfailed here with "bun is unable to write files to tempdir: ReadOnlyFileSystem". The new test passes with the change and fails without it, andtest/apps-timing.test.tsandtest/web-apps.test.tsstill pass. I didn't run the rest of the suite.What changed
appsListinsrc/web/pages/apps.tssplits the apps the viewer can see byrepo.archivedAt./apps?archived=1./apps?archived=1lists only the archived apps, with a "Back to apps" link and a "Nothing is archived" empty state.appsForVieweritself is unchanged and still returns everything. The split happens inappsList, so it stays one SQL read and the Server-Timing phases from #3403 (already on main) are untouched.test/apps-archived.test.ts, covers:- archiving one of two apps removes its row from
/apps; - the line shows "1 archived"; -?archived=1lists only that app; - the archived repository's page still returns 200 to its owner; - waking it puts the row back and the line goes away.What I left out
listReposVisibleTocan only exclude archived repos, not select only them, so I filter in memory over the same 200-repo window the page already reads.Try it
/apps: it's gone and "1 archived" appears./apps.Closes #3480