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

256 lines
8.6 KiB
Markdown

---
title: "feat: Create GitHub Release for v2.1"
type: feat
date: 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](https://keepachangelog.com/en/1.1.0/) 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:
```markdown
# 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
```bash
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:
```markdown
## 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
```yaml
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
- [x] `CHANGELOG.md` exists in repo root following Keep a Changelog format
- [x] Annotated tag `v2.1.0` exists on the public repo
- [x] GitHub Release `v2.1.0` is published at `github.com/mvanhorn/last30days-skill/releases`
- [x] Release notes include: highlights, real results table, feature list, contributor credits, install instructions
- [x] 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
- Existing copy: `docs/v2.1-launch-copy.md`, `docs/v2.1-tweets.md`
- Contributors: `docs/pr-credits.md`
- README features: `README.md` "What's New" sections
- GitHub Releases docs: https://docs.github.com/en/repositories/releasing-projects-on-github
- Keep a Changelog: https://keepachangelog.com/en/1.1.0/