chore(blog): make the two taxonomy axes disjoint - #635
Conversation
article_types is the genre of a post; topics is its subject area. Five terms had leaked across that line, so the same word meant two different things depending on which list it landed in. Moved each contested term to the axis where it belongs and brought the 1.4 and 1.5 release posts in line with 1.0 and 1.3, which carry the release genre rather than announcement. Adds data/taxonomy.yaml as the source of truth for both vocabularies. Term counts: 6 genres, 20 subjects, zero overlap. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: tym83 <6355522@gmail.com>
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
✅ Deploy Preview for cozystack ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (8)
💤 Files with no reviewable changes (5)
📝 WalkthroughWalkthroughThe pull request adds a blog taxonomy source of truth and updates article frontmatter to use the defined article types and topics. ChangesBlog taxonomy
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
IvanHunters
left a comment
There was a problem hiding this comment.
LGTM. Verified the central claims against the full blog corpus (all 84 .md files under content/en/blog, not just the 7 touched posts):
- Vocabulary is complete and tight. Every used
article_type(announcement, case, how-to, news, release, tech-article) and every usedtopic(20 terms) maps exactly todata/taxonomy.yaml— no undeclared term in any post, no declared-but-unused term.caseis genuinely in use. - Axes are disjoint in the actual data, not only in the declaration: the set of used article_types and the set of used topics do not intersect anywhere, so none of the five relocated terms (
release,talos,networking,community,storage) remains on the wrong axis in any post. The cleanup is complete across the corpus, not just the diff. - Both lists are alphabetical; 1.0 / 1.3 / 1.4 / 1.5 release posts now all carry the
releasegenre consistently. - No broken taxonomy links. Pruning terms from the
article_typesaxis only drops the auto-generated term pages on that axis; a grep acrosscontent/andlayouts/finds no inbound links to/article-types/*/or/topics/*/, so the "no URL changes, no aliases needed" note holds.
Non-blocking notes:
data/taxonomy.yamlis currently inert — nothing consumes it, so the closed vocabulary is convention-only and the next post can silently reintroduce drift. Worth a follow-up CI validator (already flagged as intended future work).hugo.yaml:7still listsarticle_typesas five terms (missingannouncement), now a second listing that diverges from the new source of truth. Out of this PR's stated scope, but a candidate for a small follow-up.2026-07-17-using-cozystack-independentlycarries two article_types (news+announcement), which contradicts the file's own "normally exactly one article_type" note. Pre-existing and both valid, so not a regression here.
Summary
article_typesandtopicsare two orthogonal axes feeding the blog filter UI, but five terms had leaked across the boundary between them. The same word therefore meant different things depending on which list it ended up in. This makes the two vocabularies disjoint and records them as data.What
releaseis a genre and no longer appears among subjects;talos,networking,communityandstorageare subjects and no longer appear among genres. Every one of them was already present in the correct axis, so no post loses a term.releasegenre rather thanannouncement.data/taxonomy.yamlholding both closed vocabularies, with a note on why a one-off term is undesirable: it produces a taxonomy page with a single entry, which reads as thin content.Result: 6 genres, 20 subjects, zero overlap.
Why
Without a closed vocabulary the axes drift, and a term invented while writing produces a taxonomy page nobody links to. One post already carried an image filename among its topics, which is what an unchecked list eventually yields.
data/taxonomy.yamlis also intended as the source of truth for a publishing validator, so that the same vocabulary applies to tooling and to hand-written posts alike.Notes for reviewers
No template or config changes: both axes stay registered in
hugo.yamlas before, so no taxonomy URL changes and no aliases are needed.The site does not build in my local environment, and it does not build on a clean
maineither — Hugo 0.162.1 is installed while the repository asks for 0.160.1, and the newersecurity.allowContentpolicy rejectscontent/*/_index.html. That failure is unrelated to this change; verification here was done by auditing front matter across all 83 posts.Summary by CodeRabbit