<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/app/helpers, branch erdgeist-modernize-auth</title>
<subtitle>[no description]</subtitle>
<id>https://erdgeist.org/gitweb/cccms/atom?h=erdgeist-modernize-auth</id>
<link rel='self' href='https://erdgeist.org/gitweb/cccms/atom?h=erdgeist-modernize-auth'/>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/'/>
<updated>2026-07-16T11:50:15Z</updated>
<entry>
<title>Condense the action log into a scannable table</title>
<updated>2026-07-16T11:50:15Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-16T11:50:15Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=603ccfbd5fe96f0b83aaf3d5118aded2a39992fb'/>
<id>urn:sha1:603ccfbd5fe96f0b83aaf3d5118aded2a39992fb</id>
<content type='text'>
Several minor improvements to the action log presentation:
* Now a table with date and human readable presentation as
  rows is displayed
* If no changes in a title were detected, the old version
  is omitted
* The "inferred" flag is demoted to the end of the line
* You can zoom in on the node's history directly from a
  log line
* byline for the first publish action is preserved
* Revisions are directly linked to when a new one i
  published
</content>
</entry>
<entry>
<title>Don't reference your own user as 'du' in action log. It breaks grammar.</title>
<updated>2026-07-16T03:39:27Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-16T03:39:27Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=bb7ef80d084f474bb4c3be0ae0d033aff3de0272'/>
<id>urn:sha1:bb7ef80d084f474bb4c3be0ae0d033aff3de0272</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add a reader for the action log at admin/log</title>
<updated>2026-07-16T01:30:01Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-16T01:30:01Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=190daaa8a0bb79e750894b83e31b9d99f7d900a4'/>
<id>urn:sha1:190daaa8a0bb79e750894b83e31b9d99f7d900a4</id>
<content type='text'>
NodeActionsController#index lists entries newest-first, filterable
by node_id or user_id -- the two zoom shapes the log was designed
around. Rendering goes through NodeActionsHelper.action_summary,
which builds one sentence per entry from metadata alone, so entries
referencing deleted users or nodes render from their snapshots;
live associations only upgrade names to links. Unknown verbs
degrade to a generic sentence rather than an error, since the log
outlives its vocabulary. The helper is the escaping boundary:
every metadata value passes through h() before assembly.

Actor names link to the log's own user zoom rather than the unused
users page -- inspecting a suspicious user's other actions is the
intended workflow. Publish entries with a translation_diff expose
a collapsed per-locale change table linking out to the revision
itself. Sentences live in en.yml/de.yml following the existing
widget-string convention. nodes#show links to its node's zoomed
log.
</content>
</entry>
<entry>
<title>Extend static-asset cache-busting to the public layout</title>
<updated>2026-07-14T14:53:15Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-14T14:52:03Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=ffb3c9987c2f820b99e8ad0ad56db8ae0324671c'/>
<id>urn:sha1:ffb3c9987c2f820b99e8ad0ad56db8ae0324671c</id>
<content type='text'>
mtime_busted_path only ever covered the four admin-only static
files. The public layout has the identical exposure -- ccc.css,
glightbox's vendored CSS/JS, and public.js are all served straight
from public/ with no pipeline fingerprinting either -- just never
got the same treatment.
</content>
</entry>
<entry>
<title>Re-add language selector, but fix the mis-nomer for english pages</title>
<updated>2026-07-13T22:11:45Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-13T22:11:45Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=a18a170f791769691fe905cfe76d103b7a345e87'/>
<id>urn:sha1:a18a170f791769691fe905cfe76d103b7a345e87</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove orphaned language selector for admin views</title>
<updated>2026-07-13T21:30:52Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-13T21:30:52Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=cdf5d9941ca866d437612d2f863eac6eb0b3db12'/>
<id>urn:sha1:cdf5d9941ca866d437612d2f863eac6eb0b3db12</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add cache-buster using mtime of css and js files outside the asset pipeline</title>
<updated>2026-07-13T21:29:54Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-13T21:29:54Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=802e81f8551e10a3f97846a49636e675c7e21cb3'/>
<id>urn:sha1:802e81f8551e10a3f97846a49636e675c7e21cb3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Rebuild the admin dashboard: icon nav, search, signposts, widgets</title>
<updated>2026-07-12T21:42:43Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-12T21:42:43Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=b271648f89cba7cafafa1b73b1658b1c1bc0e4b0'/>
<id>urn:sha1:b271648f89cba7cafafa1b73b1658b1c1bc0e4b0</id>
<content type='text'>
Replaces the old admin#index wizard -- accreted over years, never
designed as a whole -- with the dashboard settled on this session:
a three-icon nav (dashboard/search/log out, no locale selector), a
nodes-first search bar, four task signposts, and two symmetric
widgets (drafts/autosaves, recent changes) with a quiet housekeeping
row beneath them.

Node.recently_changed now filters and orders by the head page's own
updated_at instead of the node's blanket timestamp, so a lock/unlock
cycle with no actual publish no longer surfaces here, and the
original publisher is no longer misattributed to someone else's
housekeeping action. This also restores the "published" qualifier on
each entry, which the query previously couldn't guarantee was true.

@mynodes and its dedicated "My Work" table are retired along with the
old wizard -- "Continue my work" is a link to the existing, already-
correct NodesController#mine instead of a second, duplicate query.
Its one dedicated test (dedup across multiple revisions by the same
user) is ported to nodes_controller_test.rb, since mine already
carries the same .distinct protection the old query did; it just had
no test of its own until now.
</content>
</entry>
<entry>
<title>Add a locale-aware relative-time helper; drop stale locale overrides</title>
<updated>2026-07-12T21:42:23Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-12T21:42:23Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=cf93acb8ad44ba9cd486e8f6457d9fd9fbc041cc'/>
<id>urn:sha1:cf93acb8ad44ba9cd486e8f6457d9fd9fbc041cc</id>
<content type='text'>
Node.recently_changed and the new dashboard need "X ago" rendered
correctly in both locales. Rails' own distance_of_time_in_words/
time_ago_in_words can't do this on their own -- the scope option
changes which translation key is looked up, not the underlying
grammar, and German's "vor" requires dative case, which is a
different word form than the nominative plural Rails computes by
default. relative_time_phrase/relative_distance is a small, from-
scratch bucketing helper instead, with an explicit, hand-checked
translation table per unit per locale.

Also removes de.yml's datetime.distance_in_words and activerecord.
errors blocks. Both used the old {{count}}/{{model}} interpolation
syntax the current i18n gem no longer recognizes -- it silently
leaves the literal placeholder text in the rendered output rather
than erroring, which is why this went unnoticed until now. Both were
shadowing rails-i18n's own current, correct translations for exactly
these keys; deleting the local override lets the gem's version take
over instead of maintaining a second, broken copy.
</content>
</entry>
<entry>
<title>Give the sitemap its own view, with collapse and descendant counts</title>
<updated>2026-07-12T00:15:44Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-12T00:15:44Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=45bf65d04d046c0ea4a1150096b2a9b846d6c0b8'/>
<id>urn:sha1:45bf65d04d046c0ea4a1150096b2a9b846d6c0b8</id>
<content type='text'>
Extracted from admin#index's inline table into NodesController#sitemap.
Nested &lt;details&gt;/&lt;summary&gt; per branch, one linear pass over the
existing flat [node, level] list (no added queries) -- each node's own
descendant count computed the same way, via a small stack rather than
re-walking the tree per node. Branches under updates/, club/erfas,
club/chaostreffs, and disclosure start collapsed by default
(CccConventions::SITEMAP_COLLAPSED_PATHS); any branch currently
collapsed, whether by that default or because someone just closed it,
is highlighted via a plain :not([open]) selector -- no state tracked
outside the DOM itself.

Dropped the update?-post exclusion this view used to rely on -- no
longer needed now that updates/ collapses instead of being filtered
out, so its real children (previously silently absent) now show up
correctly. admin#index's own, separate @sitemap query is unchanged;
that view has no collapse mechanism to compensate and wasn't part of
this.
</content>
</entry>
</feed>
