release: 1.2.0: Panel 1.2.0-1.2.5: layout, RBAC, tests, GUI and CI fixes
[1.2.0] The second MINOR after 1.0.0: domain administrators with per-domain scope, a panel visual refresh on the SelfPost palette, and refinements to navigation and the send log. Upgrading runs one SQLite migration (`0005_panel_users`); the single administrator becomes a global user. Added: - panel: **domain-admin role** — global administrators manage panel users and Fixed: - Docker build: `LICENSE` is no longer excluded by `.dockerignore`, so the - panel: on signed-in pages with a narrow card (**Settings**, the user form) Changed: - panel: navigation session icons are distinct — **Settings** uses a gear, - panel: `/` redirects domain administrators to `/domains`; global users still - panel: **Sign out** in the navigation column uses the same type size and - panel: **visual style** brought in line with the SelfPost mark — brick accent - panel: the send log's **status is a badge**, in the same ok/warn/error/unknown … (1 more in CHANGELOG) [1.2.1] Panel refinements after 1.2.0: navigation icons, status-badge centreing, drill-down back-link placement, and safeguards for the sole global administrator. Upgrading is a tag bump; no migration. Fixed: - panel: status badge text sat low in the box (and below the heading or label - panel: the **Users** navigation icon was two full silhouettes with staggered - panel: the **Settings** navigation icon was a sun-with-rays (circle plus - panel: the user create/edit form placed «Back to users» at the bottom of the Changed: - panel: the user edit form disables role change and delete for the only global - panel: the user create/edit form hides **Assigned domains** when the role is - panel: **Settings** shows panel credentials and DMARC aggregate reports side [1.2.2] Status page layout after 1.2.1: paired cards in a wide column, denser machine and check copy, and a user-form checkbox fix. Upgrading is a tag bump; no migration. Changed: - panel: **Status** is wide again so paired cards fill the column. Layout: Fixed: - panel: cards inside `.split` used `margin: 0 auto`, which in a CSS grid - panel: on the user create/edit form, **Assigned domains** checkboxes stacked [1.2.3] Domain detail layout and panel polish after 1.2.2. Upgrading is a tag bump; no migration. Changed: - panel: the domain detail page is wide with paired cards (DKIM+SPF ‖ DMARC; - panel: Domains list — **Add domain** sits beside the domain field; the - panel: page URLs, browser titles, and headings are aligned — **Settings** is Fixed: - image: `mail.log` rotation no longer silently stops when the build context [1.2.4] Level-2 rate-limit semantics inverted after 1.2.3, plus a small DNS field height fix. Upgrading is a tag bump; no migration. Changed: - rate limiting (level 2): domain ceilings apply to every client IP (no IP Fixed: - panel: on the domain DNS status grid, the Type (TXT) field height matches [1.2.5] Rate-limit form polish after 1.2.4. Upgrading is a tag bump; no migration. Changed: - panel: rate-limit forms refined — level-1 backstop as muted copy on the Squashed CHANGELOG sections: [1.2.0], [1.2.1], [1.2.2], [1.2.3], [1.2.4], [1.2.5]. Full detail: CHANGELOG.md (1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5).
This commit is contained in:
+28
-49
@@ -26,15 +26,14 @@ in `git log` and [CHANGELOG.md](../CHANGELOG.md).
|
||||
|
||||
| ID | Topic | Status | Plan |
|
||||
|---|---|---|---|
|
||||
| domain-admin | Domain administrator role | **agreed** | [plans/domain-admin.md](plans/domain-admin.md) |
|
||||
| inbound-relay | Inbound relay (backup-MX / forwarding) | **agreed** | [plans/inbound-relay.md](plans/inbound-relay.md) |
|
||||
| contributing | `CONTRIBUTING.md` | candidate | — |
|
||||
| visual-style | Обновление визуального стиля | candidate | — |
|
||||
| dmarc-reports | DMARC aggregate report ingestion and panel UI | candidate | [plans/dmarc-reports.md](plans/dmarc-reports.md) |
|
||||
| panel-docs | In-panel operator documentation | candidate | — |
|
||||
|
||||
**Recommended order** (not binding): **domain-admin →
|
||||
inbound-relay** — role-wide authorisation first, then the inbound relay vertical
|
||||
slice. Deviating is allowed; there are no hard phases here.
|
||||
**Recommended order** (not binding): **inbound-relay** first among agreed
|
||||
items — it is the largest remaining 1.x+ extension. Candidates need explicit
|
||||
agreement before they join the queue.
|
||||
|
||||
After a context reset, pick an item marked `agreed` or `in progress`, then work
|
||||
the checklist in its linked plan.
|
||||
@@ -57,33 +56,11 @@ engine stays outside the image, only the attachment point is provided.
|
||||
|
||||
**Dependencies / risks:** a finished outbound path; open relay and backscatter;
|
||||
a wider attack surface (port 25 accepting mail).
|
||||
**Order:** recommended after [domain-admin](plans/domain-admin.md).
|
||||
**Version:** target bump `1.x`; `2.x` possible — to be settled once the
|
||||
implementation lands.
|
||||
|
||||
---
|
||||
|
||||
## domain-admin
|
||||
|
||||
**Goal:** a role with access to one or several assigned domains (the list is
|
||||
set by the global administrator) — applications, DKIM/DNS, and the send log for
|
||||
each of them; without global operations (adding domains, full backup, the
|
||||
queue, `mail.log`).
|
||||
|
||||
**Boundary:** an extension of v1.0 — [product.md](product.md) fixes a single
|
||||
administrator. Not a second all-powerful admin, but limited access to the
|
||||
assigned domains (one or several).
|
||||
|
||||
**Done when:** see [plans/domain-admin.md](plans/domain-admin.md).
|
||||
|
||||
**Dependencies / risks:** a users table, the role in the session, authorisation
|
||||
in every handler, setup and backup. **Order:** recommended **before**
|
||||
[inbound-relay](plans/inbound-relay.md).
|
||||
**Version:** `1.x` MINOR, given a compatible migration of the current
|
||||
administrator into a global one.
|
||||
|
||||
---
|
||||
|
||||
## contributing
|
||||
|
||||
**Goal:** `CONTRIBUTING.md` in the root — the dev loop, the checks to run
|
||||
@@ -102,28 +79,6 @@ priority.
|
||||
|
||||
---
|
||||
|
||||
## visual-style
|
||||
|
||||
**Goal:** refresh the control panel's visual design — typography, colour tokens,
|
||||
spacing, and component styling — without changing operator workflows or panel
|
||||
behaviour.
|
||||
|
||||
**Boundary:** presentation only (`panel.css`, templates, static assets); no new
|
||||
features. Styling must stay compatible with the panel CSP — rules live in
|
||||
`panel.css`, not inline (see [security.md](security.md) and the stylesheet
|
||||
header).
|
||||
|
||||
**Done when:** the panel reflects an agreed visual direction (starting
|
||||
reference: [assets/selfpost-proof.html](assets/selfpost-proof.html)); light and
|
||||
dark schemes remain supported; readability and contrast are preserved.
|
||||
|
||||
**Dependencies / risks:** CSP constraints on how styles are applied; visual
|
||||
regression across pages; low priority relative to functional work — take up
|
||||
after explicit agreement, independently of the feature roadmap order.
|
||||
**Version:** no bearing on semver.
|
||||
|
||||
---
|
||||
|
||||
## dmarc-reports
|
||||
|
||||
**Goal:** SelfPost receives DMARC aggregate reports (RFC 7489) on SMTP,
|
||||
@@ -148,3 +103,27 @@ inbound-relay depending on how port 25 acceptance is structured.
|
||||
|
||||
**Version:** `1.x` MINOR.
|
||||
|
||||
---
|
||||
|
||||
## panel-docs
|
||||
|
||||
**Goal:** built-in operator documentation in the panel — short pages (or a
|
||||
help drawer) that explain what each Status check and other controls mean,
|
||||
without sending the operator out to `docs/guide.md`.
|
||||
|
||||
**Boundary:** in-panel help only; not a second copy of the full operator guide.
|
||||
Seed content includes the Status blurbs removed from the cards in favour of a
|
||||
denser layout — Machine (kernel counters / rate window), TLS certificate
|
||||
(port 465, reverse-proxy mount), Hostname / reverse DNS (forward-confirmed
|
||||
reverse DNS, PTR at the hosting provider), and similar notes for other panel
|
||||
surfaces as they lose inline commentary.
|
||||
|
||||
**Done when:** an operator can open help from the panel for those topics; the
|
||||
removed Status blurbs are preserved there (or equivalent); no requirement to
|
||||
read the git tree for day-to-day meaning of a card.
|
||||
|
||||
**Dependencies / risks:** copy ownership and translation; keeping help in sync
|
||||
when checks change; not bloating every page with a second column of prose.
|
||||
|
||||
**Version:** `1.x` MINOR; `candidate` until explicitly agreed.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user