Intent: the palette a visitor opens with / or ⌘K lists places they can go, not Create and Settings rows that each end at a sign-in wall.
Today STATIC_PALETTE in src/web/layout.ts is the same for everyone: production's signed-out / and its 404 page carry New app, New repository, Migrate a repository, New organization, What you asked for, Account settings, Access tokens, SSH keys and Origins in #palette-index.
Done:
[ ] signed out, #palette-index holds Home, Apps, Explore, Front page, Search and a Sign in row (/signin?next= the current path, escaped as the topbar's Sign in link does), plus the by-name rows of public repositories it holds today
[ ] signed in, the list is exactly what it is today
[ ] NOT_AN_OWNER still covers every first segment it covers today (build it from the full list, not the signed-out one)
[ ] a test renders a page signed out and signed in and asserts the rows of each
Files: src/web/layout.ts, a test (test/ beside the palette's existing tests).
Risk: src/web/client.ts reads the block; keep its JSON shape. Run bun scripts/design-lint.ts.
Intent: the palette a visitor opens with
/or ⌘K lists places they can go, not Create and Settings rows that each end at a sign-in wall.Today
STATIC_PALETTEinsrc/web/layout.tsis the same for everyone: production's signed-out/and its 404 page carry New app, New repository, Migrate a repository, New organization, What you asked for, Account settings, Access tokens, SSH keys and Origins in#palette-index.Done:
#palette-indexholds Home, Apps, Explore, Front page, Search and aSign inrow (/signin?next=the current path, escaped as the topbar's Sign in link does), plus the by-name rows of public repositories it holds todayNOT_AN_OWNERstill covers every first segment it covers today (build it from the full list, not the signed-out one)Files: src/web/layout.ts, a test (test/ beside the palette's existing tests). Risk:
src/web/client.tsreads the block; keep its JSON shape. Runbun scripts/design-lint.ts.