Context
Before 2026-04-18, the newsletter had a single “Deep Signal” section that ranked posts by score * num_comments. Engagement accumulates, so yesterday’s winners kept winning and fresh threads with low engagement never surfaced (e.g. a Ronin-at-Coachella thread that ran on 2026-04-17).
Structure
Section order at the top of each newsletter:
- Fresh Signal (open) — posts whose
idis NOT in any priordigests.post_ids. Novelty is the only qualifier. Ranked byscore * num_commentsdescending, top 5 items. - Updated Signal (open) — previously-covered posts that picked up meaningful new activity since their last coverage. Ranked by comment delta, top 3 items. Section is omitted entirely if no candidate clears the threshold.
- Hot Takes (unchanged)
- Your Bench (unchanged)
- The Wire (collapsed, unchanged)
Update-detection heuristic
Update candidate qualifier: live.num_comments - stored.num_comments >= 3.
live.num_commentscomes from the fresh Reddit post fetch in Step 1 of the skillstored.num_commentscomes fromSELECT id, num_comments FROM posts WHERE id = ANY(...)against Advin
Post-level delta works because Reddit returns num_comments with every post listing, which is zero-cost. A per-comment threshold would require fetching full comment threads for every previously-covered post on every crawl, which is prohibitive.
Fix history: 2026-04-18 bootstrap bug
First implementation tried to detect updates by counting comments in Advin’s comments table with created_utc > last_coverage_ts AND score >= 3. That query never returned non-zero candidates because:
- The
commentstable only contains comments for posts we explicitly fetched in Step 3 - Step 3 only fetches comments for posts already marked as candidates
- No post could ever gain “new comments in Advin” without first being selected, and selection required those comments to already be there
Effect: Updated Signal section never rendered despite 46 previously-covered posts showing up in each crawl.
Switched to num_comments delta because Reddit returns that field for free with each post listing. No extra fetches, no bootstrap problem.
Implementation
- Skill:
~/.claude/commands/signal-crawl.mdon both server-pc and LAPTOP-KAI (the two copies diverged when the Path Configuration section was added for Linux) - Version bumped:
Signal Feed v0.4footer
Related
- cloudflare-publish-audit — how the newsletter reaches debrief.pentz.io
- Knowledge-base root INDEX lives at
index.md(lowercase; renamed 2026-04-18 for kb.pentz.io Quartz compat)