The panel redesign (docs/plans/panel-redesign.md, 27/27). A breaking
release: every panel URL changed and the database starts from a single
baseline - a 1.x /data is not upgraded.
Since the last cut also fixed, all found on the test server:
- the panel can read the mail queue;
- port 25 answers with DMARC report ingest on, also next to the
inbound relay;
- DMARC reports reach the panel (the delivery service never worked
since 1.7.0);
- Postfix start-up warnings about the queue directory.
Cut: CHANGELOG [Unreleased] -> [2.0.0]; image pin 2.0.0 in compose,
README, guide; roadmap, plan and version table.
On the test server, on 252e5d1: go vet ./... ok, go test ./... ok
(22 packages), make e2e ok.
Full detail: CHANGELOG.md (2.0.0).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,12 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.0.0] - 2026-10-11
|
||||
|
||||
The panel redesign. A breaking release: every panel URL changed and the
|
||||
database starts from zero - a 1.x `/data` is not upgraded (see Changed and
|
||||
Removed).
|
||||
|
||||
### Added
|
||||
|
||||
- panel-redesign (stage 0): Bulma 1.0.4 and a 57-icon subset of Tabler Icons
|
||||
@@ -233,6 +239,21 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version
|
||||
restriction list, and the report addresses - on the server's own name, a
|
||||
relay domain - were not in `relay_recipient_maps`. Their table is a
|
||||
recipient table now. Hidden until now by the port-25 failure above.
|
||||
- **DMARC reports reach the panel.** A report accepted on port 25 stayed in
|
||||
the queue: the generated delivery service was a bare `pipe` ("fatal:
|
||||
missing user= command-line attribute"), because the generator addressed it
|
||||
under a type Postfix does not have and set `flags=`, `user=` and `argv=`
|
||||
as `-o` parameters, which they are not. Behind that, the command would
|
||||
have refused to run (Postfix starts it without the container's
|
||||
environment) and was never told the recipient, so the check that a report
|
||||
came to the address of its own domain was skipped. The service line
|
||||
carries its arguments, the recipient is one of them, and
|
||||
`export_environment` names what the command reads. No report had been
|
||||
delivered since the feature shipped in 1.7.0; the e2e check asks Postfix
|
||||
how it reads the service.
|
||||
- Postfix no longer logs "warning: not owned by root" for the queue
|
||||
directory and its `pid/` at every start: the entrypoint hands the two back
|
||||
to root after its recursive change of owner.
|
||||
- Overview's Processes card counts the programs that are meant to stay up
|
||||
("6 of 6 running"); the idle one-shot `postfix-reload` was counted as
|
||||
running. The Milter sockets card no longer clips its second line with three
|
||||
|
||||
@@ -112,7 +112,7 @@ docker run --rm -d --name selfpost-try \
|
||||
-e SELFPOST_HOSTNAME=mail.local.test \
|
||||
-e PANEL_COOKIE_SECURE=false \
|
||||
-v selfpost-try-data:/data \
|
||||
ghcr.io/mixeme/selfpost:1.9.5
|
||||
ghcr.io/mixeme/selfpost:2.0.0
|
||||
```
|
||||
|
||||
**Get the setup URL** (pick one):
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
services:
|
||||
selfpost:
|
||||
image: ghcr.io/mixeme/selfpost:1.9.5
|
||||
image: ghcr.io/mixeme/selfpost:2.0.0
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
SELFPOST_HOSTNAME: "${SELFPOST_HOSTNAME:?set the mail/panel hostname, e.g. mail.example.com}"
|
||||
|
||||
+2
-2
@@ -107,7 +107,7 @@ than the default «meaningful step» rule in [§ Commits and release build](#com
|
||||
2. Git tag `vX.Y.Z` and publish the GitHub Release only on explicit request (see
|
||||
[§ Release image](#release-image)).
|
||||
|
||||
**Planned version cuts** (from pin `1.9.5`; adjust if semver changes mid-track):
|
||||
**Planned version cuts** (from pin `2.0.0`; adjust if semver changes mid-track):
|
||||
|
||||
| Stage | ID | Cut |
|
||||
|---|---|---|
|
||||
@@ -123,7 +123,7 @@ than the default «meaningful step» rule in [§ Commits and release build](#com
|
||||
| 10 | panel-redesign prep (docs only, owner-requested cut) | `1.9.3` (PATCH) |
|
||||
| 11 | panel-redesign plan: component kit, stages, reorder (docs only, owner-requested cut) | `1.9.4` (PATCH) |
|
||||
| 12 | GHCR release fix: keep per-arch images, sweep orphaned versions (CI only) | `1.9.5` (PATCH) |
|
||||
| 13 | panel-redesign | `2.0.0` (planned; MAJOR, no compatibility) |
|
||||
| 13 | panel-redesign | `2.0.0` (MAJOR, no compatibility) |
|
||||
| 14 | inbound-antispam-panel | `2.1.0` (planned; was `1.10.0`, reordered 2026-10-09) |
|
||||
|
||||
Docs-only prep (checklists in plans, no product code) uses the same per-step
|
||||
|
||||
+1
-1
@@ -183,7 +183,7 @@ cat ./data/setup-token
|
||||
#### Fixed image tag
|
||||
|
||||
`deploy/docker-compose.yml` pins an explicit version (`ghcr.io/mixeme/selfpost:X.Y.Z`),
|
||||
deliberately never `:latest`. The current pin is `1.9.5`. Intermediate
|
||||
deliberately never `:latest`. The current pin is `2.0.0`. Intermediate
|
||||
CHANGELOG sections (`0.2.0`…`0.6.0`) record development cuts from before that
|
||||
image was published. Pinning matters because of the backup version check (see
|
||||
[Full backup and restore](#full-backup-and-restore)): the panel binary's
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Plan: panel-redesign
|
||||
|
||||
**Status:** agreed (owner, 2026-10-09)
|
||||
**Status:** shipped in `2.0.0` (2026-10-11)
|
||||
**Date:** 2026-09-21 (replaces the 2026-09-08 givens)
|
||||
**Version:** `2.0.0` MAJOR — a breaking release by the owner's decision (§ No compatibility).
|
||||
|
||||
@@ -532,7 +532,7 @@ only when both are done. Every stage-2 step ends with the evidence of
|
||||
- [x] Technical review of the whole against the mockups, evidence pairs complete — **Opus**
|
||||
- [x] Security review of the route rename, subtree authorization and inbound delegation — **Fable**
|
||||
- [x] guide.md screenshots and wording for the new navigation; architecture.md § Panel HTTP surface and § Persistence; security.md roles; *Removed* in the CHANGELOG with one line that 2.0 starts from an empty data directory; strike the three UI rows of review-2026-08-followups that the redesign retires — **Sonnet**
|
||||
- [ ] `go vet`, `go test ./...`, e2e suite; version cut `2.0.0` — **Haiku**
|
||||
- [x] `go vet`, `go test ./...`, e2e suite; version cut `2.0.0` — **Haiku**
|
||||
|
||||
**After 2.0** — features land in the kit, each from its own plan, mockup first
|
||||
(§ Room for roadmap items): inbound-antispam-panel `2.1.0`; then, in whatever
|
||||
|
||||
+4
-4
@@ -39,12 +39,12 @@ in `git log` and [CHANGELOG.md](../CHANGELOG.md).
|
||||
| panel-notifications | E-mail notifications about important events | candidate | — | — |
|
||||
| delivery-log-storage | Keep a message's `mail.log` lines with its send-log row | candidate | — | — |
|
||||
| password-reset | Password reset by e-mail | candidate | — | — |
|
||||
| panel-redesign | Panel redesign (accepted mockups, design contract) | agreed | 26/27 | [plans/panel-redesign.md](plans/panel-redesign.md) |
|
||||
| panel-redesign | Panel redesign (accepted mockups, design contract) | shipped `2.0.0` | 27/27 | [plans/panel-redesign.md](plans/panel-redesign.md) |
|
||||
| schema-squash | Squash SQLite migrations into a 2.x baseline | built in panel-redesign (stage 1) | — | [plans/panel-redesign.md](plans/panel-redesign.md) |
|
||||
|
||||
**Recommended order** (not binding; owner, 2026-10-09: feature order follows
|
||||
development convenience): the next stage is **panel-redesign** (`2.0.0`),
|
||||
then **inbound-antispam-panel** (`2.1.0`) built in the new component kit —
|
||||
development convenience): **panel-redesign** shipped as `2.0.0` (2026-10-11); the next stage is
|
||||
**inbound-antispam-panel** (`2.1.0`), built in the new component kit —
|
||||
styling its two screens once instead of twice. panel-docs shipped in
|
||||
[CHANGELOG.md](../CHANGELOG.md) `[1.8.0]`; dmarc-reports in `[1.7.0]`
|
||||
(security review of the ingest path pending); domain-stats-auto-ratelimit in
|
||||
@@ -438,7 +438,7 @@ of their own — answered by guard tests that land before the templates, a
|
||||
`design-first` CI step and evidence-based acceptance (plan § Enforcement).
|
||||
Competes with feature work; Bulma is ~680 kB minified, embedded once.
|
||||
|
||||
**Version:** `2.0.0` MAJOR; `agreed` (owner, 2026-10-09).
|
||||
**Version:** shipped `2.0.0` (2026-10-11), MAJOR.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user