| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2026-07-24 | Add self-service TOTP enrollment UI and witnessed admin reset | erdgeist | |
| 2026-07-24 | Remove restful_authentication's forget_me relic | erdgeist | |
| 2026-07-24 | Add TOTP enrollment and verification to User, witnessed in the action log | erdgeist | |
| 2026-07-24 | Prevent the more … link from line breaking | erdgeist | |
| 2026-07-24 | Reduce visual clutter: remove time from article partials | erdgeist | |
| 2026-07-23 | Center the tags list horizontally on mobile views | erdgeist | |
| 2026-07-23 | Make shadow rules toggle override aware | erdgeist | |
| 2026-07-23 | Prevent headline in partial cropping of anything within A4 dimensions | erdgeist | |
| 2026-07-23 | Remove orphaned css rule | erdgeist | |
| 2026-07-23 | More tiny visual cleanups | erdgeist | |
| 2026-07-23 | articles partials now render the thumb of their headline media in the list | erdgeist | |
| 2026-07-23 | Add miniscule highlight line around pdf cards, so they read better against dark background | erdgeist | |
| 2026-07-23 | Bottom align headline pdf cards | erdgeist | |
| 2026-07-23 | Restyle pdf headline cards | erdgeist | |
| 2026-07-23 | Force tags to be lowercase. A script unifies existing tags in both cases | erdgeist | |
| 2026-07-23 | Turn the asset upload forms into file drop targets | erdgeist | |
| Dropped files land in the existing file input and submit through the unchanged form. An empty name field is prefilled from the basename. | |||
| 2026-07-23 | Zoom the action log on assets | erdgeist | |
| Asset names in summaries and publish deltas link to assets#show with an inline Chronik beside each, suppressed inside that asset's own zoom, per the node convention. assets#show gains a history button. Also renames the details summary (no longer only translations) and moves View Diff onto its own line. | |||
| 2026-07-23 | Keep in-editor asset curation off the head, layering it like every edit | erdgeist | |
| ensure_autosave! gives body keystrokes and asset curation one shared layer, so head is never mutated in place and every curation change surfaces in the publish delta. Stale rendered join ids are mapped across the clone via asset_id. Curation now requires holding the lock; a missing lock answers 423, matching the autosave endpoint. | |||
| 2026-07-23 | Record asset deltas at publish, with changed assets as participants | erdgeist | |
| 2026-07-23 | Witness asset uploads and out-of-band attaches in the action log | erdgeist | |
| 2026-07-23 | Witness asset destruction, naming every node it strips | erdgeist | |
| 2026-07-23 | Convert the log's node zoom to participants, completing subtree histories | erdgeist | |
| 2026-07-23 | Add action_participants migration | erdgeist | |
| 2026-07-23 | Add action_participants model | erdgeist | |
| 2026-07-23 | Add action_participants, recording every node a trash/destroy touches | erdgeist | |
| 2026-07-22 | Add tests for the asset<->nodes attach cycle and the flash notice survival fix | erdgeist | |
| 2026-07-22 | Add attached nodes subsection in assets#show and thumbnail in nodes#create | erdgeist | |
| 2026-07-22 | Make important flash notices survive the boilerplate Node-locked info in nodes controller | erdgeist | |
| 2026-07-22 | Make nodes#show's add event/child buttons look consistent | erdgeist | |
| 2026-07-22 | Implement controller and view side of the attach logic | erdgeist | |
| 2026-07-22 | factor out flash rendering from layouts/admin | erdgeist | |
| 2026-07-22 | Add Node#attach_asset! attaching across all lifecycle rows | erdgeist | |
| 2026-07-22 | Historic PDF variant artefacts don't belong in the HISTORY | erdgeist | |
| 2026-07-22 | Explain the rest of how PDFs are used as headlines | erdgeist | |
| 2026-07-22 | Add the attachments to the history book | erdgeist | |
| 2026-07-22 | Remove orphaned recent changes css rules | erdgeist | |
| 2026-07-22 | Split nodes#edit into a four-quadrant layout on desktop | erdgeist | |
| 2026-07-22 | Retire nodes#recent, superseded by the action log | erdgeist | |
| 2026-07-22 | Fix mobile viewport width from 800px to 100% | erdgeist | |
| 2026-07-22 | Fix Node#title ignoring autosave | erdgeist | |
| head ? head.title : draft.title never accounted for a node with only an autosave, reuses editable_page | |||
| 2026-07-21 | Render PDF headlines as document cards, not lightbox images | erdgeist | |
| A starred PDF previously ran through the same crop-and-lightbox path a photo does -- exactly the awkward treatment explicit headline designation was meant to avoid. _headline_image.html.erb now branches on @headline_asset.pdf?: a PDF renders as a linked card (a :medium thumbnail, a file icon, its name), no gallery participation at all. The existing image-headline and gallery-fallback logic is otherwise unchanged, now scoped to an image-specific headline only. Other attached PDFs -- headlined or not -- list below as plain links, same reasoning as why non-headline photos still get a gallery trigger: an attached document shouldn't go invisible just because nothing's been starred yet. headline_image's own render guard needed widening to cover a page with PDFs attached but no images and no headline at all -- the one case none of the existing conditions accounted for. | |||
| 2026-07-21 | PDFs currently should have no credits attached to them in display | erdgeist | |
| 2026-07-21 | More PDF headline eligibility | erdgeist | |
| 2026-07-21 | Widen nodes#show to all attachments | erdgeist | |
| 2026-07-21 | Make PDFs eligible for headline and allow searching assets by filename | erdgeist | |
| 2026-07-21 | Extract Page#headline_asset | erdgeist | |
| The same related_assets.find_by(headline: true) query was written by hand in three places -- content_helper, nodes#show, and the chapter teaser partial (which was still using assets.first, the old position-based rule, until now). Collapsed to one method, one query. | |||
| 2026-07-21 | Implement model side of PDF raster preview generation | erdgeist | |
| 2026-07-21 | Add storage isolation for tests, preventing live data destruction | erdgeist | |
| 2026-07-21 | Resolve preview's page-to-node lookup for every layer | erdgeist | |
| pages_controller#preview loaded a page by id and rendered it directly, assuming @page.node was always present. True for head and draft, since both carry a real node_id: false for autosave, which deliberately has node_id: nil (the mechanism that excludes it from Node#pages and the revision count). A node with an autosave and no draft underneath it: lock, start editing, never explicitly save a draft: loads that autosave directly with no node at all, and any view code assuming @page.node is real (headline image, credits, gallery links) raises. When @page has no node, resolve it by checking autosave_id, then draft_id, then head_id on Node, and set @page.node in memory only: the autosave's node_id: nil is never persisted differently. The existing swap from draft to a fresher autosave, when both exist, is unchanged. Three tests: draft with a fresher autosave on top, autosave with no draft underneath, and the ordinary head-only case with neither. | |||
| 2026-07-21 | Remove Page#update_assets | erdgeist | |
| Only caller left was the sort_images action removed last commit. Kept alive only as a test-setup convenience for diff_against coverage, which is what it actually was -- an implicit API with no deliberate contract, sitting there for anyone to call. Rewrote the one test to set up its fixture state directly via related_assets rather than through a method whose real job was already done. | |||
