| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2026-08-09 | Attach an asset to a page from the asset's own page | erdgeist | |
| The picker moves from assets/edit to assets/show, where the list of attached pages already is. A member route, POST assets/:id/attach_to_node, replaces the ride on #update. Supersedes the picker wiring in the previous commit; what remains of it is @attach_node in #create, the flash composition and the corrected hint. | |||
| 2026-08-09 | Attach an asset to a page from its edit form | erdgeist | |
| 2026-08-09 | Refuse destroying an asset that is still attached | erdgeist | |
| 2026-08-09 | Attach assets to the draft instead of to every lifecycle row | erdgeist | |
| Node#attach_asset! writes to the node's draft alone, creating one from the head when none is pending. It refuses when another user holds the lock, and when an autosave already exists The asset_attach verb goes with it. create_new_draft names the editor on the draft it creates and the publish entry's asset delta reports the attachment. | |||
| 2026-08-08 | Move the external homepage onto the draft | erdgeist | |
| 2026-08-07 | Show a pending address in the cockpit, the diff and the publish confirm | erdgeist | |
| 2026-08-07 | Move the pending address from the node onto the draft | erdgeist | |
| 2026-08-06 | Re-structure sitemap, all subpages collapsed by default, visually tightened | erdgeist | |
| 2026-08-06 | Let editors set a node external homepage, gated and witnessed | erdgeist | |
| 2026-08-06 | Remove mis-leading flag for nodes in sitemap | erdgeist | |
| 2026-08-06 | Rebuild the sitemap rows around the shared title and action patterns | erdgeist | |
| 2026-08-06 | Preload page titles for the sitemap, and order containers before leaves | erdgeist | |
| 2026-08-06 | Make the events and assets lists work on a phone | erdgeist | |
| 2026-08-06 | Reduce the events list to title, when and actions | erdgeist | |
| 2026-08-05 | Search assets and events, and order events by when they happen | erdgeist | |
| 2026-08-04 | Tidy up headings on house keeping views | erdgeist | |
| - Collapse page headers into one action row with an optional hint - limit will_paginate to one row | |||
| 2026-08-04 | Give node lists a flag column and a shared action bar | erdgeist | |
| 2026-08-04 | Witness every promotion and demotion made through the roles form | erdgeist | |
| 2026-08-03 | Require elevation before editing another account | erdgeist | |
| 2026-08-03 | Reroute events, tags, menuitems under /admin and reture events-without-a-page view | erdgeist | |
| 2026-08-03 | Share one flag stack between the account roster and the events list | erdgeist | |
| 2026-08-03 | Render dates, booleans and counts through the locale files | erdgeist | |
| 2026-08-03 | Believe the file over the browser about what was uploaded | erdgeist | |
| 2026-08-03 | Run ImageMagick under a policy that travels with the project | erdgeist | |
| 2026-08-03 | Link each account to its own entries in the log | erdgeist | |
| 2026-08-03 | Display stale accounts in users#index | erdgeist | |
| 2026-08-03 | Display last login date in users#show | erdgeist | |
| 2026-08-02 | Log user logins and reconstruct last activity from logs | erdgeist | |
| 2026-08-02 | Report changing the end time of an event in action log | erdgeist | |
| 2026-08-02 | Let an event start without ending | erdgeist | |
| 2026-08-02 | Witness calendar entries | erdgeist | |
| 2026-08-02 | Prepare the user list for stacked account flags | erdgeist | |
| 2026-08-02 | Add #edit_grid class to translation editor so that CSS rules will match | erdgeist | |
| 2026-08-02 | Witness account creation | erdgeist | |
| 2026-08-02 | Pick an existing translation when none has changed | erdgeist | |
| 2026-08-02 | Say when a translation is unchanged and where to look instead | erdgeist | |
| 2026-08-02 | Keep the compared translation independent of the interface language | erdgeist | |
| 2026-08-02 | Let the sanitizer honour what the editor permits | erdgeist | |
| 2026-08-01 | Add partial for disclosure realm | erdgeist | |
| 2026-08-01 | Report validation failures without the exception preamble | erdgeist | |
| 2026-08-01 | Derive the Atom feed timestamp from its entries | erdgeist | |
| 2026-08-01 | Require a second factor for elevation, not for holding admin | erdgeist | |
| 2026-08-01 | tidy up user list, make otp flag more visible | erdgeist | |
| 2026-08-01 | Allow aggregate to order by slug and paint chapters list more nicely | erdgeist | |
| 2026-08-01 | Fix some spacing issues in user table and the wrapper | erdgeist | |
| 2026-08-01 | Let Redaktion grant and revoke its own role | erdgeist | |
| Any holder may add or remove another account, witnessed as redaktion_grant/revoke so the vouching is legible. Not behind elevation: onboarding must not wait for a keyholder, and a compromised Redaktion account can already publish. | |||
| 2026-08-01 | Show and extend the elevation window | erdgeist | |
| A banner appears while elevated, counting down in minutes and carrying extend and drop controls. Three extensions of 30 minutes are allowed, so the window is at most two hours without a fresh code; a code resets the budget. The countdown is advisory, the server-side check authoritative, so it says "expired" rather than vanishing. The post-login flash tells an admin the timer has started. | |||
| 2026-08-01 | Require a fresh second factor for user management | erdgeist | |
| Administrative actions are gated behind a 30-minute elevation window: creating and retiring accounts, editing roles, clearing a second factor. Reading the list is not gated, and content work is untouched. elevated? is tied to is_admin?, so losing the role closes the window at once. The window opens when the second factor verifies at login, so an admin heading straight for user management is already elevated, and closes on logout with the other session state. Five wrong codes end the session, mirroring the login challenge. users#update carries no elevation filter, since self-service reaches it; the role field is gated in user_params instead and fails closed. | |||
| 2026-08-01 | Declare role requirements per controller | erdgeist | |
| 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. | |||
| 2026-07-31 | Warn before the gate refuses, and check restore destinations | erdgeist | |
| nodes#new marks the kinds that place under /updates, derived from each kind's own path_prefix. The three parent pickers mark candidates the current user cannot publish into; menu_search returns needs_redaktion per result, computed per user rather than as a bare restricted flag, and the menu-item picker opts out. restore_from_trash! checks its destination: the restore is the move, applied rather than staged, so no later publish would have caught it. The node returns as a draft either way. | |||
