<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/app/views/admin, branch master</title>
<subtitle>[no description]</subtitle>
<id>http://erdgeist.org/gitweb/cccms/atom?h=master</id>
<link rel='self' href='http://erdgeist.org/gitweb/cccms/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/'/>
<updated>2026-08-14T18:14:46Z</updated>
<entry>
<title>Retire conventions overview page</title>
<updated>2026-08-14T18:14:46Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-14T18:14:46Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=fe89095ccb34bcdc9838a71bc1fa48279ea3ec8c'/>
<id>urn:sha1:fe89095ccb34bcdc9838a71bc1fa48279ea3ec8c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Declare role requirements per controller</title>
<updated>2026-07-31T22:27:34Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-31T22:27:34Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=8bcacace28df52fd972c54e6850aa3b93f5c8bdf'/>
<id>urn:sha1:8bcacace28df52fd972c54e6850aa3b93f5c8bdf</id>
<content type='text'>
RoleRequired supplies require_redaktion and require_admin for surfaces that
are not nodes and so cannot be reached by Node#restricted?.

Navigation is content rather than plumbing, so menu_items requires
redaktion. User management is janitorial and requires admin: index, new,
create, reset_otp, deactivate, reactivate. verify_status now also covers
show, without which any logged-in user could read any account by walking a
small id space. Editing your own account stays open.

The dashboard hides the Users and Navigation buttons from those who cannot
use them; everything else stays visible to everyone. Both denials share one
message and land on the dashboard.

Adds redella (redaktion) and alufa (redaktion + alumni) fixtures.
</content>
</entry>
<entry>
<title>Surface held locks in the dashboard's work-in-progress widget</title>
<updated>2026-07-27T00:53:21Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-27T00:53:21Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=180b5feba092db1339f7bb3217e91f0b22239bc5'/>
<id>urn:sha1:180b5feba092db1339f7bb3217e91f0b22239bc5</id>
<content type='text'>
A lock with no draft or autosave behind it was invisible to
everyone including its holder, until the next editor collided
with it. work_in_progress now admits those nodes, and the
widget names the holder rather than the last editor on any
locked row.

Also flips the ordering to stalest-first, so a backlog reads as a queue
rather than a feed, and gives the heading a real total: the count came
from the already-limited relation and could never exceed five.
</content>
</entry>
<entry>
<title>Retire orphaned drafts partial and their translations</title>
<updated>2026-07-27T00:48:03Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-27T00:48:03Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=102c33264fd1463cd88aa8245413e7b331dd9632'/>
<id>urn:sha1:102c33264fd1463cd88aa8245413e7b331dd9632</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Consolidate all main nav items in a single partial</title>
<updated>2026-07-26T22:46:00Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-26T22:46:00Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=500777d88f21bdce71a1053de3ad9f32c7c91029'/>
<id>urn:sha1:500777d88f21bdce71a1053de3ad9f32c7c91029</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Extract admin strings to i18n: dashboard, layout chrome, and the JS bridge</title>
<updated>2026-07-25T13:39:17Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-25T13:39:17Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=b7dee77cd1dd6f70e3bfa55df8b61681e9db321e'/>
<id>urn:sha1:b7dee77cd1dd6f70e3bfa55df8b61681e9db321e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Polish the OTP flows: autocomplete tokens, button dialect, QR sizing, my-account link</title>
<updated>2026-07-24T15:20:22Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-24T15:20:22Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=5f26394947d1150e2656bb22c5858ae5edcdcac7'/>
<id>urn:sha1:5f26394947d1150e2656bb22c5858ae5edcdcac7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add Trash affordances: cockpit, listing, dashboard entry</title>
<updated>2026-07-18T00:15:29Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-18T00:15:29Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=d41ee504caedbe858e24ab2a23c7a804454c64c8'/>
<id>urn:sha1:d41ee504caedbe858e24ab2a23c7a804454c64c8</id>
<content type='text'>
nodes#show gains a Trash section on trashed nodes: provenance from
the trash entry, a restore form whose parent picker pre-fills the
old parent while it still lives, and permanent deletion. A
Move-to-Trash button joins the status actions on living nodes.
nodes#trashed lists trashed subtree roots with weight, provenance,
and deletion; the dashboard housekeeping row links to it, and
trash/destroy redirect there.

Deletion from Trash now removes the whole subtree, deepest first,
each node through a real destroy! so every per-node cascade runs --
amending the never-recursive rule for this one sanctioned path
(both confirms state the count; the root entry carries
destroyed_descendants). Bare Node#destroy still refuses children.
</content>
</entry>
<entry>
<title>Retire recent changes widget, replace with action log</title>
<updated>2026-07-17T15:52:08Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-17T15:52:08Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=da5bb5788802c725f9f14b72e6a54c6c38ea5e0a'/>
<id>urn:sha1:da5bb5788802c725f9f14b72e6a54c6c38ea5e0a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Cutover to new Recent Changes widget</title>
<updated>2026-07-16T22:42:54Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-16T22:42:54Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=c810d1aa93a267dd8fcf8984c5d0b125629efa31'/>
<id>urn:sha1:c810d1aa93a267dd8fcf8984c5d0b125629efa31</id>
<content type='text'>
</content>
</entry>
</feed>
