diff --git a/AGENTS.md b/AGENTS.md index 1fc2152ab..ca9374e58 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -424,7 +424,8 @@ matching its directory. PSR-4 autoloads from `web/includes/` → | `Sbpp\Config` | settings cache | | `Sbpp\Api\Api` | JSON API dispatcher | | `Sbpp\Api\ApiError` | structured API error | -| `Sbpp\View\AdminTabs` | admin sub-route sidebar mounter | +| `Sbpp\View\AdminTabs` | edit-* Back-link mounter (empty tabs) | +| `Sbpp\View\AdminNavCatalog` | Pattern A section catalogs for the main-sidebar accordion (#1490) | | `Sbpp\View\BrandLogo` | `template.logo` resolver with `is_file()` fallback to `images/favicon.svg` — single source for the navbar + login chrome brand-mark renders; rejects path-traversal + null-bytes + the v1.x default (case-insensitive); fail-closed on missing `SB_THEMES` | | `Sbpp\View\Toast` | server-side toast emitter (`emit(kind, title, body, ?redirect)` — replaces v1.x `ShowBox(...)`) | | `Sbpp\View\*` | view DTOs (page-level + partials) | @@ -2734,36 +2735,41 @@ Regression guards: ### Sub-paged admin routes (`?section=…` routing) Admin routes that subdivide into a small fixed set of sub-tasks -(servers / mods / groups / comms / settings / **admins** / **bans**) +(servers / mods / groups / settings / **admins** / **bans**) ride the **`?section=` URL pattern** instead of stacking all panes in one DOM. Each section is its own URL — linkable, back-button-friendly, server-rendered, works without JS — and the page handler renders exactly one View per request. -Reference: `web/pages/admin.settings.php` is the long-standing -canonical shape; #1239 brought servers / mods / groups / comms onto -the same convention; #1259 unified the chrome on the Settings-style -vertical sidebar partial `core/admin_sidebar.tpl`; #1275 collapsed -the dual-pattern world by migrating admin-admins (`admins` / -`add-admin` / `overrides`) and admin-bans (`add-ban` / `protests` -/ `submissions` / `import` / `group-ban`) onto Pattern A too, -deleting the page-level ToC partial along the way. +#1490 — section chrome lives in the main sidebar accordion +---------------------------------------------------------- +Pre-#1490 Pattern A pages mounted a second rail +(`core/admin_sidebar.tpl` via `AdminTabs`) beside the main app +sidebar, which ate ~14rem of content width and duplicated "Add …" +links that already existed as header CTAs. #1490 nests every +section link under its admin category in the **main** sidebar as a +`