| Age | Commit message (Expand) | Author |
| 36 hours | Accept blank template names in the allowlist validations | erdgeist |
| 36 hours | Emit a report-only Content-Security-Policy with nonced inline scripts | erdgeist |
| 37 hours | Give action log entries per-verb icons | erdgeist |
| 2 days | Annotate the History list with each revision's lifecycle | erdgeist |
| 2 days | Give Trash a proper title on lazy construction | erdgeist |
| 2 days | Keep the Trash out of the drafts surfaces | erdgeist |
| 2 days | Teach the action log reader the Trash vocabulary | erdgeist |
| 2 days | Add Trash affordances: cockpit, listing, dashboard entry | erdgeist |
| 2 days | Route and control trash, restore, and permanent deletion | erdgeist |
| 2 days | Add trash!, restore_from_trash!, and destroy_from_trash! with log entries | erdgeist |
| 2 days | Bootstrap the Trash node: reserved slug, identity, guards | erdgeist |
| 2 days | Fix the cleanup cascade for a real node destroy | erdgeist |
| 2 days | Refuse destroying nodes that still have children | erdgeist |
| 2 days | Allowlist aggregate order columns and template names | erdgeist |
| 2 days | Implement transparent password hash migration | erdgeist |
| 2 days | Fix computed_unique_name code and consumer | erdgeist |
| 2 days | Retire recent changes widget, replace with action log | erdgeist |
| 2 days | Retire recent changes widget, replace with action log | erdgeist |
| 3 days | Cutover to new Recent Changes widget | erdgeist |
| 3 days | Move rrule builder to a partial and share between events#new and events#edit | erdgeist |
| 3 days | Aggregate selected weeks in a more human friendly form | erdgeist |
| 3 days | managed RRULE constructs now include week selection | erdgeist |
| 4 days | Split current_unique_name in a setter and an accessor | erdgeist |
| 4 days | nodes#show's revisions subsection renamed to history | erdgeist |
| 4 days | Condense the action log into a scannable table | erdgeist |
| 4 days | Don't reference your own user as 'du' in action log. It breaks grammar. | erdgeist |
| 4 days | Add a reader for the action log at admin/log | erdgeist |
| 4 days | Record the full lifecycle contract in NodeAction entries | erdgeist |
| 4 days | Provide parent_unique_name in nodes#new if parent is already pre-set | erdgeist |
| 5 days | Add NodeAction: an append-only log of who did what to a node | erdgeist |
| 5 days | Make the recent-changes page match the widget it links from | erdgeist |
| 5 days | Remove dead admin/_recent_changes partial | erdgeist |
| 5 days | Supply related-asset URLs/name and public inline-image CSS | erdgeist |
| 5 days | Extend static-asset cache-busting to the public layout | erdgeist |
| 6 days | Crop headline images to aspect ratio instead of distorting them | erdgeist |
| 6 days | Add a :large FileAttachment style for full-width inline body images | erdgeist |
| 6 days | Retire wipe_draft! and find_or_create_draft from production code | erdgeist |
| 6 days | Add chapter images: thumbnail on the list, headline image on the detail page | erdgeist |
| 6 days | Add a toggleable live preview panel to both editors | erdgeist |
| 6 days | Make revisions locale aware | erdgeist |
| 6 days | Add tooltips to all navbar items | erdgeist |
| 6 days | Make tags a pill list on nodes#show | erdgeist |
| 6 days | Store return_to before resetting session in loging. Fixes returning to an admin page before logging in | erdgeist |
| 6 days | Re-add language selector, but fix the mis-nomer for english pages | erdgeist |
| 6 days | Remove orphaned language selector for admin views | erdgeist |
| 6 days | Add cache-buster using mtime of css and js files outside the asset pipeline | erdgeist |
| 6 days | Remove redundant default translation from the translations subsection | erdgeist |
| 6 days | Fix: p elements can't contain buttons. Convert it to a div | erdgeist |
| 6 days | Make revision diffs locale-aware, defaulting to whichever locale changed | erdgeist |
| 6 days | clone_attributes_from: update translations in place, not delete+recreate | erdgeist |