• 3.2.0 cf66d18b28

    3.2.0
    All checks were successful
    validation / validate-release (push) Successful in 34s
    Stable

    michael released this 2026-08-03 12:30:54 +02:00 | 0 commits to main since this release

    Sentinel 3.2.0

    Sentinel 3.2.0 is a configuration and operability release. It introduces per-mode threshold persistence, a greatly expanded setup dashboard, actionable human-readable diagnostics, intelligent no-op change detection, and structured retroassignment job reporting.


    Highlights

    • Per-mode thresholds. Ban thresholds and windows are now stored independently for AutoMod and message mode. Switching modes restores each mode's last-used values instead of resetting to defaults.
    • Expanded setup dashboard. Disable, AutoMod management, delete-history, auto-retroassign, ban DM toggle/message/invite, exemption removal, and AutoMod adopt/repair are all now first-class dashboard controls.
    • Human-readable diagnostics. Validation and reconciliation findings are now keyed by stable codes and rendered as actionable, operator-facing guidance via a dedicated findings catalog.
    • No-op change detection. Configuration writes that produce no effective change no longer create a revision or trigger reconciliation; command and dashboard responses surface "No changes were needed."
    • Structured retroassign jobs. Retroactive assignment now tracks assigned, skipped, and failed counts with terminal status (completed, cancelled, failed), and cancelled jobs automatically restart when protection is ready.
    • Standardized log severity. logCritical is renamed to logError; ban events now log at info severity, aligning structured output with conventional severity labels.

    Detection & Configuration

    • Schema migration v5 → v6 adds ban_threshold_automod, ban_window_automod, ban_threshold_message, and ban_window_message columns with CHECK constraints. Existing rows are backfilled from the current mode's values during migration.
    • A new effectiveThresholds() helper resolves the active threshold/window pair for the current mode, falling back to mode defaults when per-mode values are unset.
    • setMode now persists the outgoing mode's current thresholds before switching, so round-tripping between modes preserves operator-tuned values.
    • The updateDesired store path normalizes the candidate patch against current settings and skips revision bumps when no mutable desired field actually changes, eliminating spurious reconciliation cycles.
    • Policy activation now tracks the last activated revision, policy epoch, and assignment signature, so redundant "protection ready" logs are suppressed and auto-retroassign only fires when the role, exemption set, or toggle actually changes.

    Commands & Setup Dashboard

    • New slash commands: /sentinel delete-history <seconds> and /sentinel auto-retroassign <enabled>.
    • The setup dashboard gains a second action row with Disable, AutoMod, Delete History, and Auto-Retroassign buttons.
    • Ban DM settings are split into separate controls: a toggle, a message editor modal, and an appeal-invite editor modal.
    • Exemptions now support in-dashboard removal via a second user-select menu, alongside the existing add selector.
    • AutoMod management is surfaced in the dashboard with managed/verify-only selection, an adopt-existing-rule modal, and a repair button.
    • Dashboard and status fields now report changes pending activation, manual actions pending, cleanup required, delete-history seconds, and auto-retroassign state, with humanized controller-state labels (Active, Applying changes, Not fully active, Disabled, Stopping).
    • All command and dashboard mutation responses use consistent wording: "applied" on success, "not fully active" on degradation, and "No changes were needed" for no-ops.

    Diagnostics & Logging

    • A new src/findings.ts catalog maps internal finding codes to actionable operator messages covering missing permissions, log-channel problems, trap-role health, AutoMod rule health, stale cleanup, and bot membership.
    • Reconciliation and validation results are now routed through humanizeFinding, replacing raw internal strings in user-facing output.
    • Degrade reporting is deduplicated: the same degradation message is logged once per occurrence rather than on every reconciliation pass.
    • logCritical is renamed to logError across the codebase (logging.ts, ban.ts, runtime.ts, process-supervisor.ts, detection-service.ts, events.ts); ban events are now logged at info level instead of critical.

    Exports & Defaults

    • Safe configuration exports now include dm_on_ban, ban_delete_message_seconds, and enable_retroactive_role_assignment.
    • The default ban DM message no longer references the literal role name @Do not ping; it now says "the trap role," keeping the default applicable regardless of the configured trap-role name.

    Full changelog: 89444dd...6a13c1b

    Downloads