From d2a778edc07608a2b3c747e6405e60fb866c306e Mon Sep 17 00:00:00 2001 From: Mix Date: Mon, 12 Oct 2026 07:22:09 +0300 Subject: [PATCH] inbound-antispam-panel: Filter lists accepted; steps 8-10 closed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owner accepted Inbound > Filter lists on 2026-10-12 ("Да"), after a deny entry he added refused my test message on the live test server with the list's own reply (554 5.7.1 Refused by this server's deny list), mail.log carried the milter-reject line the count reads and the journal its row. Steps 8-10 of the plan were done with each earlier step and are ticked with where. 10/12: the technical and the security review remain. Co-Authored-By: Claude Opus 5.5 --- docs/plans/inbound-antispam-panel.md | 10 ++++++---- docs/roadmap.md | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/plans/inbound-antispam-panel.md b/docs/plans/inbound-antispam-panel.md index aaacf0b..6fdbf9f 100644 --- a/docs/plans/inbound-antispam-panel.md +++ b/docs/plans/inbound-antispam-panel.md @@ -99,7 +99,9 @@ who decided, the verdict and symbols or the reply, and the subject whole (kept on the sheet at his word: the table clips it); a message Postfix itself refused offers no *Deny sender*. Inbound › Filter lists was redrawn at his word the same day - kind in a column of its own, the note on the entry's sheet, -matches counted (§ Filter list usage) - and awaits his look at the result. +matches counted (§ Filter list usage) - and **accepted by him on 2026-10-12** +("Да"), after a deny entry he added in the panel refused a test message with +the list's reply and the journal recorded it. ### Retention @@ -307,8 +309,8 @@ Target version cut: **`2.1.0`** (MINOR), after `2.0.0`. One commit per step; - [x] List CRUD + validation + atomic rspamd map sync — **Composer** - [x] Panel: Inbound › Log and Inbound › Filter lists from the kit partials, mockups `in-log` / `in-filter-lists` (add client IP and engine columns mockup-first), evidence pairs — **Composer** - [x] Backup includes `/data/antispam/` — **Composer** (it always did: a backup walks all of `/data`; now held by a test, and the guide says the `antispam/` fragment directory is not in it) -- [ ] Unit + handler tests — **Composer** -- [ ] [guide.md](../guide.md), [architecture.md](../architecture.md) — **Composer** -- [ ] `go vet`, `go test`, e2e if applicable — **Composer** +- [x] Unit + handler tests — **Composer** (written with each step: store, milter, tailer, lists and their usage, view fixtures held to the outlines, handlers for both roles) +- [x] [guide.md](../guide.md), [architecture.md](../architecture.md) — **Composer** (kept up with each step; [security.md](../security.md) follows the security review) +- [x] `go vet`, `go test`, e2e if applicable — **Composer** (on the test server for every step; last on `7192c38`: vet ok, 22 packages ok, e2e ok, which relays, refuses, reads the log page and edits a list through the panel) - [ ] Technical review of inbound antispam changes — **Opus** - [ ] Security review inbound antispam path — **Fable** diff --git a/docs/roadmap.md b/docs/roadmap.md index 073b7ed..3acd91e 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -30,7 +30,7 @@ in `git log` and [CHANGELOG.md](../CHANGELOG.md). |---|---|---|---|---| | preflight | Installation check page (`/preflight`) | candidate | — | [plans/preflight.md](plans/preflight.md) | | contributing | `CONTRIBUTING.md` | candidate | — | — | -| inbound-antispam-panel | Inbound antispam journal + allow/deny lists | in progress | 7/12 | [plans/inbound-antispam-panel.md](plans/inbound-antispam-panel.md) | +| inbound-antispam-panel | Inbound antispam journal + allow/deny lists | in progress | 10/12 | [plans/inbound-antispam-panel.md](plans/inbound-antispam-panel.md) | | inbound-quarantine | Inbound spam quarantine (hold / review / release) | candidate | — | [plans/inbound-quarantine.md](plans/inbound-quarantine.md) | | csrf-tokens | Per-session CSRF tokens on state-changing forms | candidate | — | — | | template-data-typing | Typed structs for template data instead of `map[string]any` | candidate | — | — |