<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/test/models/helpers, 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-07T23:40:59Z</updated>
<entry>
<title>Pin the disclosure partial against a silent fallback</title>
<updated>2026-08-07T23:40:59Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-07T23:40:59Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=5699572861085bfb0b375f44e2f35ee8eee3f8c6'/>
<id>urn:sha1:5699572861085bfb0b375f44e2f35ee8eee3f8c6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Re-structure sitemap, all subpages collapsed by default, visually tightened</title>
<updated>2026-08-06T19:15:03Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-06T19:15:03Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=0f8a3066c55b6ecb9d95b3e9306eee5262928b14'/>
<id>urn:sha1:0f8a3066c55b6ecb9d95b3e9306eee5262928b14</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Witness calendar entries</title>
<updated>2026-08-02T20:45:51Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-02T20:45:51Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=da59dea46f55c64a3090b83a6321fbecd2ee6f60'/>
<id>urn:sha1:da59dea46f55c64a3090b83a6321fbecd2ee6f60</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Test the neighbour revision pair arithmetic</title>
<updated>2026-08-02T12:58:51Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-02T12:58:51Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=f823d28749b8fc0c30fb92e1ffa8f9b6cb1b8c5d'/>
<id>urn:sha1:f823d28749b8fc0c30fb92e1ffa8f9b6cb1b8c5d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Test that aggregate? keeps the attributes the editor permits</title>
<updated>2026-08-02T12:32:02Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-02T12:32:02Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=39ebecace66ce36f4a896fefb86814dde042577f'/>
<id>urn:sha1:39ebecace66ce36f4a896fefb86814dde042577f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Render PDF headlines as document cards, not lightbox images</title>
<updated>2026-07-21T21:17:56Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-21T21:17:56Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=8f3f58e3010fa7c923b77b7d2050175890b58f9b'/>
<id>urn:sha1:8f3f58e3010fa7c923b77b7d2050175890b58f9b</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>Make headline images explicit, add asset credits</title>
<updated>2026-07-20T17:45:43Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-20T17:45:43Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=836308471f8d31ccdcdd3a5bd88bc76cc1c0831b'/>
<id>urn:sha1:836308471f8d31ccdcdd3a5bd88bc76cc1c0831b</id>
<content type='text'>
- related_assets gains a `headline` boolean (DB-enforced: at most one
  per page), replacing "first image by position" as the headline
  rule. A rake task backfills the current first image on every live
  head/draft, so nothing changes visually until an editor changes it.
- The image picker sidebar gets a star toggle reflecting the flag;
  the TinyMCE inline-image picker's badge now reads it too, instead
  of assuming position 0.
- No headline chosen (or none attached) now falls back to the
  gallery-count caption itself becoming the lightbox trigger, instead
  of the gallery being unreachable.
- Assets gain creator, source_url, and license_key (against a new
  config/asset_licenses.yml dictionary). asset_credit renders a
  degrading attribution line, reused as a hidden per-image glightbox
  caption so credit is one click away for every image, not only the
  headline's always-visible one.
- Fixed: asset thumbnails rendered unconditionally regardless of
  whether a real variant exists on disk. Asset#has_variant? checks
  file existence, not content type -- some legacy PDFs have real
  pre-rewrite thumbnails a content-type check would have hidden.
- assets#new/edit rebuilt onto the same node_description/node_content
  layout as assets#show, picking up the three new fields in the
  process.
</content>
</entry>
<entry>
<title>Give action log entries per-verb icons</title>
<updated>2026-07-18T13:28:30Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-18T13:28:30Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=6b6e50909cc77de1797e88be5445c5b643b008a9'/>
<id>urn:sha1:6b6e50909cc77de1797e88be5445c5b643b008a9</id>
<content type='text'>
A muted glyph before each sentence makes both log surfaces
scannable by verb: create, publish, move, trash, restore,
destroy, and the discard pair. Rollback publishes get their own
icon (history) distinct from ordinary promotion. Unknown verbs
fall back to a dashed circle.
</content>
</entry>
<entry>
<title>Annotate the History list with each revision's lifecycle</title>
<updated>2026-07-18T02:33:53Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-18T02:33:53Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=49de2e14972030a7ef0ca36a94ab55a23a2f3596'/>
<id>urn:sha1:49de2e14972030a7ef0ca36a94ab55a23a2f3596</id>
<content type='text'>
Each row in nodes#show's History section now carries terse badges
from the action log: created, published, and restored (rollback
re-promotion), with date and actor, rendered from entry metadata
alone. Backfilled entries wear the inferred marker, so
reconstructed provenance stays distinguishable from witnessed
history. A revision that was published and later restored shows
both badges chronologically -- its true biography.

Only create and publish entries carry page_id; trash, restore, and
destroy annotate the node's own log zoom instead of any single
revision, by design.
</content>
</entry>
<entry>
<title>Teach the action log reader the Trash vocabulary</title>
<updated>2026-07-18T00:16:23Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-18T00:16:23Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=d85c7998e5faa0da53514bae8cc2ccb9a9fe0cd3'/>
<id>urn:sha1:d85c7998e5faa0da53514bae8cc2ccb9a9fe0cd3</id>
<content type='text'>
Sentences for trash (with the pre-trash path), restore_from_trash
(with the destination), and destroy (with the final path, read
from its flat create-symmetric key).
</content>
</entry>
</feed>
