Files
last30days-skill/docs/plans/2026-02-17-feat-github-release-v2.1-plan.md
T
Matt Van Horn 32992834ee Merge PR #48: feat: add Xiaohongshu source + Reddit public fallback
- Xiaohongshu search via local MCP service (opt-in, zero impact if service not running)
- Reddit public JSON fallback (works with zero API keys)
- Reddit priority: ScrapeCreators -> OpenAI -> public fallback
- Updated env.py: Reddit always available via public fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 16:11:35 -08:00

8.6 KiB

title, type, date
title type date
feat: Create GitHub Release for v2.1 feat 2026-02-17

Create GitHub Release for v2.1

Overview

The last30days skill is at v2.1 with 2,747 stars and 317 forks, but has zero git tags and zero GitHub Releases. The code is already live on the public repo (upstream/main). All marketing copy is written. This plan creates a proper v2.1.0 GitHub Release from existing materials.

Problem Statement

GitHub Releases provide:

  • A landing page for each version with formatted release notes
  • Discoverability (GitHub shows releases in the sidebar, feeds them to the Explore page)
  • A stable reference point for users (git checkout v2.1.0)
  • A "Full Changelog" diff link
  • RSS feed for watchers
  • New contributor callouts (community goodwill)

Currently users have no way to reference a specific version of the skill. The README says "v2.1" but there's nothing in git to anchor that.

Proposed Solution

Create the first GitHub Release (v2.1.0) on the public repo using existing marketing copy. Use an annotated tag (not lightweight) for proper git describe support and fork propagation.

Implementation Steps

Phase 1: Tag and Release

1. Create CHANGELOG.md

Create CHANGELOG.md following Keep a Changelog format. Source material already exists:

  • README.md "What's New in V2.1" and "What's New in V2" sections
  • docs/v2.1-tweets.md (raw verified test results, feature descriptions)
  • docs/v2.1-launch-copy.md (feature copy, social posts)
  • docs/pr-credits.md (contributor credits)
  • Git log (git log --oneline for commit references)

Structure:

# Changelog

## [2.1.0] - 2026-02-15

### Highlights

30 days of research. 30 seconds of work. Four sources. Zero stale prompts.

Three headline features...

### Added
- Open-class skill with watchlists (SQLite-backed, FTS5)
- YouTube as 4th research source via yt-dlp (search + transcript extraction)
- OpenAI Codex CLI compatibility ($last30days invocation)
- Bundled X search (vendored Bird GraphQL client, no external CLI)
- Native web search backends (Parallel AI, Brave, OpenRouter/Perplexity Sonar)
- Briefing and history modes (open variant)
- --diagnose flag for source status checking
- --store flag for SQLite accumulation

### Changed
- Smarter query construction (strips noise words, auto-retry)
- Two-phase search (Phase 2 entity-aware drill-down)
- Reddit JSON enrichment (real upvotes/comments from reddit.com/.json)
- Engagement-weighted scoring (relevance 45%, recency 25%, engagement 30%)
- Model auto-selection with 7-day cache

### Fixed
- YouTube timeout increased to 90s
- Reddit 429 rate limit fail-fast
- YouTube soft date filter (keeps evergreen content)
- Eager import crash in __init__.py (Codex compatibility)

### New Contributors
- @JosephOIbrahim - Windows Unicode fix
- @levineam - Model fallback for unverified orgs
- @jonthebeef - --days=N configurable lookback flag

### Credits
- @steipete - Bird CLI (vendored X search) and yt-dlp inspiration
- @galligan - Marketplace plugin inspiration
- @hutchins - Pushed for YouTube feature

## [1.0.0] - 2026-01-15

Initial public release. Reddit + X search via OpenAI and xAI APIs.

2. Create annotated tag on the public repo

cd /Users/mvanhorn/last30days-skill-private

# Tag on the current HEAD (which matches upstream/main)
git tag -a v2.1.0 -m "Release v2.1.0: Watchlists, YouTube transcripts, Codex CLI, bundled X search"

# Push to public repo
git push upstream v2.1.0

Use annotated tag (not lightweight) because:

  • Stores tagger metadata and date
  • Works with git describe
  • Propagates to forks (317 forks)
  • Supports GPG signing if desired later

3. Craft release notes

Assemble from existing copy. The release body should follow this structure:

## Highlights

The AI world reinvents itself every month. This skill keeps you current.

`/last30days` researches your topic across **Reddit, X, YouTube, and the web**
from the last 30 days, finds what the community is actually upvoting, sharing,
and saying on camera, and writes you a prompt that works today.

**Three headline features in v2.1:**

1. **Open-class skill with watchlists** - Track competitors, people, topics on a schedule.
   Pair with Open Claw for automated briefings. SQLite-backed with FTS5 search.

2. **YouTube transcripts as a 4th source** - When yt-dlp is installed, searches YouTube,
   grabs view counts, and reads the actual transcripts. A 20-minute review has 10x the
   signal of one X post.

3. **Codex CLI compatibility** - Same skill, same engine, same four sources.
   Install to `~/.agents/skills/last30days` and invoke with `$last30days`.

Plus: **Bundled X search** - Vendored Bird GraphQL client. No external CLI needed.
Just Node.js 22+ and browser cookies.

## Real Results (verified 2/15)

| Topic | Reddit | X | YouTube | Web |
|-------|--------|---|---------|-----|
| Nano Banana Pro | - | 32 posts, 164 likes | 5 videos, 98K views | - |
| Seedance 2.0 | 21 threads | 33 posts | 20 videos | 5 pages |
| OpenClaw use cases | 35 threads, 1,130 upvotes | 23 posts | 20 videos, 1.57M views | - |
| YouTube thumbnails | 7 threads, 654 upvotes | 32 posts | 18 videos, 6.15M views | - |

## What's New

### Added
- Open-class skill with watchlist, briefing, and history modes
- YouTube search + transcript extraction via yt-dlp
- OpenAI Codex CLI compatibility
- Bundled Twitter/X search (vendored Bird GraphQL)
- Native web search (Parallel AI, Brave, OpenRouter)
- `--diagnose` and `--store` flags
- Conversational first-run experience (NUX)

### Changed
- Two-phase search architecture (entity-aware drill-down)
- Reddit JSON enrichment for real engagement metrics
- Smarter query construction with auto-retry
- Engagement-weighted scoring algorithm

### Fixed
- YouTube/Reddit timeout resilience
- Reddit 429 rate limit fail-fast
- Eager import crash in Codex environments

## New Contributors

- @JosephOIbrahim - Windows Unicode fix
- @levineam - Model fallback for unverified orgs
- @jonthebeef - `--days=N` configurable lookback

## Credits

- @steipete - Bird CLI and yt-dlp/summarize inspiration
- @galligan - Marketplace plugin inspiration
- @hutchins - Pushed for YouTube feature

## Install

```bash
# Claude Code
claude install-skill https://github.com/mvanhorn/last30days-skill

# Manual
git clone https://github.com/mvanhorn/last30days-skill ~/.claude/skills/last30days

Full Changelog: https://github.com/mvanhorn/last30days-skill/commits/v2.1.0


#### 4. Create the GitHub Release

```bash
gh release create v2.1.0 \
  --repo mvanhorn/last30days-skill \
  --verify-tag \
  --title "v2.1.0 - Watchlists, YouTube Transcripts, Codex CLI" \
  -F release-notes.md

No binary assets needed - this is an interpreted skill, and GitHub auto-generates source archives.

Phase 2: Future Automation (Optional)

5. Add .github/release.yml for auto-generated notes on future releases

changelog:
  exclude:
    labels:
      - ignore-for-release
  categories:
    - title: "Breaking Changes"
      labels: [breaking-change]
    - title: "Features"
      labels: [enhancement, feature]
    - title: "Bug Fixes"
      labels: [bug, fix]
    - title: "Documentation"
      labels: [documentation]
    - title: "Other Changes"
      labels: ["*"]

This enables gh release create v2.2.0 --generate-notes for future releases with automatic PR categorization.

Acceptance Criteria

  • CHANGELOG.md exists in repo root following Keep a Changelog format
  • Annotated tag v2.1.0 exists on the public repo
  • GitHub Release v2.1.0 is published at github.com/mvanhorn/last30days-skill/releases
  • Release notes include: highlights, real results table, feature list, contributor credits, install instructions
  • Release appears in the repo sidebar on GitHub

Key Decisions

  1. v2.1.0 only - Don't retroactively create v1.0.0 or v2.0.0 tags. The git history doesn't have clean boundary commits for those versions, and retroactive tags add complexity without value.

  2. Release on the public repo (upstream), not the private repo. Users see mvanhorn/last30days-skill.

  3. CHANGELOG.md as source of truth - The release notes are derived from CHANGELOG.md, not the other way around. Future releases update CHANGELOG.md first, then create the release.

  4. Update star count - The existing copy says "1.5K stars" but the repo now has 2,747. Update in release notes.

References