# CPalius CMF 2.1.2

**Released:** 2026-09-22 · **Channel:** stable · **Critical:** no

Turkish: [2.1.2-tr.md](2.1.2-tr.md)

This release is the forum becoming a board: incremental counters instead of
`COUNT(*)` on the hot path, a four-layer Deny-Wins ACL, and a Studio desk that
keeps structure, permissions and cases in three different places.

## What's new

**O(1) board counters.** Topic and post totals increment and decrement along
the ancestor path. Visible, held and deleted counts are separate buckets.
`COUNT(*)` is legal only on `forum:recount`. The Studio cockpit reads
`cp_forum_board_stats` instead of scanning the tables.

**Deny-Wins ACL.** A permission is Inherit, Allow or Deny. User override first,
then groups (any Deny wins), then the parent path, then the default. Super-mods
still bypass. The Studio matrix persists only Allow and Deny; Inherit deletes
the row.

**Local moderators and ban filters.** A moderator is a person on a section.
A ban filter is a rule (IP / e-mail / name, CIDR or wildcard). They are not
the same screen.

**Passworded sections and a banned page.** A section can carry a secret hash.
The portal asks for it, grants a session, then lets the visitor in. A banned
member sees a forum-only 403 page, not a site-wide lockout.

**Studio desk: five groups, not twelve siblings.** Sidebar: Overview plus
Structure, Permissions, Moderation, People, Settings. Postbit is a settings
card. The cockpit is an attention strip, board health, and five shortcuts.
Member bans live on People, not on Ranks.

**Settings hub.** Studio → Forum → Settings is a card grid (board, conversation,
people, appearance, maintenance), the same shape Hosting already uses.

## Fixes

**The rank screen no longer doubles as a ban panel.** Bans moved to the
member list and the member form.

**The dashboard no longer opens with nine header buttons.** Attention, health
and shortcuts replaced that row.

## Upgrade notes

**This release does change the forum schema.** Dual-gate migrations ship in
`cp-core/migrations/` and `cp-content/modules/Forum/Resources/migrations/`.
The Forum installer applies pending SQL; `cp:update` / Doctrine still owns
the PHP migrations. After the panel update, open Studio → Forum once so the
installer can finish.

**Existing boolean permission rows stay readable.** The new matrix writes
ternary effects; old rows still resolve until you save a section again.

**Guest hiding from 2.1.1 is unchanged.** Those toggles stay off unless you
turned them on.

**If you deploy by FTP rather than through the panel,** clear
`cp-core/var/cache/prod/` after uploading — leave the folder, empty its
contents. Upload `public/assets/` as well.

## Known limits

**Recount is the only legal `COUNT(*)`.** A custom report that scans posts
for totals is fighting the design.

**The settings hub cards are collected at compile time.** After FTP, clear
the cache so `forum.settings_cards` is rebuilt.
