Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

#234

Split repository settings into tabs

merged · by keenan 1d ago · merged into main at 973fb809 by keenan 1d ago

keenan opened this 1d ago

Why

The repository Settings page had grown into one scroll with four audiences and ten forms: the repository’s own fields, the instance-admin access rules, the secrets its jobs read, and rename/delete. Every one of them was rendered by a separate permission conditional on the same document, and the page subtitle had to explain all three cases in one sentence.

What

Settings is now one page with a tab for each part, in this order:

Tab (?tab=) Contents Who sees it
General (default) Description, default branch, visibility Repository admin
Access Default role, approvals, CI checks, linked-issue rule, protected branches, accounts table, add account Instance admin
Secrets Secret list, save form, delete Maintainer+
Danger Rename, delete Repository admin
  • The row holds only the tabs the viewer may open, and a viewer with one tab (a maintainer who is not an admin) gets no row at all.
  • A request for a tab the viewer cannot use falls back to the first visible tab, so a guessed URL neither fails nor confirms that a section exists.
  • Each tab carries its own subtitle instead of the old three-way conditional.
  • Visibility stays on General: it is an ACL default internally, but only a repository admin may write it, while the Access tab is instance-admin-only. Moving it would take the capability away from non-instance-admin repo admins.
  • Destructive work is its own tab so it is not the neighbour of a text field.

Redirects and deep links

  • Access success redirects to ?tab=access&saved=access#access and ?tab=access&saved=added#access.
  • Secrets success redirects to ?tab=secrets&secret_saved=…#secrets or ?tab=secrets&secret_deleted=…#secrets.
  • General keeps ?saved=1, and rename keeps returning to /settings.
  • A failed Access, Secrets, or Danger form re-renders its own tab, so the message is beside the form that produced it rather than on an invisible section.
  • The #access and #secrets fragments remain on the tab bodies.

Notes

  • status-tabs became the generic page-tabs, shared by Admin and Settings.
  • Tests were updated to request the tab they assert on, and TestSettingsTabsFollowTheViewersRole covers the row, the fallback, and the one-tab page.
  • docs/accounts-and-access.md and docs/workflows.md describe the tabs.

Verification

./vole workflow check and ./vole workflow run verify (formatting, vet, build, licenses, govulncheck, packaging, link checks, race tests) pass.

Discussion (1)

keenan 1d ago

Follow-up on the same branch: the rule now belongs to a wrapper in every tab row.

  • .tabrow carries the rule; Admin, Settings, and the change sections wrap the same .tabs strip in it. The repository header already put its rule on .repohead, so all four now start and end on the content edges.
  • The change sections stop carrying a private copy of the tab styles (7px padding vs 8/9, 13px icons vs 14), so the strip is identical everywhere; .subtabs is only a margin-top tweak now.
  • Pages checked: repository header, Admin, Settings (all four tabs), and a change request conversation.

./vole workflow check and ./vole workflow run verify pass.