The Story
The journal system started as a question: what if the commit history from Archivum and Legio could tell their own story? Not a changelog of diffs, but something a user might actually want to read.
The pipeline is straightforward in concept. Fetch commits from both repositories, classify them as external (user-facing) or internal (developer-only), run the external ones through a multi-judge debate panel to check prose quality, and write the result as a markdown entry.
Getting the jj integration right took the most debugging. The revset syntax for filtering empty commits (~ description(exact:"")) wasn’t obvious from the docs, but once that clicked, the commit extraction fell into place.
The judge panel runs in three rounds. Each specialized judge evaluates a different dimension — humanization, language clarity, style consistency, technical boundary. The orchestrator tallies scores and decides whether to accept, revise, or escalate to human review. For a first pass, the weighted scoring defaults feel reasonable.
What Changed
- Added journal generation pipeline with multi-judge debate
- Integrated jj commit extraction from Archivum and Legio
- Built external/internal commit classification with memory-based corrections
- Created journal listing and entry pages on the site
Reflections
The hardest part wasn’t any single component — it was getting the config-driven architecture right. Models, roles, and prompts should all live in YAML so swapping a judge model is one line change. That’s the test for whether a system is truly configurable.