bradtraversy.dev — 2026-05-22-stackmaven-self-refresh.md
home.md projects/ tools/ devlog/ × articles/ now.md about.md
2026-05-22 · #stackmaven · #devlog #decision #agent-workflow #claude

# letting stackmaven refresh itself

stackmaven is sitting at 70 entries today, on the way to 250+. each one has a stars count, a latest version, a “latest news” section, a last_reviewed date. all of it goes stale within days. the catalog’s whole pitch is current and opinionated. let it drift and the pitch dies.

a few sessions this week shipped the automation that keeps that from happening. three layers, with hard rules about what the machine is allowed to touch and what stays editorial.

layer 1: detect

a pure node esm script (scripts/detect-refresh.mjs) reads every tool’s frontmatter, hits the github api for stars + releases, and writes a markdown digest + json manifest to tmp/. doesn’t touch src/content/ at all. that boundary matters: detection is read-only, applying changes is a separate step.

smoke test on the full catalog: 70 entries, 38 github-tracked, 20 with new releases. fixed two false-positive bugs the first day: same-day patch releases firing because github stores full iso timestamps and my frontmatter stores date-only; htmx publishing v4.0.0-beta3 as a “stable” release per github’s prerelease flag when the tag name is clearly a beta. defense in depth: reject prerelease tags by name pattern too, not just by the api flag.

layer 2: apply, in a pr

original spec was per-tool interactive review: me approving each entry’s diff. i killed it mid-build. with 70 entries today and 250 incoming, that’s two hours of work daily. by tool 15 of a 20-tool batch the human rubber-stamps. the editorial moat collapses.

new shape: apply-refresh.mjs runs autonomously, applies mechanical updates directly (github_stars, latest_version, last_reviewed), drafts “latest news” prose with claude, opens a single pr on a refresh/YYYY-MM-DD branch. i review via the github web ui in ~10 minutes: skim the diff, merge or inline-edit specific drafts.

the cap split is load-bearing here: 14 of today’s 37 actionable items were tools whose star count drifted by less than a percent. that’s noise, not editorial work. so the daily cap (20 tools) measures real review burden (version bumps and news) while stars-only updates bulk-apply with no limit.

what the automation never touches

four frontmatter fields are off-limits, no exceptions: stackmaven_verdict, verdict_label, bullet_summary, trade_offs. those carry the editorial position. claude can ground a “latest news” paragraph in actual release notes, where fabrication risk is bounded by the source. it cannot ground a verdict shift in anything but my judgment.

a scheduled routine fires the whole pipeline daily at 06:00 edt: detect → apply → draft → push pr. tomorrow morning is the first end-to-end autonomous run.

the editorial moat isn’t sophistication in the scorer. it’s a small set of fields the machine is told not to touch, and an agent with good editorial sense doing the drafts inside the lines. simple rules, ruthlessly enforced.

// EOF 2026-05-22-stackmaven-self-refresh.md
main
2026-05-22-stackmaven-self-refresh.md
UTF-8
LF
Markdown
Ln 1, Col 1