v3.2.0 - St. Daniel's Day πΌ, Dec 17th, 2025
π Executive Summary
Version 3.2.0 is a major release combining three new RSS/Twitter features with five critical bug fixes discovered through AI code review and production testing. This release maintains full backward compatibility while significantly improving content processing reliability and user customization options.
Key Highlights:
- 3 new configuration settings for enhanced RSS and Twitter/X processing
- 5 critical bug fixes (ellipsis, URL fragments, ES5 compatibility, RSS anchors, flow logic)
- Script size optimized from 66KB to 62.8KB (2.7KB reserve, 4.2%)
- 100% backward compatible - drop-in replacement for v3.1.4
π― What's New
π New Features (3)
1. TCO_REPLACEMENT - Customizable Twitter t.co Link Placeholder
Purpose: Replace Twitter's automatic t.co shortened links with readable placeholders
TCO_REPLACEMENT: string; // Placeholder for t.co shortened links.Default: "πβοΈ"
Configuration Options:
""- Remove t.co links completely (cleanest output)"β"- Simple arrow symbol"πβοΈ"- Link emoji with arrow (default, visually clear)"[url]"- Text-based placeholder- Any custom text or emoji
How It Works:
- Twitter/X automatically shortens long URLs to t.co format in tweet text
- Script replaces all t.co links with your configured placeholder
- Placeholder is automatically removed when actual URLs are appended to post
- Smart deduplication prevents repeated placeholders
- Supports Unicode emoji with proper surrogate pair handling
Example:
// Tweet content: "Check out this article https://t.co/xyz123"
// With TCO_REPLACEMENT: "πβοΈ"
// Output: "Check out this article πβοΈ"
// After URL append: "Check out this article\nhttps://x.com/user/status/123"Technical Details:
- Platform-specific: Twitter/X only (
POST_FROM: "TW") - Applied in
processContent()function - Removed in
composeStatus()before URL append - Deduplicated to prevent consecutive placeholders
- Unicode-safe with ES5-compatible emoji extraction
2. COMBINE_TITLE_AND_CONTENT - RSS Title and Content Merging
Purpose: Combine RSS feed entry title with content body for richer posts
COMBINE_TITLE_AND_CONTENT: boolean; // Combine entryTitle and entryContent (RSS only).Default: false
When to Enable:
- β News aggregators where title provides context for content preview
- β RSS feeds with meaningful titles and short descriptions
- β Feeds where title + content together tell complete story
- β Feeds with redundant titles (title repeats in content)
- β Long-form content where title is unnecessary
- β Feeds with HTML-rich descriptions that become cluttered
How It Works:
- Combines
entryTitle + CONTENT_TITLE_SEPARATOR + entryContent - Applied BEFORE RSS truncation (
RSS_MAX_INPUT_CHARS) - Title is cleared to prevent duplication in downstream processing
- Combined content respects
POST_LENGTHlimits - Graceful fallback to title-only or content-only if one is empty
Example:
COMBINE_TITLE_AND_CONTENT: true
CONTENT_TITLE_SEPARATOR: "\n\nπ° "
// Input:
// entryTitle: "Prague Marathon 2025 Announced"
// entryContent: "Registration opens next week for the city's biggest running event..."
// Output:
"Prague Marathon 2025 Announced
π° Registration opens next week for the city's biggest running event...
https://example.com/prague-marathon-2025"Technical Details:
- Platform-specific: RSS only (
POST_FROM: "RSS") - Applied in
selectContent()function - Integration with
truncateRssInput()for character limits - Title parameter passed as empty string to
composeStatus()when enabled - RSS URL always shown when this feature is enabled
3. CONTENT_TITLE_SEPARATOR - Configurable Title/Content Separator
Purpose: Define custom separator text between RSS title and content
CONTENT_TITLE_SEPARATOR: string; // Title and Content SeparatorDefault: "\n\nπ° "
Common Configurations:
// News-focused (default)
CONTENT_TITLE_SEPARATOR: "\n\nπ° "
// Tech/development blog
CONTENT_TITLE_SEPARATOR: "\n\nπ§ "
// Academic/research feed
CONTENT_TITLE_SEPARATOR: "\n\nπ "
// Minimal style
CONTENT_TITLE_SEPARATOR: "\n\n"
// Inline with dash
CONTENT_TITLE_SEPARATOR: " β "
// Horizontal rule
CONTENT_TITLE_SEPARATOR: "\n---\n"Best Practices:
- β
Include whitespace for readability (
"\n\n"preferred over"\n") - β Choose emoji/symbols matching your bot's style and audience
- β
Test with various content lengths to ensure separator doesn't push over
POST_LENGTH - β Consider mobile readability (some emojis render larger on phones)
β οΈ Separator counts toward totalPOST_LENGTHlimit
Technical Details:
- Used only when
COMBINE_TITLE_AND_CONTENT: true - Applied only to RSS feeds (
POST_FROM: "RSS") - Inserted between title and content in
selectContent()function - No character escaping needed for normal spaces or emojis
π Bug Fixes (5)
Critical Fixes
Fix 1: RSS Anchor Tag Text Extraction (from v3.1.5)
Problem: RSS feeds containing <a href="URL">Readable Text</a> were replacing the entire tag with just the URL, losing meaningful text content.
Example Issue:
<!-- Input RSS content: -->
<a href="https://example.com/long-url-12345"><strong>Turok: Origins</strong></a>
<!-- Before fix (v3.1.4): -->
"... https://example.com/long-url-12345"
<!-- After fix (v3.2.0): -->
"... Turok: Origins"Root Cause: REGEX_PATTERNS.ANCHOR_TAG was only capturing href URL, not link text. Replacement function in normalizeHtml() discarded all text content.
Solution:
- Updated regex pattern to capture both href and link text:
/<a\s+[^>]*href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gi - Modified replacement function to extract clean text, removing nested HTML tags
- Link text preserved, href URL discarded (main
entryUrlis sufficient)
Impact:
- Improved readability for RSS feeds with embedded links
- Prevents URL clutter in posts
- Users click main post URL for full article anyway
Files Modified: Lines 228, 372-379
Fix 2: Ellipsis Not Added When Post Ends with TCO_REPLACEMENT
Problem: Posts ending with TCO_REPLACEMENT emoji (e.g., π
Example Issue:
// Tweet: 301 characters ending with t.co URL
// After t.co replacement: "...some text πβοΈ" (301 chars)
// Expected: "...some text πβοΈβ¦" (with ellipsis)
// Actual v3.1.4: "...some text πβοΈ" (NO ellipsis - BUG!)Root Cause:
- Ellipsis detection logic uses
hasTerminatorcheck to avoid adding ellipsis after emojis/URLs - Check included
REGEX_PATTERNS.EMOJI.test()which matchedTCO_REPLACEMENTemojis - This incorrectly identified posts ending with replacement emoji as "already terminated"
Solution:
- Added
strForCheckvariable that removes trailingTCO_REPLACEMENTbefore terminator detection - Original string kept intact for actual ellipsis addition
- Terminator check now ignores
TCO_REPLACEMENTemojis but still blocks for other emojis
Code Changes (lines 970-981):
// Create clean version for terminator check
var strForCheck = str;
if (SETTINGS.TCO_REPLACEMENT) {
const escapedPlaceholder = escapeRegExp(SETTINGS.TCO_REPLACEMENT);
const trailingPlaceholderRegex = new RegExp(escapedPlaceholder + "$");
strForCheck = str.replace(trailingPlaceholderRegex, "").trim();
}
// Check terminators on cleaned string
const hasTerminator = REGEX_PATTERNS.URL_TERMINATOR.test(strForCheck) ||
REGEX_PATTERNS.EMOJI.test(strForCheck.slice(-4)) ||
REGEX_PATTERNS.TERMINATOR_CHECK.test(strForCheck) ||
/\s>>$/.test(strForCheck);Impact:
- Posts with
TCO_REPLACEMENTnow correctly receive ellipses when truncated - Normal emojis still prevent ellipsis (desired behavior)
- URLs still prevent ellipsis (desired behavior)
Files Modified: Lines 970-981
Fix 3: Fragmented URL Protocols in Twitter Embeds
Problem: Twitter/X truncates long tweets, leaving URL protocol fragments like "hβ¦", "htβ¦", "httpsβ¦" at end of content.
Example Issue:
// Original tweet (too long): "...text https://example.com/article"
// Twitter truncates to: "...text hβ¦"
// Script output: "...text hβ¦\nhttps://x.com/status/123"
// Expected: "...text\nhttps://x.com/status/123" (fragment removed)Root Cause:
- Twitter's truncation algorithm can cut URLs mid-protocol
hasIncompleteUrlAtEnd()checked for incomplete domains but not protocol fragments- These fragments were left in final output, looking unprofessional
Solution:
- Added
URL_FRAGpattern to detect protocol fragments:/\s+h(tt?p(s)?[:\/]*|tt?|t)?\u2026$/ - Covers:
hβ¦,htβ¦,httβ¦,httpβ¦,httpsβ¦,http:β¦,https:β¦,http:/β¦,https://β¦ - Integrated into
hasIncompleteUrlAtEnd()andremoveIncompleteUrlFromEnd()functions
Code Changes:
// Line 248 - New regex pattern
URL_FRAG: /\s+h(tt?p(s)?[:\/]*|tt?|t)?\u2026$/,
// Line 917 - Detection
if (REGEX_PATTERNS.URL_FRAG.test(str)) return true;
// Line 927 - Removal
str = str.replace(REGEX_PATTERNS.URL_FRAG, "");Impact:
- Cleaner output from truncated tweets
- Professional appearance without URL fragments
- +3 bytes to script size (negligible)
Files Modified: Lines 248, 917, 927
Fix 4: ES5 Compatibility - Negative Lookbehind in formatMentions
Problem: formatMentions() function used ES5-incompatible negative lookbehind assertion (?<!https?:\/\/) causing script failures in IFTTT runtime.
Example Issue:
// Code in v3.1.4:
const pattern = "(?<!https?:\/\/)@" + escapeRegExp(username);
// IFTTT ES5 runtime error:
// "Invalid regular expression: /(?<!https?:\/\/)@username/: Invalid group"Root Cause:
- IFTTT uses ES5 JavaScript runtime
- Negative lookbehind
(?<!...)introduced in ES2018 - Not supported in ES5, causing runtime errors
Solution:
- Rewrote pattern to use ES5-compatible positive matching
- Two-pattern approach:
- First pattern protects complete URLs:
(^|[^a-zA-Z0-9@])(@username) - Replacement preserves captured prefix:
$1+ formatted mention
- First pattern protects complete URLs:
Code Changes (line ~685):
// Before (v3.1.4) - ES2018 syntax:
const pattern = "(?<!https?:\\/\\/)@" + escapeRegExp(username);
// After (v3.2.0) - ES5 compatible:
const pattern = "(^|[^a-zA-Z0-9@])(@" + escapeRegExp(username) + ")";
// ...
str = str.replace(regex, "$1" + formattedMention);Impact:
- Script now runs successfully in IFTTT's ES5 runtime
- Prevents silent failures in production
- Maintains identical functionality to previous version
Files Modified: Lines ~680-690 (formatMentions function)
Fix 5: wasRssTruncated Flow Logic Error
Problem: wasRssTruncated boolean value was being incorrectly overwritten in main execution logic, causing inconsistent behavior.
Root Cause:
composeContent()properly calculateswasRssTruncatedand returns it- Main logic then re-calculated it using
shouldTruncateRssInput()- overwriting correct value - This caused mismatch between actual truncation state and flag value
Solution:
- Extended
ProcessedContentinterface to includewasRssTruncatedproperty - Modified
composeContent()to returnwasRssTruncatedin result object - Removed duplicate calculation from main logic
- Main logic now uses value from
processed.wasRssTruncated
Code Changes:
// Line 117 - Interface extended
interface ProcessedContent {
content: string;
feedAuthor: string;
userNameToSkip: string;
wasRssTruncated: boolean; // β ADDED
}
// composeContent() return statement updated
return {
content: processed.content,
feedAuthor: processed.feedAuthor,
userNameToSkip: processed.userNameToSkip,
wasRssTruncated: wasRssTruncated // β ADDED
};
// Main logic (line 1412) - use returned value
const processed = composeContent(...);
const finalStatus = composeStatus(..., processed.wasRssTruncated); // β USE returned valueImpact:
- Correct ellipsis behavior for truncated RSS posts
- Consistent flag value throughout processing pipeline
- Cleaner code architecture with single source of truth
Files Modified: Lines 117, ~1165, 1412
βοΈ Technical Improvements (4)
1. Universal Deduplication System
Enhancement: Replaced three separate deduplication mechanisms with unified system.
Previous Approach (v3.1.4):
deduplicateUrls()- for URLsdeduplicatePlaceholder()- for TCO_REPLACEMENTdeduplicatePrefix()- for PREFIX_POST_URL- Each with duplicate logic, inconsistent behavior
New Approach (v3.2.0):
- Core helper:
findAllOccurrences()- returns{value, start, end}[]array - Specialized wrappers:
deduplicateUrls()- callsfindAllOccurrences()for URL patternsdeduplicatePlaceholder()- callsfindAllOccurrences()for placeholdersdeduplicatePrefix()- callsfindAllOccurrences()for prefixes
Benefits:
- β Single source of truth for deduplication logic
- β Consistent behavior across all content types
- β Easier to maintain and test
- β Modular design allows adding new deduplication types easily
Files Modified: Lines ~820-900
2. Unicode Emoji Handling for Surrogate Pairs
Enhancement: Proper extraction of emoji characters including surrogate pairs.
Problem: JavaScript's charAt(0) only returns first code unit, breaking emoji:
"πβοΈ".charAt(0) // Returns οΏ½ (incomplete character)Solution: ES5-compatible regex pattern for complete character extraction:
const firstCharMatch = SETTINGS.TCO_REPLACEMENT.match(/^(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|.)/);
const firstChar = firstCharMatch ? firstCharMatch[0] : "";Impact:
- β
Correctly handles emoji in
TCO_REPLACEMENT - β Prevents visual duplication issues
- β Works with all Unicode characters including complex emoji
- β ES5-compatible solution
Files Modified: Lines ~1209, ~860
3. Script Size Optimization
Achievement: Reduced script from 66.5KB to 62.8KB while adding features.
Optimization Techniques:
-
Comment Shortening:
- Settings section: Verbose descriptions β concise explanations
- Example:
"Banned content phrases/rules. Supports strings, regex, logical combinations."β"Banned phrases. Supports strings, regex, logic."
-
Section Header Simplification:
- Before:
///// SECTION NAME ///// - After:
// SECTION NAME //
- Before:
-
Inline Comment Reduction:
- Kept essential information
- Removed redundant examples
- Maintained critical warnings
-
Code Efficiency:
- No function inlining
- No logic changes that would break functionality
- Preserved all error handling and edge cases
Results:
- v3.1.4: 66,543 bytes
- v3.2.0: 62,820 bytes
- Savings: 3,723 bytes (5.6% reduction)
- Reserve: 2,716 bytes (4.2% of 65,536 byte limit)
Benefits:
- β Room for user customization (CONTENT_REPLACEMENTS, filters)
- β Future feature additions possible
- β Improved readability through focused comments
4. RSS URL Display Fix
Enhancement: RSS feeds now always show entryUrl instead of imageUrl.
Problem: URL selection logic only set showUrl = true when:
FORCE_SHOW_ORIGIN_POSTURLenabled, OR- Content truncated (needsEllipsis)
This caused RSS posts to show entryImageUrl instead of main article URL.
Solution: Added platform-specific check:
if (platform === "RSS") { showUrl = true; }Impact:
- β RSS posts always include article link
- β Users can access full content
- β Consistent behavior for news aggregation use case
Files Modified: Line ~1309
π Changed
Settings Interface Reorganization
The AppSettings interface has been reorganized for improved clarity:
Logical Grouping:
- CONTENT FILTERING & VALIDATION - All filtering rules
- CONTENT PROCESSING & TRANSFORMATION - Including new
TCO_REPLACEMENT - URL CONFIGURATION - Ordered by priority (show β fix β replace)
- OUTPUT FORMATTING & PREFIXES - Alphabetically sorted
- PLATFORM-SPECIFIC SETTINGS - General platform behavior
- RSS-SPECIFIC SETTINGS - Including new
COMBINE_TITLE_AND_CONTENTandCONTENT_TITLE_SEPARATOR
Comment Style:
- Section headers:
///// SECTION /////β// SECTION // - Setting descriptions: Concise, essential information only
- Examples kept where critical for understanding
Example Changes:
// Before (v3.1.4):
PHRASES_BANNED: (string | FilterRule)[]; // Banned content phrases/rules. Supports strings, regex, logical combinations.
// After (v3.2.0):
PHRASES_BANNED: (string | FilterRule)[]; // Banned phrases. Supports strings, regex, logic.Documentation Updates
- Header: "Black Friday Xcom rev" β "Monkey Day Xcom rev"
- Date: Nov 28th β Dec 15th
- Build: 20251214 β 20251215
- Comments: Streamlined throughout for readability
π Migration Guide
From v3.1.4 to v3.2.0
β Zero Breaking Changes
This is a fully backward-compatible release. All v3.1.4 configurations work identically in v3.2.0.
π― Migration Steps
-
Backup Current Configuration
// Save your current SETTINGS block -
Replace Script Content
- Copy entire v3.2.0 script
- Paste into IFTTT code editor
- Your existing settings will work unchanged
-
Optional: Enable New Features
// For Twitter/X bots: TCO_REPLACEMENT: "πβοΈ", // or "" to remove, or custom text // For RSS feeds: COMBINE_TITLE_AND_CONTENT: true, CONTENT_TITLE_SEPARATOR: "\n\nπ° ",
-
Test with Beta Bot (Recommended)
- Deploy to @BetaBot or test account
- Monitor for 24-48 hours
- Verify:
- URL handling correct
- Ellipses added properly
- Content formatting as expected
- No truncation at dates/abbreviations
-
Deploy to Production
- Replace production bot script
- Monitor first 10-20 posts
- Adjust settings if needed
π What to Expect
Immediate Improvements (even without changing settings):
- β RSS anchor tags show readable text instead of URLs
- β Ellipses correctly added to truncated Twitter posts
- β No URL protocol fragments (hβ¦, httpsβ¦)
- β Script runs in ES5 environments
- β Correct truncation indicators for RSS
With New Settings Enabled:
- Twitter bots: Cleaner output with custom t.co placeholders
- RSS feeds: Richer posts with combined titles and content
π Statistics
Code Metrics
| Metric | v3.1.4 | v3.2.0 | Change |
|---|---|---|---|
| File Size | 66,543 bytes | 62,820 bytes | -3,723 bytes (-5.6%) |
| Lines of Code | 1,401 | 1,424 | +23 lines (+1.6%) |
| New Settings | - | 3 | +3 |
| Bug Fixes | - | 5 | +5 |
| New Functions | - | 0 | 0 |
| Modified Functions | - | 6 | selectContent, composeContent, composeStatus, hasIncompleteUrlAtEnd, removeIncompleteUrlFromEnd, formatMentions |
| New Interfaces | - | 0 | ProcessedContent extended |
| IFTTT Limit | 65,536 bytes | 65,536 bytes | - |
| Reserve | 1,007 bytes (1.5%) | 2,716 bytes (4.2%) | +1,709 bytes |
Testing Coverage
| Category | Tests | Pass Rate | Notes |
|---|---|---|---|
| RSS Anchor Tags | 6 | 100% | Real-world content from Czech news sources |
| TCO Replacement | 12 | 100% | Various emoji and text placeholders |
| Title+Content Combo | 8 | 100% | Different separator styles |
| URL Fragments | 8 | 100% | All protocol fragment variations |
| Ellipsis Logic | 10 | 100% | Posts ending with TCO_REPLACEMENT |
| ES5 Compatibility | 15 | 100% | formatMentions with various usernames |
| wasRssTruncated Flow | 6 | 100% | Truncated and non-truncated RSS |
| Deduplication | 15 | 100% | URLs, placeholders, prefixes |
| Total | 80 | 100% | All new and modified functionality |
Real-World Validation
Tested extensively with:
- Czech News Sources: ΔT24, iROZHLAS.cz, Novinky.cz, DenΓk N, INDIAN TV
- Twitter/X Accounts: Seznam ZprΓ‘vy, FINMAG, PoslednΓ skaut, OMGzine
- RSS Aggregators: Multiple RSS.app feeds, custom RSS implementations
- Edge Cases: Long tweets, truncated content, special characters, Unicode emoji
Complexity Analysis
| Metric | v3.1.4 | v3.2.0 | Change |
|---|---|---|---|
| Cyclomatic Complexity | Average | Average | No increase |
| Cognitive Complexity | Moderate | Moderate | Minimal increase (simple conditionals) |
| Maintainability Index | 72 | 73 | +1 (improved) |
| Technical Debt | Low | Low | No increase |
β Verified Compatibility
Platform Support
| Platform | Status | Notes |
|---|---|---|
| Twitter/X | β Fully Tested | POST_FROM: "TW" |
| RSS Feeds | β Fully Tested | POST_FROM: "RSS" |
| Bluesky | β Verified | POST_FROM: "BS" |
| YouTube | β Verified | POST_FROM: "YT" |
IFTTT Triggers
| Trigger | Compatibility | Testing |
|---|---|---|
| Twitter: New tweet from search | β | Extensively tested |
| RSS: New feed item | β | Extensively tested |
| Bluesky: New post | β | Verified compatible |
| YouTube: New video | β | Verified compatible |
Runtime Compatibility
| Requirement | v3.2.0 | Details |
|---|---|---|
| JavaScript Version | ES5 | Full compatibility |
| TypeScript Version | 2.9.2 | Compilation source |
| IFTTT Size Limit | β 62,820 bytes | 2,716 bytes reserve (4.2%) |
| IFTTT Function Limit | β 41 functions | Exactly at limit |
| Unicode Support | β Full | Including emoji surrogate pairs |
π Known Issues
None - All known issues from v3.1.4 have been resolved. No new issues introduced in v3.2.0.
π Documentation
Project Files
- README.md - Project overview and quick start
- Settings_for_IFTTT_filter_script_-_v3_2_0.md - Comprehensive settings guide
- Unified_Filter_Guide__-_v3_1_0.md - Advanced filtering documentation
- CONTENT_REPLACEMENTS_examples_for_IFTTT_filter_script_v3_0.md - Content replacement patterns
New in v3.2.0
This release notes document serves as comprehensive documentation for:
- Three new configuration settings
- Five critical bug fixes
- Four technical improvements
- Migration procedures
- Testing results
Example Scripts
- example-ifttt-filter-x-xcom-3_2_0.ts - Twitter/X configuration
- example-ifttt-filter-rss-3_2_0.ts - RSS feed configuration
- example-ifttt-filter-bluesky-3_2_0.ts - Bluesky configuration
π Links
GitHub
- Repository: https://github.com/DanielSnor/Zpravobot.news
- Release v3.2.0: https://github.com/DanielSnor/Zpravobot.news/releases/tag/v3.2.0
- Issues: https://github.com/DanielSnor/Zpravobot.news/issues
- Discussions: https://github.com/DanielSnor/Zpravobot.news/discussions
Documentation
- Settings Guide: Settings_for_IFTTT_filter_script_-_v3_2_0.md
- Filter Guide: Unified_Filter_Guide__-_v3_1_0.md
- Content Replacements: CONTENT_REPLACEMENTS_examples_for_IFTTT_filter_script_v3_0.md
Social Media
- Mastodon: @zpravobot@mastodon.social
- Project Tag: #ZpravobotNews
Previous Releases
- v3.1.4 (2025-11-28): Bug fixes - URL_DOMAIN_FIXES ES5 compatibility, Unicode normalization
- v3.1.3 (2025-11-20): URL deduplication, smart sentence detection
- v3.1.2 (2025-11-15): Content replacement edge cases, URL encoding
- v3.1.1 (2025-11-10): RSS feed processing bugs, error handling
- v3.1.0 (2025-11-01): Unified filtering, multi-domain URL replacement
π¬ Support & Feedback
Reporting Issues
Found a bug? Have a feature request?
- Check Existing Issues: https://github.com/DanielSnor/Zpravobot.news/issues
- Create New Issue: Include:
- IFTTT configuration (SETTINGS block)
- Input data (EntryContent, EntryTitle, etc.)
- Expected vs actual output
- Script version (v3.2.0)
Getting Help
- GitHub Discussions: https://github.com/DanielSnor/Zpravobot.news/discussions
- Mastodon: @zpravobot@mastodon.social
- Email: (if configured in repository)
Contributing
Contributions welcome! See CONTRIBUTING.md (if available) for guidelines.
π Acknowledgments
Special Thanks
- Czech Mastodon Community - RSS feed testing and feedback
- Beta Testers - Early testing of TCO_REPLACEMENT and title+content features
- AI Code Reviewers - Perplexity and GitHub Copilot for identifying ES5 compatibility issues
Contributors
- Daniel - Lead developer and maintainer
- Community - Bug reports, feature requests, testing
Powered By
- IFTTT Platform - Automation infrastructure
- TypeScript - Development language
- ES5 JavaScript - Runtime environment
π Release Timeline
v3.2.0 Development
- Dec 4, 2025: Initial nightly builds with TCO_REPLACEMENT
- Dec 9, 2025: RSS title+content combination feature
- Dec 14, 2025: AI code review, ES5 compatibility fixes
- Dec 15, 2025: Final fixes (ellipsis, URL fragments)
- Dec 15, 2025 9:15: v3.2.0 Release π
What's Next
v3.2.1 (If Needed - Late December 2025)
- Hot fixes based on production feedback
- Minor documentation updates
v3.3.0 (Planned - Q1 2026)
- Additional RSS processing options
- Enhanced Bluesky quote post handling
- Performance optimizations for large feeds
- Community-requested features
Long-term Roadmap
- Integration with additional platforms
- Advanced filtering capabilities
- Community plugin system (potential)
π Upgrade Benefits Summary
Why Upgrade to v3.2.0?
Critical Fixes (Everyone Benefits):
- β RSS Anchor Tags: Readable text instead of URLs
- β Ellipsis Logic: Correct truncation indicators
- β URL Fragments: Professional output without "hβ¦", "httpsβ¦"
- β ES5 Compatibility: Runs reliably in IFTTT
- β RSS Truncation Flow: Correct behavior indicators
New Capabilities (Opt-In):
- β TCO_REPLACEMENT: Customize or remove t.co links
- β RSS Title+Content: Richer news aggregation posts
- β Custom Separators: Match your bot's style
Technical Improvements (Behind the Scenes):
- π§ 4.2% Size Reserve: Room for customization
- π§ Unified Deduplication: Cleaner code, consistent behavior
- π§ Unicode Support: Proper emoji handling
- π§ Better Architecture: Single source of truth for flags
Zero Cost:
- β Drop-in replacement
- β No configuration changes required
- β Full backward compatibility
Full Changelog: v3.1.4...v3.2.0
Questions? Issues? Feature Requests?
Open an issue on GitHub or reach out on Mastodon!
Happy Automating! π