- posts describe PublishedAt, their categories by name as Parents, the
author (a journal-author reference while author pages are on), the
featured and body images, YouTube embeds, the heading outline and
TopHeading (2 while the H1 setting is on, else 0)
- categories describe their parent, the pillar text's outline and
TopHeading; kinds article/collection and the journal_ fixing tools
- golem15.journal.author_pages (AuthorPagesKey, default true)
- journal-post, journal-category and journal-tag carry pact.ContentDescriptor
(controller, morph name, Describe, Records, Match) through signpost
- Match reads the locale prefix and the pattern with signpost.MatchPattern,
finds the record by its slug in that locale, the default slug, another
locale's slug or :id, and is exact only on the record's own URL (D-20c)
- journal-tag (/blog/tag/:slug, P-11) with references and Resolve; host key
golem15.journal.tag_pages false empties tag URLs and stops tag matches
- TestContentDescriptors, TestJournalTagType; README documents both
- journal-post registers a pact.ContentDescriptor (posts controller, Post
morph name, Describe with per-locale URL, title, excerpt, image, words)
- descriptors read through cabana.TxFromContext inside a save
- TestRecordSavedDescribesNewURL: an admin slug change reaches a subscriber
after commit and Describe answers the new URL; a failed save fires nothing