| Age | Commit message (Expand) | Author |
| 7 hours | Add attached nodes subsection in assets#show and thumbnail in nodes#create | erdgeist |
| 9 hours | Add Node#attach_asset! attaching across all lifecycle rows | erdgeist |
| 13 hours | Retire nodes#recent, superseded by the action log | erdgeist |
| 25 hours | Fix Node#title ignoring autosave | erdgeist |
| 29 hours | Render PDF headlines as document cards, not lightbox images | erdgeist |
| 29 hours | PDFs currently should have no credits attached to them in display | erdgeist |
| 29 hours | More PDF headline eligibility | erdgeist |
| 29 hours | Make PDFs eligible for headline and allow searching assets by filename | erdgeist |
| 30 hours | Extract Page#headline_asset | erdgeist |
| 31 hours | Implement model side of PDF raster preview generation | erdgeist |
| 31 hours | Add storage isolation for tests, preventing live data destruction | erdgeist |
| 36 hours | Remove Page#update_assets | erdgeist |
| 37 hours | Render asset credit inside the gallery lightbox correctly | erdgeist |
| 37 hours | Stop related_assets from duplicating on every clone | erdgeist |
| 2 days | Make headline images explicit, add asset credits | erdgeist |
| 3 days | Link publish actions to revision diffs in recents | erdgeist |
| 3 days | Simplify sanitize_filenames for the unicode age | erdgeist |
| 4 days | Accept blank template names in the allowlist validations | erdgeist |
| 5 days | Give Trash a proper title on lazy construction | erdgeist |
| 5 days | Keep the Trash out of the drafts surfaces | erdgeist |
| 5 days | Add Trash affordances: cockpit, listing, dashboard entry | erdgeist |
| 5 days | Add trash!, restore_from_trash!, and destroy_from_trash! with log entries | erdgeist |
| 5 days | Bootstrap the Trash node: reserved slug, identity, guards | erdgeist |
| 5 days | Fix the cleanup cascade for a real node destroy | erdgeist |
| 5 days | Refuse destroying nodes that still have children | erdgeist |
| 5 days | Allowlist aggregate order columns and template names | erdgeist |
| 5 days | Implement transparent password hash migration | erdgeist |
| 5 days | Fix computed_unique_name code and consumer | erdgeist |
| 6 days | Aggregate selected weeks in a more human friendly form | erdgeist |
| 6 days | managed RRULE constructs now include week selection | erdgeist |
| 7 days | Split current_unique_name in a setter and an accessor | erdgeist |
| 7 days | Condense the action log into a scannable table | erdgeist |
| 7 days | Record the full lifecycle contract in NodeAction entries | erdgeist |
| 8 days | Add NodeAction: an append-only log of who did what to a node | erdgeist |
| 9 days | Crop headline images to aspect ratio instead of distorting them | erdgeist |
| 9 days | Add a :large FileAttachment style for full-width inline body images | erdgeist |
| 9 days | Retire wipe_draft! and find_or_create_draft from production code | erdgeist |
| 9 days | clone_attributes_from: update translations in place, not delete+recreate | erdgeist |
| 9 days | Add per-node translation management: list, edit, destroy, compare | erdgeist |
| 9 days | wipe_draft!: add a grace period to the lock-with-no-draft branch | erdgeist |
| 10 days | Carry over other-locale translations when creating an autosave | erdgeist |
| 10 days | Asset picker: attach/detach/reorder UI, read-only view, autosave fix | erdgeist |
| 10 days | Add RelatedAssetsController: search, attach, detach, reorder | erdgeist |
| 10 days | Rebuild the admin dashboard: icon nav, search, signposts, widgets | erdgeist |
| 11 days | Extract drafts/recent query logic from controller into Node | erdgeist |
| 11 days | Add drafts/recent/mine/chapters admin node views | erdgeist |
| 11 days | Make page_translations' search trigger self-installing | erdgeist |
| 12 days | Prevent a staged parent move from crashing on its own descendant | erdgeist |
| 13 days | Include assets, tags and template in diff between revisions | erdgeist |
| 13 days | Add head/draft/autosave layer comparison at three UI entry points | erdgeist |