| name | url-manifest |
| description | Generates validated URL manifest from kb/SOURCES.yaml for a given DATE_RANGE. Use when starting Phase 1A of the newsletter pipeline. Reads SOURCES.yaml canonical URLs and feed endpoints, generates candidate URLs per source, validates existence, and outputs a manifest file. Keywords: url manifest, phase 1a, url generation, source discovery. |
| metadata | {"category":"domain","phase":"1A"} |
URL Manifest Generator
Generate and validate candidate URLs from known sources for a given DATE_RANGE.
Quick Start
- Receive DATE_RANGE (YYYY-MM-DD to YYYY-MM-DD)
- Read
kb/SOURCES.yaml for canonical URLs and feed endpoints
- Generate candidate URLs per source using known patterns
- Spot-check 1-2 URLs per source to confirm patterns work
- Write manifest to
workspace/newsletter_phase1a_url_manifest_YYYY-MM-DD_to_YYYY-MM-DD.md
Inputs
- DATE_RANGE: Start date and end date in YYYY-MM-DD format
- Reference Year: Extracted from DATE_RANGE
- kb/SOURCES.yaml: Canonical URL source with 47 machine-readable entries
Output
- File:
workspace/newsletter_phase1a_url_manifest_YYYY-MM-DD_to_YYYY-MM-DD.md
- Token budget: 10,000-20,000 tokens total
Core Workflow
Step 0: Date Range Overlap Check
Before generating URLs, verify DATE_RANGE has no gap with the previous newsletter. Check archive/ for the most recent newsletter to find its coverage end date. If a gap exists (e.g., previous newsletter covered through Dec 3, but current DATE_RANGE starts Jan 1), extend the START date backward to close the gap. Never leave uncovered days between newsletters.
Step 1: Generate Candidates (~2 min)
For each source, generate candidate URLs using known patterns and DATE_RANGE months. See url-patterns.md for per-source URL architecture.
Key Innovation: Read kb/SOURCES.yaml for canonical URLs rather than guessing URL patterns. The YAML provides:
canonical_urls for each source
update_feeds with type (RSS, Atom, API, none) and endpoints
latest_known.version and latest_known.release_date for version-based URLs
CRITICAL: VS Code Version Enumeration (L64 + L66)
Do NOT rely on SOURCES.yaml latest_known.version alone for VS Code. That field only contains the newest version. VS Code now ships weekly, so a 30+ day DATE_RANGE includes 4-5+ versions. You MUST:
- Fetch
https://code.visualstudio.com/updates (the index page)
- Parse every version listed with its actual release date
- Include ALL versions whose release date falls within DATE_RANGE
- Remember: named months may still lag by 1-2 months ("December 2025" = released Jan 8, 2026)
Example: A 30-day DATE_RANGE will typically include 4-5 weekly versions. All must be in the manifest.
CRITICAL: Expanded Source Coverage
Cross-cycle meta-analysis (L29, L30) shows these sources are consistently missed by changelog-only scanning but always appear in published newsletters. The manifest MUST include:
- GitHub Changelog (
github.blog/changelog/YYYY/MM/) — primary, richest source
- GitHub Blog Homepage (
github.blog/latest/page/1/) — catches strategic CPO/CEO posts
- GitHub News & Insights (
github.blog/news-insights/company-news/) — major announcements NOT in changelog
- VS Code Release Notes (
code.visualstudio.com/updates/v1_{VERSION}) — deep feature content
- Visual Studio DevBlogs (
devblogs.microsoft.com/visualstudio/) — VS Copilot monthly updates
- Azure DevOps DevBlogs (
devblogs.microsoft.com/devops/) — Azure ecosystem items
- JetBrains Plugin API (
plugins.jetbrains.com/api/plugins/17718/updates) — plugin versions
- Xcode CHANGELOG (
github.com/github/CopilotForXcode/blob/main/CHANGELOG.md) — Xcode versions
- Visual Studio MS Learn (
learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes) — patches and CVEs only
Step 2: Spot-Check Validation (~5-10 min)
For each source, fetch 1-2 URLs to confirm:
- URL exists (not 404)
- Contains expected date/version info
- Pattern is correct for the DATE_RANGE
Step 3: Boundary Verification
Verify the generated URLs span the full DATE_RANGE:
- Earliest candidate date is on or before DATE_RANGE start
- Latest candidate date is on or after DATE_RANGE end
- No month in DATE_RANGE has zero entries
- Flag any gaps
Step 4: Write Manifest
Output validated candidate URLs grouped by source with:
- Source name and URL pattern used
- Individual URLs with expected dates
- Boundary verification checkboxes
- Total candidate count
CRITICAL: Named Month vs Actual Release Date
Named month in release titles often LAGS actual release date by 1-2 months.
| Example | Named Month | Actual Release Date |
|---|
| VS Code v1.105 | "September 2025" | October 9, 2025 |
| VS Code v1.106 | "October 2025" | November 12, 2025 |
Actual release dates govern inclusion, NOT the named month. Always verify actual release dates against DATE_RANGE boundaries.
Reference
Done When