NEWS WIRE CHANGELOG
===================

1.0.7 - Network safety, cache robustness, and parser cleanup
-----------------------------------------------------------
- Added v1.0.7 to the NEWS WIRE title on every caller screen.
- Hardened feed/article requests against localhost, private, reserved, and link-local destinations.
- Changed redirects to manual HTTPS-only handling with destination validation on every hop.
- Added an 8-second caller-screen network budget and a bounded admin feed-test budget.
- Reduced per-request network timeouts so a slow publisher cannot monopolize a caller session.
- Added short negative-cache cooldowns after failed feed and article requests.
- Changed per-URL locks to non-blocking behavior; callers use stale data instead of waiting behind another refresh.
- Added cleanup of abandoned .lock, .tmp, and old failure-marker files.
- Enforced the 1 MiB response limit while data is being downloaded, including decoded cURL responses.
- Reworked the allow_url_fopen fallback to use bounded reads with a wall-clock deadline.
- Split feed cache and article-text cache pools so article activity cannot evict RSS/Atom responses.
- Changed article caching to store only the extracted text excerpt instead of the full publisher HTML page.
- Limited article extraction input to 256 KiB and replaced the broad paragraph/article regex scans with bounded string scanning.
- Added a per-feed Article checkbox in admin.php so SysOps can disable linked-page excerpt fetching for a source.
- Fixed Atom feeds where an empty <summary> incorrectly hid populated <content> text.
- Added fallback conversion for legacy/non-UTF-8 feeds handled by the internal parser.
- Fixed punctuation/symbol/emoji-only headlines being dropped by the de-duplication pass.
- Fixed duplicate feed names overwriting one another in the SysOp feed-test results.
- Changed remote publisher text to literal ANSI output so ATDT %XX MCI variables cannot be expanded from headlines or stories.
- Changed story wrapping to ATDT's multibyte-safe visible-width wrapper.
- Improved HTML cleanup so adjacent paragraph/block tags do not glue sentences together.
- Replaced caller-visible transport details with a generic feed-error screen while keeping detailed errors in SysOp logs/admin diagnostics.
- Corrected desk ENTER labels, stale-cache wording, and undocumented/dead key handling.
- Updated README/admin copy for ATDT 1.7.7 terminology, PHP 8.1+, current feed management, cache behavior, and article-excerpt behavior.
- Centralized the PHP version literal in lib/Version.php.
- Removed the runtime cache/.gc marker from the distribution; it is created automatically when needed.
- Fixed publisher-page excerpts that could include inline JavaScript/analytics text after the readable story content.
- Added explicit removal of script, style, noscript, template, SVG, canvas, and iframe blocks before paragraph extraction.
- Added preference for publisher articleBody sections before falling back to a generic article element.
- Added a secondary code-like text filter for malformed publisher markup.
- Changed article extraction to prefer structured JSON-LD articleBody text, then visible article paragraphs, then the page description instead of simply choosing the longest candidate.
- Versioned the article-text cache key so older bad excerpts are ignored immediately and rebuilt cleanly.
- Updated README documentation for publisher-page excerpt filtering.

1.0.6 - Cache folder cleanup
----------------------------
- Kept the runtime cache folder as newswire/cache/ for fresh installs.
- Removed the legacy temp-to-cache migration code.
- Updated admin/status wording to refer to the cache folder consistently.

1.0.5 - Cache folder rename
---------------------------
- Changed the runtime cache folder from newswire/temp/ to newswire/cache/.
- Updated the package layout and documentation for the new cache path.
- Added temporary migration logic for older temp-cache installs; this was removed in 1.0.6 for the fresh-install package.

1.0.4 - Main Menu label cleanup
--------------------------------
- Changed the M navigation option from "M Main" to "Main Menu" across door screens.
- The leading M remains bright white as the highlighted hotkey.

1.0.3 - Admin-managed feeds
---------------------------
- Added editable U.S. and World RSS/Atom source lists to admin.php.
- Added enable/disable controls for individual feeds.
- Added up to eight configurable feed slots per desk.
- Added protected JSON persistence in newswire/config/feeds.json.
- Added one-click restore of the built-in NPR, New York Times, and Guardian defaults.
- Feed diagnostics now test the currently enabled admin-configured sources.
- Custom source labels receive a stable bright ANSI color automatically.
- Custom feed settings remain filesystem-based; no News Wire ATDT database tables are created.

1.0.2 - Colorized headline desk
--------------------------------
- Added publisher-specific colors to the headline source labels.
- Changed story numbers to bright yellow for faster scanning.
- Added color emphasis to headline counts, source counts, and page numbers.
- Kept headline text bright white and single-line for readability.

1.0.1 - Display cleanup and story-text improvement
--------------------------------------------------
- Removed the landing-screen implementation/storage lines to keep the main menu cleaner.
- Changed headline desks to display each story title on a single line only.
- Added article-page text extraction when the feed summary is too short or missing.
- Changed story screens to label whether the text came from the feed summary or the article page.
- Updated help/readme text for the new story behavior.

1.0.0 - Initial release
-----------------------
- Added separate United States and World headline desks.
- Added NPR National and NPR World RSS sources.
- Added New York Times U.S. and World RSS sources.
- Added The Guardian U.S. and World RSS sources.
- Added newest-first multi-source merge and headline de-duplication.
- Added five-headline paging and numbered story selection.
- Added paged publisher-supplied story summaries.
- Added article-link screen.
- Added five-minute feed cache and six-hour last-good failover.
- Added automatic cache size/file-count limits.
- Added SysOp connectivity and RSS/Atom parser diagnostics.
- Added source configuration in config.php.
- Added cursor:false to door.json.
- No ATDT door tables, API keys, cron jobs, or background services required.
