fix(ordering): move HN after YouTube in stats, sort priority, and SKILL.md

HN was appearing before YouTube in the stats block, sort tiebreaker,
and source status. Now consistently: Reddit > X > YouTube > HN > Web.
Also restored emoji + box-drawing chars in test skill SKILL.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Van Horn
2026-02-24 19:41:14 -08:00
parent 38a7ea253e
commit 7a9f447231
6 changed files with 109 additions and 23 deletions
+8 -8
View File
@@ -315,14 +315,6 @@ def render_source_status(report: schema.Report, source_info: dict = None) -> str
reason = source_info.get("x_skip_reason", "No Bird CLI or XAI_API_KEY")
lines.append(f" ⏭️ X: skipped — {reason}")
# Hacker News
if report.hackernews_error:
lines.append(f" ❌ HN: error - {report.hackernews_error}")
elif report.hackernews:
lines.append(f" ✅ HN: {len(report.hackernews)} stories")
else:
lines.append(" ⏭️ HN: 0 stories found")
# YouTube
if report.youtube_error:
lines.append(f" ❌ YouTube: error — {report.youtube_error}")
@@ -333,6 +325,14 @@ def render_source_status(report: schema.Report, source_info: dict = None) -> str
reason = source_info.get("youtube_skip_reason", "yt-dlp not installed (brew install yt-dlp)")
lines.append(f" ⏭️ YouTube: skipped — {reason}")
# Hacker News
if report.hackernews_error:
lines.append(f" ❌ HN: error - {report.hackernews_error}")
elif report.hackernews:
lines.append(f" ✅ HN: {len(report.hackernews)} stories")
else:
lines.append(" ⏭️ HN: 0 stories found")
# Web
if report.web_error:
lines.append(f" ❌ Web: error — {report.web_error}")
+3 -3
View File
@@ -412,14 +412,14 @@ def sort_items(items: List[Union[schema.RedditItem, schema.XItem, schema.WebSear
date = item.date or "0000-00-00"
date_key = -int(date.replace("-", ""))
# Tertiary: source priority (Reddit > X > HN > YouTube > WebSearch)
# Tertiary: source priority (Reddit > X > YouTube > HN > WebSearch)
if isinstance(item, schema.RedditItem):
source_priority = 0
elif isinstance(item, schema.XItem):
source_priority = 1
elif isinstance(item, schema.HackerNewsItem):
source_priority = 2
elif isinstance(item, schema.YouTubeItem):
source_priority = 2
elif isinstance(item, schema.HackerNewsItem):
source_priority = 3
else: # WebSearchItem
source_priority = 4
+4 -4
View File
@@ -289,17 +289,17 @@ class ProgressDisplay:
sys.stderr.write(f"{Colors.DIM}({elapsed:.1f}s){Colors.RESET}\n")
sys.stderr.write(f" {Colors.YELLOW}Reddit:{Colors.RESET} {reddit_count} threads ")
sys.stderr.write(f"{Colors.CYAN}X:{Colors.RESET} {x_count} posts")
if hn_count:
sys.stderr.write(f" {Colors.YELLOW}HN:{Colors.RESET} {hn_count} stories")
if youtube_count:
sys.stderr.write(f" {Colors.RED}YouTube:{Colors.RESET} {youtube_count} videos")
if hn_count:
sys.stderr.write(f" {Colors.YELLOW}HN:{Colors.RESET} {hn_count} stories")
sys.stderr.write("\n\n")
else:
parts = [f"Reddit: {reddit_count} threads", f"X: {x_count} posts"]
if hn_count:
parts.append(f"HN: {hn_count} stories")
if youtube_count:
parts.append(f"YouTube: {youtube_count} videos")
if hn_count:
parts.append(f"HN: {hn_count} stories")
sys.stderr.write(f"✓ Research complete ({elapsed:.1f}s) - {', '.join(parts)}\n")
sys.stderr.flush()