diff --git a/.planning/phases/19.6.1-backend-administrators-screen/19.6.1-CONTEXT.md b/.planning/phases/19.6.1-backend-administrators-screen/19.6.1-CONTEXT.md
new file mode 100644
index 00000000..3a3d4470
--- /dev/null
+++ b/.planning/phases/19.6.1-backend-administrators-screen/19.6.1-CONTEXT.md
@@ -0,0 +1,182 @@
+# Phase 19.6.1: Backend Administrators screen - Context
+
+**Gathered:** 2026-10-21
+**Status:** Ready for planning
+
+
+## Phase Boundary
+
+cabana ships its own **Administrators** and **Roles** admin screens, in the style of WinterCMS `Backend\Controllers\Users` and `UserRoles`. Backend admins and roles can then be managed in the admin SPA, and not only through the `admin:*` console commands.
+
+The screens:
+- are built on cabana's existing generic CRUD (list, form and preview renderer), the `permissioneditor` field and record actions;
+- enforce the privilege rules on the server;
+- expose a generic seam through which plugins add record actions to a controller they don't own. 19.7's frontend-link action is the first consumer (19.7 D-34).
+
+The phase is kept short (1-2 plans). Existing cabana payloads and the `admin:*` commands stay unchanged. Only `summercms.go` is touched.
+
+
+
+
+## Implementation Decisions
+
+### Permissions and placement
+- **D-01:** The screens are guarded by **two new permission codes**:
+ - `backend.manage_users` for Administrators (Winter's name is kept);
+ - `backend.manage_roles` for Roles.
+
+ Roles change what every holder can do, so they get their own code. These are the first permissions cabana itself registers, through an internal pseudo-plugin (see Code Insights). — **Reversibility:** costly — the permission codes end up stored in `backend_user_roles.permissions` and `backend_users.permissions` JSON on every install that grants them.
+- **D-02:** **Placement: Settings → System section**, as in Winter, through `pact.HasSettings` entries that link into the controllers. No top-level navigation item.
+- **D-03:** **Superusers are hidden from non-superusers**, as in Winter:
+ - `ListExtendQuery` and `FormExtendQuery` filter `is_superuser` rows out;
+ - the `is_superuser` field and filter are removed for non-superusers;
+ - opening a superuser record by ID answers 404 or 403.
+- **D-04:** **No default role grant.** Neither code is added to the `developer` or `publisher` system roles through code-declared `Roles`. Only superusers reach the screens until someone grants the codes, so existing installs don't widen silently on upgrade.
+
+### Privilege rules (server-side, all enforced in the save transaction)
+- **D-05:** **Only a superuser can create or edit a superuser, or set `is_superuser`** (roadmap SC-2). A non-superuser sending `is_superuser` is answered 403, even if the field is hidden.
+- **D-06:** **The per-user permission override is editable**: a permissions tab on the Administrators form with `permissioneditor` mode **radio** (inherit / allow / deny), as in Winter. It is disabled when `is_superuser` is on. The column and its merge (`applyUserPermissions`, merged last) already exist.
+- **D-07:** **A non-superuser can't grant more than they hold**, and this covers both permissions and role assignment.
+ - **Permission editors**, on both the per-user tab and the Roles screen: an option the editor doesn't hold is `PermissionOption.Locked`, and its stored value is kept on save (Winter's `getSaveValueSecure`). Changing a locked value is answered 403, the existing behaviour.
+ - **Role picker**: it offers only roles whose merged grants (stored JSON plus code-declared grants) are a subset of the editor's own permissions. Assigning any other role is refused on the server.
+ - **Roles screen**: a non-superuser can't add a permission they lack to any role.
+- **D-08:** **Editing your own record is allowed, but privileged fields are read-only.**
+ - The admin can edit their profile fields on the Administrators screen.
+ - The server refuses, for the editor's own record, any change to `role_id`, `is_superuser`, `permissions` or `is_activated`, and refuses deleting yourself.
+ - This covers "an admin cannot raise their own role or permissions" (SC-2) in one place. There is no redirect to My Account.
+- **D-09:** **The last active superuser is protected on every write path.** It can't be deactivated, demoted (`is_superuser` off), soft-deleted, or turned inactive by any route. The check covers:
+ - form update and delete;
+ - bulk actions, including bulk deactivate and bulk delete;
+ - record actions;
+ - any `admin:*` command path that could clear the flag.
+
+ It runs inside the save transaction under a lock (for example a row lock on the active superuser set, or an advisory lock), so two concurrent demotions can't both pass. Today's `admin:*` commands don't demote, so their behaviour and output stay unchanged (SC-1).
+
+### Lifecycle and passwords
+- **D-10:** **Deactivate + soft delete + restore.**
+ - Activate and Deactivate are record and bulk actions that toggle `is_activated`.
+ - Delete is a soft delete through the existing `deleted_at`.
+ - A trashed filter lists deleted admins, and a Restore action brings them back.
+ - No hard delete, so FK references (tokens, `linked_by`, attachments) stay valid.
+- **D-11:** **Passwords are typed in the form.** Password and confirmation fields are required on create and optional on update, and blank means unchanged. The value is bcrypt-hashed like `admin:create`. There is no "send reset link" action and no force-change-on-next-login in this phase.
+- **D-12:** **Changes cut access immediately.** Deactivate, soft delete, and setting a password for another admin all bump `tokens_valid_after`, as `admin:reset-password` does. Existing JWTs and personal tokens then stop on the next request; `FindByID` already refuses inactive or deleted users. Restore and activate don't bump it.
+- **D-13:** **No invite or welcome mail** on create in this phase. Winter's `send_invite` is deferred.
+
+### Record-action seam
+- **D-14:** **A generic cross-controller action extension.** It is a new optional `pact` capability through which a plugin contributes `AdminRecordAction`s to any admin controller by controller ID, including cabana's Administrators controller and other plugins' controllers.
+ - It may also cover toolbar and bulk actions if the shape allows it at no extra cost (planner's call).
+ - Contributions merge at boot. A duplicate action name on a controller, or an unknown controller ID, is a boot error.
+ - Each action keeps its own `Permissions`, `Applies` and `Confirm`. The existing row-locked transactional run path (`crud.go` `RecordAction`) runs it.
+ - The seam is additive and names neither MCP nor the user plugin. It is the seam 19.7 D-04/D-34 consumes. The researcher checks whether 19.6 D-15 ("Reset 2FA" contributed by sm-mfa-plugin to the user plugin's Users screen) can use it as is.
+
+ — **Reversibility:** costly — this is a published `pact` capability that plugins (19.7's link action, sm-mfa-plugin) implement.
+- **D-15:** **Contributed actions appear on the preview screen only**, through the existing `RecordActions.vue` on `PreviewView`. The Administrators controller therefore gets a preview block. There are no per-row actions on the list and no list payload changes.
+
+### Roles screen
+- **D-16:** **Fields and system roles follow Winter.**
+ - Fields: name, code (slugged from name), description, and a permissions tab using `permissioneditor` mode **checkbox**.
+ - System roles (`is_system`, or roles that code-declared `pact.Permission.Roles` grants attach to) have their code locked, and their code-declared grants are shown as locked.
+ - Name, description and any extra stored grants stay editable, within the D-07 ceiling.
+- **D-17:** **A role that still has admins can't be deleted.** The delete returns a validation error that names how many admins hold the role. System roles can't be deleted.
+
+### Quality gates
+- **D-18:** Unit tests are the last plan (project rule). They cover every privilege rule in D-05 to D-09, including the concurrent last-superuser case, plus D-12 revocation and the D-14 seam (boot errors, permission filtering, run path). Docs: the cabana README and the affected `docs/` pages are updated in the same commits as the API, config and permission changes. If `admin/` changes, `check-admin-openapi.sh` and the committed `modules/boardwalk/dist` gate (`check-admin-dist.sh`) apply.
+
+### Claude's Discretion
+- How the internal pseudo-plugin is shaped and named (id, for example `summercms.cabana` / `backend.*` controller IDs), as long as it reuses the existing `summercms.cabana` migration id and doesn't collide with the reserved first path segments.
+- Exact Go identifiers for the D-14 capability and its types.
+- List columns and filters (Winter's set: login, name, email, role, last login, activated; filters: role, superuser for superusers only, trashed), and form tab layout.
+- The lock strategy for D-09.
+- Whether toolbar and bulk actions join the D-14 seam in this phase.
+
+
+
+
+## Canonical References
+
+**Downstream agents MUST read these before planning or implementing.**
+
+### Phase scope and consumers
+- `.planning/ROADMAP.md` § "Phase 19.6.1: Backend Administrators screen": goal and success criteria
+- `.planning/phases/19.7-generic-mcp-module/19.7-CONTEXT.md`: D-03 to D-07 and D-34 (the link record action lands on this screen through the D-14 seam)
+- `.planning/notes/2026-10-17-generic-mcp-module.md`: design note behind 19.7's use of this screen
+- `.planning/phases/19.6-two-factor-auth-and-device-flow-in-sm-user-plugin/19.6-CONTEXT.md`: D-15 ("Reset 2FA" action contributed to another plugin's screen, a candidate user of the D-14 seam)
+- `.planning/notes/2026-10-07-embedded-admin-release-gate.md`: rebuild and commit the dist if `admin/` changes
+
+### cabana internals to extend
+- `modules/cabana/README.md`: module docs to update
+- `modules/cabana/contracts.go`: `BackendUser`, `BackendUserRole`, `Allows`, `requiredOf`
+- `modules/cabana/auth.go`: `FindByID` permission merge (`principalFrom`, `applyUserPermissions`)
+- `modules/cabana/registry.go`: `compilePermissionCatalog`, `rolePermissions`, reserved path segments, controller ID rules
+- `modules/cabana/field_permission.go`: `permissioneditor`, `PermissionEditorProvider`, `PermissionOption.Locked`
+- `modules/cabana/extension.go`: `compileExtension` (actions only come from the owning controller today)
+- `modules/cabana/crud.go`: form lifecycle hooks, `offeredRecordActions`, `RecordAction`, row locks
+- `modules/cabana/actions.go`: action run paths and diary logging
+- `modules/cabana/http.go`: `Activate`, route mounting, account endpoints
+- `modules/cabana/account.go`: My Account allow-list (stays unchanged)
+- `modules/cabana/commands.go`, `modules/cabana/token_commands.go`: `admin:*` commands (unchanged behaviour)
+- `modules/lagoon/backend_admin_migrations.go`: `backend_users` and `backend_user_roles` schema and seeded system roles
+- `pact/capabilities.go`: `HasPermissions`, `HasAdminControllers`, `HasSettings`, `AdminRecordAction`, `HasAdminRecordActions`, form hooks
+
+### Reference implementations
+- `../sm-grzybyfunkcjonalne-app/plugins/golem15/user/controllers/users_admin_controller.go`: Users screen with radio permission editor, bulk and record actions
+- `../sm-grzybyfunkcjonalne-app/plugins/golem15/user/classes/privileged.go`: privileged-group guard in FormBeforeUpdate/Delete, re-reading the row in the tx
+- `../examples/golem15-wintercms-starter/modules/backend/controllers/Users.php`: superuser filtering, per-user PermissionEditor, restore
+- `../examples/golem15-wintercms-starter/modules/backend/controllers/UserRoles.php`
+- `../examples/golem15-wintercms-starter/modules/backend/models/user/fields.yaml`, `../examples/golem15-wintercms-starter/modules/backend/models/userrole/fields.yaml`
+- `../examples/golem15-wintercms-starter/modules/backend/models/UserRole.php`: system roles
+- `../examples/golem15-wintercms-starter/modules/backend/formwidgets/PermissionEditor.php` (lines ~93-150): `getSaveValueSecure` ceiling
+
+
+
+
+## Existing Code Insights
+
+### Reusable Assets
+- Generic SPA renderer (`admin/src/views/ListView.vue`, `FormView.vue`, `PreviewView.vue`, `components/form/FieldRenderer.vue`): a YAML-declared controller renders without new Vue code.
+- `admin/src/components/form/fields/PermissionEditorField.vue` already handles `Locked` options.
+- `admin/src/components/form/RecordActions.vue` renders record actions on the preview screen.
+- `permissioneditor` field (radio and checkbox modes) with per-request options from `PermissionEditorProvider`, which can depend on who is asking. That is the D-07 hook.
+- Form lifecycle hooks (`FormBeforeCreate/Update/Delete`, `FormRules`, `ListExtendQuery`, `FormExtendQuery`) run inside the save transaction with the row locked `FOR UPDATE`. `cabana.TxFromContext` is available.
+
+### Established Patterns
+- Before-update hooks see the already-filled model. To compare with stored values (self-edit, demotion), re-read the row in the tx, as sm-user-plugin's `guardCredentials` does.
+- Permission merge order: role JSON, then code-declared role grants, then user overrides (1 grants; -1 or 0 removes). Superusers bypass `Allows` except under scoped API tokens.
+- Soft delete via `gorm.DeletedAt`. `tokens_valid_after` revocation, as used by `admin:reset-password`.
+- Action runs are diary-logged with `admin_id` (bulk and record).
+
+### Integration Points
+- cabana registers no controllers or permissions today, and `Activate` returns nil when no plugin has controllers. An internal pseudo-plugin added to the `plugins` slice can supply the controllers, permissions, settings entries and an embedded AdminFS. With it, the admin routes always mount. The researcher confirms nothing depends on "no controllers means no admin routes".
+- The D-14 seam merges into `compileExtension` (`extension.go`), next to the owning controller's actions.
+- Admin OpenAPI: swag annotations in cabana regenerate `admin/openapi/admin.json` and `admin/src/api/schema.d.ts` (`scripts/check-admin-openapi.sh`).
+
+
+
+
+## Specific Ideas
+
+- Mirror WinterCMS Settings → System → Administrators / Roles in look and behaviour, except where the decisions above deliberately tighten it: the role-assignment ceiling (D-07), last-superuser protection (D-09), and self-edit refusal (D-08).
+- Winter has no last-superuser rule; D-09 is new.
+
+
+
+
+## Deferred Ideas
+
+- Invite or welcome mail on admin create (Winter's `send_invite`): a later todo.
+- A "send password reset link" record action and force-change-on-next-login for backend admins.
+- Per-row action menus on list views.
+- Backend user groups (Winter's groups tab). No table exists.
+- Impersonate admin (Winter's `backend.impersonate_users`).
+
+### Reviewed Todos (not folded)
+- **Audit-log admin action runs with the admin id** (`.planning/todos/pending/admin-action-audit-log.md`): kept deferred to keep the phase short. Record and bulk runs already diary-log `admin_id`.
+- **Verified link between a frontend user and a backend user** (`.planning/todos/pending/2026-10-17-frontend-backend-account-link.md`): already folded into 19.7 (D-01). This phase only provides its seam.
+- The other keyword matches (scaffolding, plugin ports, i18n, benchmarks) were unrelated to this phase.
+
+
+
+---
+
+*Phase: 19.6.1-backend-administrators-screen*
+*Context gathered: 2026-10-21*
diff --git a/.planning/phases/19.6.1-backend-administrators-screen/19.6.1-DISCUSSION-LOG.md b/.planning/phases/19.6.1-backend-administrators-screen/19.6.1-DISCUSSION-LOG.md
new file mode 100644
index 00000000..05e3ecbc
--- /dev/null
+++ b/.planning/phases/19.6.1-backend-administrators-screen/19.6.1-DISCUSSION-LOG.md
@@ -0,0 +1,56 @@
+# Phase 19.6.1: Backend Administrators screen - Discussion Log
+
+> **Audit trail only.** Do not use as input to planning, research, or execution agents.
+> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
+
+**Date:** 2026-10-21
+**Phase:** 19.6.1-backend-administrators-screen
+**Areas discussed:** Permissions and placement, Privilege edge rules, Lifecycle and passwords, Record-action seam and roles
+
+---
+
+## Permissions and placement
+
+| Question | Options | Selected |
+|----------|---------|----------|
+| Permission codes | Two codes (`backend.manage_users` + `backend.manage_roles`) / One code as in Winter / Superuser only | Two codes |
+| Placement | Settings → System section / Top-level navigation item | Settings → System |
+| Superusers for non-superusers | Hidden as in Winter / Visible read-only | Hidden |
+| Default role grant | None / Grant to `developer` system role | None |
+
+## Privilege edge rules
+
+| Question | Options | Selected |
+|----------|---------|----------|
+| Per-user permission override on the form | Yes, radio editor / No, roles only | Yes, radio |
+| Reach of the "can't grant more" ceiling | Permissions and role assignment / Permission editor only (Winter) | Permissions and role assignment |
+| Self-edit | Allowed with privileged fields read-only / Redirect to My Account | Allowed, read-only privileged fields |
+| Last-superuser enforcement | Every write path, locked / Admin screen only | Every write path |
+
+## Lifecycle and passwords
+
+| Question | Options | Selected |
+|----------|---------|----------|
+| Removal | Deactivate + soft delete + restore / Deactivate only / Deactivate + hard delete | Deactivate + soft delete + restore |
+| Password set/reset | Typed in form / Form + reset-link action / Form + force change | Typed in form |
+| Revocation on deactivate/delete/password set | Bump `tokens_valid_after` / Principal check only | Bump |
+| Invite mail on create | None this phase / Optional `send_invite` | None |
+
+## Record-action seam and roles
+
+| Question | Options | Selected |
+|----------|---------|----------|
+| Seam shape | Generic cross-controller extension / Administrators-only hook | Generic |
+| Where actions appear | Preview only / Preview + per-row list menu | Preview only |
+| Fold admin-action audit-log todo | No, keep deferred / Fold in | Keep deferred |
+| Roles: system roles and delete in use | Winter rules + block delete in use / Winter rules + unassign on delete | Block delete in use |
+
+The user chose the recommended option in every case and added no free-text notes.
+
+## Claude's Discretion
+
+- Shape and name of the internal pseudo-plugin, Go identifiers of the seam, list columns and filters, the D-09 lock strategy, and whether toolbar and bulk actions join the seam.
+
+## Deferred Ideas
+
+- Invite mail, reset-link action, force-change-on-next-login, per-row list actions, backend groups, impersonation, and the admin-action audit log.