Connor: too much world news, very little software/aerospace/urbanism/Cincinnati.
Measuring found three separate causes.
1. The digest ranked by max(interest, importance), and importance is largely a
"big world news" detector -- 22 of 28 slots were entered on the importance
axis. A personal reading list ordered by global importance is the wrong
objective. The bulk of the digest is now ranked by INTEREST, with a bounded
allowance (digest_importance_slots = 6) so a major event still makes the
record on a busy day.
2. No per-group cap, so conflict and diplomacy took 18 of 28 slots.
digest_max_per_group = 4, with unused capacity flowing back to the best
remaining items so a quiet day still fills.
3. HN maturation could never happen. Items came only from `search_by_date`,
which returns posts at 2-3 points; once one ages out of the newest window its
score is never refetched, so it can never clear the bar and HN's best content
was structurally invisible. 45 software clusters were sitting in
"aggregator-immature". Added the front page via the `search` endpoint, which
returns the crowd's verdict (measured: median 117 points, max 912) and whose
re-polling is what actually supplies maturation. hn_min_score 150 -> 100,
since a higher bar rejects most of the front page.
Digest went from 8 groups (conflict 10, diplomacy 8, software 0) to 13 groups
with a far flatter distribution, and the software slot is now
"Benchmarking Qwen3.8 27B quantizations" -- the local-inference material that
was asked for.
Process note: the first two attempts at this silently did nothing. I used
str.replace() without asserting the anchor matched, so a stale anchor wrote the
file back unchanged while reporting success, and I measured "no change" twice
before checking the file. Edits here now assert before writing.