<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/app/models, 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-20T17:39:39Z</updated>
<entry>
<title>Add banner render logic</title>
<updated>2026-08-20T17:39:39Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T17:39:39Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=a986b1f2b5676624f02373cb54eb3b81b18f3f79'/>
<id>urn:sha1:a986b1f2b5676624f02373cb54eb3b81b18f3f79</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Surface redirects in nodes#show, the action log and when publishing</title>
<updated>2026-08-20T15:37:01Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T15:37:01Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=a1794d3087e6cbd228f3641e7313815d8c59695f'/>
<id>urn:sha1:a1794d3087e6cbd228f3641e7313815d8c59695f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Force a blank redirect status to nil</title>
<updated>2026-08-20T11:19:38Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T11:19:38Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=3e77e5fca9f66f5be9c12085fd68c4e9d0ba79be'/>
<id>urn:sha1:3e77e5fca9f66f5be9c12085fd68c4e9d0ba79be</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Also redirect on restricted pages</title>
<updated>2026-08-20T11:03:33Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T11:03:33Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=9d5c3cf1e5db83203ac30f3c1ddee9a61e4b14d0'/>
<id>urn:sha1:9d5c3cf1e5db83203ac30f3c1ddee9a61e4b14d0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add redirect ui in in nodes#edit and apply some minor cleanup</title>
<updated>2026-08-20T10:50:30Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-20T10:50:30Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=a8cf725312d245d8d1f1df0fff22718975ce249e'/>
<id>urn:sha1:a8cf725312d245d8d1f1df0fff22718975ce249e</id>
<content type='text'>
Also give search inputs a magnifier and a clear control: input_group
wraps a field with an icon and, where clearing is meaningful, a
button that empties it and any hidden companion named by data-clears.

Clean up some inconistency between field hints presented as p and as
span.

Remove stray console.log.
</content>
</entry>
<entry>
<title>Redirect a page to a node or an external URL</title>
<updated>2026-08-19T14:05:40Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-19T14:05:40Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=4df88b601b1900c287051d827eaff46f498f60d0'/>
<id>urn:sha1:4df88b601b1900c287051d827eaff46f498f60d0</id>
<content type='text'>
Page#redirect_target resolves the precedence and returns nil for a
destination that is restricted or has no head, so a page with a broken
target renders itself rather than linking nowhere. The banner partial will
call the same method, so the redirect and the link cannot drift.

One hop, no exceptions, checked in publish_draft! rather than as a
validation: two nodes publishing concurrently could each pass a save-time
check and still produce a chain. "Live" means heads only, a draft redirect
that has not published is not yet a link anyone can follow.

Node.search excludes redirecting pages. editor_search does not: an editor
looking for one searches by title, and only the body is worth hiding.
</content>
</entry>
<entry>
<title>Drop nodes.external_url</title>
<updated>2026-08-09T14:03:40Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-09T14:03:40Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=0f4288d91de7b48f7bbed832ca80246b0055cc64'/>
<id>urn:sha1:0f4288d91de7b48f7bbed832ca80246b0055cc64</id>
<content type='text'>
The column moved to page.rb and was now written only by publish_draft!
and by the chapter seed, and read by nothing.

lib/tasks/pages.rake goes with it. backfill_external_url reads the dropped
column. backfill_address is spent and no longer safe to re-run.
</content>
</entry>
<entry>
<title>Report every editorial attribute in the revision diff</title>
<updated>2026-08-09T13:45:56Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-09T13:45:56Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=9d32458491d79f8e06a706375030c78282f4427b'/>
<id>urn:sha1:9d32458491d79f8e06a706375030c78282f4427b</id>
<content type='text'>
diff_against gained external_url, published_at and user. The view renders
each metadata section only when that attribute changed, and says so once
when none did.

Metadata now precedes the locale pointer, which speaks only of translations:
above the metadata it read as "nothing changed" on a revision that had moved
the page.
</content>
</entry>
<entry>
<title>Refuse destroying an asset that is still attached</title>
<updated>2026-08-09T01:35:48Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-09T01:35:48Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=d16161eab9029a509951146b80334c304c35fd34'/>
<id>urn:sha1:d16161eab9029a509951146b80334c304c35fd34</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Attach assets to the draft instead of to every lifecycle row</title>
<updated>2026-08-09T01:33:55Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-09T01:33:55Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=20c735b0c5a2db9b8984848253ad99332d6211a8'/>
<id>urn:sha1:20c735b0c5a2db9b8984848253ad99332d6211a8</id>
<content type='text'>
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.
</content>
</entry>
</feed>
