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:

  1. Fresh Signal (open) — posts whose id is NOT in any prior digests.post_ids. Novelty is the only qualifier. Ranked by score * num_comments descending, top 5 items.
  2. 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.
  3. Hot Takes (unchanged)
  4. Your Bench (unchanged)
  5. The Wire (collapsed, unchanged)

Update-detection heuristic

Update candidate qualifier: live.num_comments - stored.num_comments >= 3.

  • live.num_comments comes from the fresh Reddit post fetch in Step 1 of the skill
  • stored.num_comments comes from SELECT 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 comments table 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.md on both server-pc and LAPTOP-KAI (the two copies diverged when the Path Configuration section was added for Linux)
  • Version bumped: Signal Feed v0.4 footer
  • 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)