This commit is contained in:
Mateusz Gruszczyński committed 2026-11-04 08:55:53 +01:00
1 parent cdca612a59
commit eb25f8de4a
56 files changed
+7848 -4345

No files matched your search

+22 -87
View File
@@ -1,90 +1,25 @@
PostfixAdmin-RS 0.0.3
PostfixAdmin-RS 0.1.0 – validation of this release
Validated in the current workspace:
- TOML parsing: PASS
- JSON i18n parsing: PASS
- English is the default UI language: PASS
- EN/PL catalog and interface language switch markers: PASS
- API/backend messages remain English (no backend localization layer added): PASS
- CSS/JS manifest completeness: PASS
- JavaScript syntax with Node: PASS
- shell syntax (bash -n): PASS
- dev.sh mock-mode smoke test with command shims: PASS
- dev.sh SSH-tunnel mode smoke test with command shims: PASS
- SSH DB mode defaults to READ-ONLY: PASS
- SSH DB writes require POSTFIXADMIN_RS_DEV_DB_WRITES=1: PASS
- SSH host-key verification is not disabled: PASS
- no PHP files in project: PASS
- obsolete UI branding "· bez PHP" / "Panel poczty bez PHP": REMOVED
- no native browser prompt/confirm/alert dialogs: PASS
- modal/theme SVG integration markers: PASS
- no shell-based hook execution markers: PASS
- Rspamd DKIM route/config/static integration markers: PASS
- Rspamd selector_map/path_map config present in dev/example/user configs: PASS
- CSP static policy gate: PASS
- dev mock safety markers: PASS
- production DB read-only mutation guard: PASS (static source check)
- PostfixAdmin password compatibility markers/tests: PASS (static source check)
- config.from-user.toml contains no database password: PASS
- PostfixAdmin 4.0.1 entry points/handlers reviewed against PORT-PARITY.md: PASS (manual source audit)
Compiler gate (rustc 1.97 offline with vendored crates, edition 2024):
- cargo build: PASS
- cargo clippy --all-targets -- -D warnings: PASS
- cargo test: PASS (unit tests incl. quota/limit rules, CIDR/proxy resolution,
recipient delimiter, vacation dates, fetchmail base64, password vectors)
- scripts/validate-release-static.py: PASS
- scripts/i18n/build.py: PASS (no missing Polish strings)
Not validated in the current workspace:
- cargo check / cargo test / cargo clippy / cargo build
Reason: Rust/Cargo toolchain is not installed in the execution environment.
Database:
- PostgreSQL 16: --init-schema on an empty database, second run idempotent,
--create-superadmin, --check-config, --integrity-check: PASS
- SQLite (development mock built by the same schema code): PASS
- MySQL/MariaDB: not available in the build environment; queries use the same
portable layer (flag/sum casts, LIKE ... ESCAPE '!', LIMIT/OFFSET binds).
Run scripts/api-smoke.py against a MySQL staging copy before going live.
Readiness conclusion:
- READY FOR DEVELOPMENT TESTING with the SQLite mock.
- READY FOR READ-ONLY production-schema testing through the guarded SSH tunnel.
- NOT YET PRODUCTION-READY until the Rust compiler/test/clippy gate declared by Cargo.toml and the regression checklist in TESTING.md pass.
Developer gate on a machine with the Rust toolchain declared by Cargo.toml/rust-toolchain.toml:
POSTFIXADMIN_RS_DEV_RESET=1 bash dev.sh
Read-only production DB test through SSH:
POSTFIXADMIN_RS_DEV_DB_MODE=ssh bash dev.sh
Full release gate:
./scripts/build-release.sh
Current iteration additions:
- content-hashed SVG sprite (fixes stale cached theme icons): PASS (static)
- domain-switch loading bar/spinner: PASS (JS/CSS static)
- domain-scoped mailbox/alias API loading: PASS (static)
- per-mailbox quota progress with PA 55/90 thresholds: PASS (static)
- PA generate_password/show_password helpers: PASS (static)
- PA MOTD and domain-list hide flags: PASS (static)
- Docker Debian package builder syntax/static markers: PASS
- Docker .deb build itself: NOT RUN (Docker is unavailable in this execution environment)
Current mailbox-user iteration:
- user navigation hides administrative modules: PASS (static)
- user Overview shows only own mailbox/self-alias/quota data: PASS (backend scope + static UI)
- password page opens directly on the change-password form; no cookie/CSRF prose: PASS (static)
- user Aliases domain is read-only: PASS (static UI + backend scope)
- PostfixAdmin-compatible Vacation user form: PASS (static; requires features.vacation + existing mail-server vacation setup)
- optional ManageSieve API/client/UI, no IMAP dependency: PASS (static)
- ManageSieve login credential held only in in-memory mailbox session when enabled: PASS (static)
- dev ManageSieve SSH tunnel defaults to READ-ONLY and has separate write opt-in: PASS (shell/static)
- quota progress uses CSP-safe native <progress>, no inline style mutations: PASS (static)
- Rust compiler gate: NOT RUN; the required toolchain is absent in this execution environment.
Compatibility regression checks:
- mailbox/alias local-part-only create UX with read-only selected domain: PASS (static)
- admin Vacation mailbox picker/editor: PASS (JS syntax/static)
- Vacation alias transport synchronization: PASS (source review + unit-test markers; Rust test gate not runnable here)
- mailbox-user alias field restriction in UI and backend: PASS (static)
- technical alias separation: PASS (static)
- Rspamd contextual filesystem errors + packaged permission helper: PASS (static + helper smoke test with isolated paths)
Domain alias UI regression checks:
- domain workspace separates user aliases from technical/default aliases: PASS (static)
- mailbox self-aliases are excluded from the domain alias sections: PASS (static)
- alias tables retain PostfixAdmin-RS fields (address, destination, description, status, active, actions): PASS (static)
- technical alias actions honor special_alias_control/global-admin permissions: PASS (static)
- domain mailbox/alias sections use the full content width for readability: PASS (static)
Current corrections:
- version-agnostic release validation (semantic package version + Cargo/toolchain consistency): PASS
- MySQL/MariaDB TEXT/LONGTEXT fallback decoding in row_string(): PASS (static)
- alias `goto` reads the real PostfixAdmin database value and uses the Blob fallback when required: PASS (static)
- frontend accepts alias destinations as array or comma-separated text and renders an explicit dash only when empty: PASS (static)
End-to-end:
- scripts/api-smoke.py against PostgreSQL and SQLite: 0 failures
- DKIM keys/signing, fetchmail, TOTP setup + TOTP login, TOTP exceptions,
application passwords against PostgreSQL: PASS
- Browser run (Chromium/Playwright) as global admin, domain admin and mailbox
user, English and Polish, desktop and phone width: no JavaScript errors,
no horizontal page overflow on phones.