Update last30days plugin from upstream + refactor#18
Open
Conversation
Checks an imported plugin's upstream source for changes since import, categorizes commits, maps files, and walks the user through interactive triage before applying approved updates via PR. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Downstream 20 upstream commits adding YouTube search (yt-dlp), Bird CLI for free X search via browser cookies, native web search backends (Brave, OpenRouter, Parallel AI), SQLite persistence, watchlist/briefing, global timeout watchdog with child process cleanup, and Reddit 429 rate-limit fail-fast. Bump version 1.0.0 to 1.1.0. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove Bird CLI (vendored JS, cookie-based X search) — X search now uses xAI API exclusively - Fix SQL injection surface in store.py update_run/update_finding by validating kwargs keys against allowed column sets - Fix config_exists() crash when CONFIG_FILE is None - Fix openrouter_search.py HTTP-Referer pointing to wrong repo - Fix silent exception swallowing in Reddit retry logic - Fix update-skill.md using rm -rf (use trash instead) - Simplify env.py, ui.py, render.py to remove Bird references Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace 12-element tuple return from run_research() with ResearchResult dataclass for readability and type safety - Break main() from ~340 lines to 93 by extracting _parse_args(), _resolve_depth(), _resolve_sources(), _select_models(), _process_results(), _run_diagnose(), _build_source_info(), _emit_result() - Replace 16-line if/elif source mapping with _SOURCE_TO_MODE dict - Remove dead X supplemental code path in _run_supplemental() - Delete store.py (691 lines), briefing.py, watchlist.py — write-only persistence feature that was never read back - Remove --store flag from CLI, SKILL.md, and README - Fix stale "Bird CLI" reference in SKILL.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
115 tests covering the four pure-logic modules: - test_dates: date parsing, ranges, confidence, recency scoring - test_score: engagement computation, normalization, scoring for Reddit/X/YouTube/WebSearch, sort order and tiebreaking - test_dedupe: text normalization, n-grams, Jaccard similarity, duplicate detection, deduplication with score preservation - test_normalize: date range filtering, normalization of raw API data to schema objects for all four source types Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Updates last30days from upstream mvanhorn/last30days-skill, then refactors and adds tests.
Upstream commits since last import: 20 (2025-06-15 → 2025-08-02)
Changes
From upstream (commit
3d92772)Local improvements
Remove Bird CLI, fix review findings (
4003f6e):--no-warningsto yt-dlp commandsRefactor: dataclass, smaller main(), remove dead code (
85b0952):run_research()withResearchResultdataclassmain()from ~340 lines to 93 by extracting 8 helper functions_SOURCE_TO_MODEdict_run_supplemental()store.py(691 lines),briefing.py,watchlist.py— write-only persistence that nothing read back--storeflag from CLI, SKILL.md, and READMEAdd tests (
824423f):Net effect
Checklist