All notable changes to the "Dev Feed Curator" extension will be documented in this file.
The format is based on Keep a Changelog.
- Replaced the removed Azure Functions
v1/postsAPI (https://alvinashcraft.com/v1/posts?limit=20) with the new static Blazor Static Web App feed endpoint (https://alvinashcraft.com/feeds/index-recent.json) in both the latest Dew Drop date fallback (rssProvider.ts) and the latest Dew Drop number fallback (exportManager.ts). Updated response parsing fromdata.items[]todata.posts[]to match the new JSON shape
publishToMorningDewNextGenno longer relies onvscode.tasks/ShellExecution, which failed to launch in an empty workspace with the error:The terminal process failed to launch: Cannot launch a terminal process in an empty workspace with cwd <repoPath> different from userHome <home>. The command now spawnspwshdirectly viachild_process.spawnand streams stdout/stderr to a dedicated "Morning Dew NextGen Import" output channel, so it works whether or not a workspace is open
- Replaced substring host check (
includes('alvinashcraft.com')) with an exact-hostname comparison in bothRSSBlogProvider.isAlvinAshcraftBlogConfiguredandExportManager.tryGetLatestDewDropNumberFromApi, so the Morning Dew v1 API fallback no longer triggers for look-alike domains likenotalvinashcraft.comoralvinashcraft.com.evil.com(PR #56 review) publishToMorningDewNextGennow wrapsvscode.tasks.executeTaskin try/catch so theonDidEndTaskProcesslistener is disposed (and the completion promise no longer hangs) when task execution rejects before the process can start (PR #56 review)
- Extracted the duplicated
fetchJsonhelpers fromrssProvider.tsandexportManager.tsinto a sharedsrc/utils/http.tsmodule, alongside the newisAlvinAshcraftHostvalidator (PR #56 review)
- Unit tests for
isAlvinAshcraftHostcovering exact match, subdomain match, look-alike rejection, bare hostnames, and unparseable input
- Fallback to the read-only Morning Dew v1 API (
https://alvinashcraft.com/v1/posts) for resolving the latest Dew Drop date and post number when the configured WordPress Blog URL points atalvinashcraft.comand the RSS feed does not surface a Dew Drop post - New command
Dev Feed Curator: Publish to Morning Dew NextGenthat runs theinfra/scripts/import-html-post.ps1script in the configureddew-nextgenrepository against the currently open Dew Drop HTML file (active editor or WYSIWYG panel) - New setting
rssBlogCategorizer.dewNextGenRepoPathto specify the absolute path to the localdew-nextgenrepository clone (required to enable the Morning Dew NextGen publish command) - On successful Morning Dew NextGen import: pending approved submissions are marked as processed (same behavior as the WordPress publish flow), the WYSIWYG editor panel is closed if it is open, and the configured
wordpressBlogUrlis opened in the default browser whenopenBlogAfterPublishis enabled
- Fixed approved submissions not appearing after feed refresh due to API response field-casing mismatch
- Approved submissions are now marked as processed only after a successful WordPress publish, not during feed refresh — abandoned drafts no longer consume submissions
- Expanded localization support - Added Dutch (Nederlands) and Swedish (Svenska) locale files
- Extension now supports 8 languages total: English, Spanish, German, French, Italian, Portuguese, Dutch, and Swedish
- Updated packaging workflow to use a pinned local VSCE toolchain via
@vscode/vsce - Added
npm run vsce:packageandnpm run vsce:publishscripts for consistent packaging and publishing - Updated
test:basicscript to run compiled tests with--no-configto avoid duplicate test discovery and Node typeless-module warnings - Updated localization section in README to reflect newly added locales
- Added secure submissions API key setup command (
rssBlogCategorizer.setSubmissionApiKey) - Added user-facing warnings for missing submissions API configuration with action to set API key
- Added informational submissions count notification after fetching approved links
- Moved submissions API key storage from settings to VS Code SecretStorage
- Removed insecure plain-text submissions API key setting from extension configuration
- Simplified submissions API notification dismissal behavior
- Updated documentation and localization files for secure key setup and warning flows
- Added submissions API base URL validation with HTTPS enforcement and clearer warning messages
- Improved submissions source handling for invalid or missing configuration scenarios
- Updated submissions fetch to request the full approved queue without extension-side date filtering
- Added a secondary source pipeline for approved submissions API links
- Added submissions API integration for retrieving approved links and ingesting them as categorized posts
- Added automatic submission status updates to mark consumed items as
processed - Added new submissions source settings to enable the feature and configure the submissions API base URL
- Extended feed aggregation workflow to merge primary RSS/NewsBlur results with approved submissions
- Updated README and localization resources for submissions source configuration and behavior
- Expanded localization support - Added German (Deutsch), French (Français), Italian (Italiano), and Portuguese (Português)
- Extension now supports 6 languages total: English, Spanish, German, French, Italian, and Portuguese
- All user-facing strings translated including commands, settings, messages, and editor UI
- Comprehensive localization documentation in
docs/LOCALIZATION.md - Localization testing guide in
docs/LOCALIZATION_TESTING.md
- Updated README to reflect all supported languages
- Enhanced localization infrastructure with consistent placeholder handling across all languages
- Full extension localization support for English and Spanish
- Localized package contribution metadata via
package.nls.jsonandpackage.nls.es.json - Runtime string localization bundles via
l10n/bundle.l10n.jsonandl10n/bundle.l10n.es.json
- Localized user-facing strings across command flows, notifications, prompts, and tree view labels
- Localized WYSIWYG editor controls for both TinyMCE HTML and EasyMDE Markdown webviews
- Updated build pipeline to package localization resources from the
l10nfolder
- Rebranded to "Dev Feed Curator" with a modern icon and updated messaging
- All command display names updated from "RSS Blog Categorizer" to "Dev Feed Curator"
- Command IDs (
rssBlogCategorizer.*) and settings keys remain unchanged
- New Writing category for content writing, blogging, grammar, and editing posts
- Future date filtering for RSS posts to prevent duplicates from future-dated items
- Enhanced TinyMCE editor focus management with Alt+Tab recovery and cursor position preservation
- Screenshots added to README for VS Code Marketplace presentation
- Deprecated TinyMCE spellcheck configuration (browser spellcheck still works)
- Dometrain Course section with daily course rotation in exports
- Smart course filtering, affiliate tracking, and cross-device sync via VS Code Settings Sync
- New settings:
enableDometrainSectionanddometrainLastCourseId
- WYSIWYG Editor powered by TinyMCE for visually editing posts before publishing
- Rich formatting toolbar with bold, italic, colors, headings, links, images, and more
- Save, Save & Publish, and Cancel actions with keyboard shortcuts
- VS Code theme integration for the editor
- Clickable book images in "The Geek Shelf" section
- Author name mapping with 264+ author mappings and three-tier priority system
- Syncfusion URL tracking with automatic UTM parameter insertion
- Improved multi-author formatting with Oxford comma style
- Clean URLs with automatic removal of 30+ common tracking parameters
- Optional new tab links setting (
openLinksInNewTab)
- Simplified HTML output with reduced div nesting for better WordPress compatibility
- Initial release
- RSS/Atom feed fetching and parsing
- Smart post categorization by technology
- Tree view integration in VS Code Explorer sidebar
- HTML and Markdown export
- WordPress publishing via REST API
- NewsBlur API integration
- Configurable settings for feeds, refresh intervals, and date filtering
- Book recommendations ("The Geek Shelf") section