SPACE / SATELLITE TERMINAL CHANGELOG
====================================

v1.0.4 - 2026-09-19
-------------------
- Fixed ISS/satellite ASCII art alignment by preserving printable spacing while still stripping terminal control bytes.
- Fixed Near-Earth close-approach rows so object, date, lunar-distance and speed values are painted at fixed terminal columns.
- Fixed manual ISS refresh behavior: normal reads retain the 15-second cache, while R may request new live telemetry after a 2-second minimum interval.
- Corrected generic manual-refresh cache semantics so R can refresh a source after its configured minimum interval rather than being forced to wait for the full normal TTL.
- Hardened NOAA SWPC Kp and Kp-forecast parsing to accept both keyed-object feeds and header-row/table feeds, covering the reviewed fixture shape without breaking the current live SWPC shape.
- Added outbound remote-text sanitizing: strips ESC/control bytes, preserves literal pipes safely, and prevents ATDT %XX MCI expansion inside provider text.
- Added an approximately 8-second total network budget per caller screen with 3-second connect and 5-second per-request limits.
- Main terminal now performs at most one live provider request (ISS); launch and space-weather summary panels use cache only.
- Added 60-second negative caching so a failed provider is not retried on every repaint.
- Changed per-URL cache locks to non-blocking behavior; concurrent callers serve existing cached data instead of waiting behind a slow fetch.
- Manual R refresh now honors each source's normal/minimum cache interval instead of unconditionally bypassing a fresh cache entry.
- Added stale-if-error operation to satellite GP, SATCAT, launch, NOAA space-weather, and JPL close-approach data.
- Invalid and unknown NORAD entries now return to the satellite prompt instead of being reported as a board/network failure.
- Main status is now derived from available data and reports ACTIVE, DEGRADED, or DOWN instead of always claiming the network is active.
- Reworked truncation, wrapping and padding to use multibyte display width rather than raw UTF-8 byte counts.
- Shortened the ISS fallback/status notes so they remain within the 80-column display.
- Reworked Help text so descriptions fit, Refresh behavior is accurate, and B/X/ENTER behavior is documented.
- Added a long-lived cached CelesTrak SATCAT request so Object Type, Country, and Launch Date can populate alongside GP orbital elements.
- Added scalar-safe provider-field handling to avoid "Array" output and PHP array-to-string warnings if an API changes shape.
- Fixed satellite ASCII art so literal | characters remain intact; remote launch names containing | are also displayed literally.
- Clarified satellite prompt, Mission Profile ENTER behavior, Back/Main aliases, and quit aliases.
- Added configurable SysOp contact and BBS website fields used to build the outbound User-Agent at request time.
- Added a 1 MiB hard download cap for both cURL and stream transports, including decompressed cURL response data.
- Restricted all start URLs and redirects to HTTPS.
- Caller-facing transport failures are now generic; detailed provider/cURL/TLS messages remain in the SysOp diagnostics/log path.
- Added cleanup of orphaned .lock files and retained stable lock inodes to avoid lock/unlink races.
- Standardized runtime-folder protection and automatic .htaccess/index.html recreation; no runtime .gc file is shipped in the ZIP.
- Updated requirements to PHP 8.1+, JSON, mbstring and OpenSSL; refreshed installation, cache, command, identity and packaging documentation.
- Changed manifest/menu title to "Space / Satellite Terminal v1.0.4" and added v1.0.4 to the main terminal/admin titles.
- Package/manifest author remains DOS BBS; README identity metadata was aligned with the manifest.
- The runtime cache intentionally remains at spaceterminal/cache/; it was NOT moved to ATDT's DoorStore sandbox in this release.

v1.0.3 - 2026-09-19
-------------------
- Renamed the runtime data directory from temp/ to cache/.
- Updated all cache paths, SysOp text, and documentation to use cache/.
- Existing temp/ data is intentionally not migrated; cache data is rebuilt automatically.

v1.0.2 - 2026-09-19
-------------------
- Removed the user-facing cache/database note from the main screen footer.
- Shortened the ISS refresh/cache note so it stays on one 80-column line.

v1.0.1 - 2026-09-19
-------------------
- Prefer IPv4 for cURL HTTPS requests to avoid broken shared-hosting IPv6 routes.
- Added last-good ISS telemetry failover for transient WhereTheISS timeouts.
- Stale ISS telemetry is clearly labeled with its age and is never used beyond 30 minutes.
- Added CelesTrak GP fallback when no usable live/cached ISS position is available.
- CelesTrak fallback shows mean orbital altitude/speed only and deliberately leaves live latitude/longitude blank.
- Improved SysOp diagnostics to identify cached/fallback ISS operation.

v1.0.0 - 2026-09-19
-------------------
- Initial ATDT Native PHP release.
- Added live ISS orbital telemetry via WhereTheISS.at.
- Added CelesTrak NORAD satellite lookup.
- Added upcoming launch schedule and mission detail screens via Launch Library 2.
- Added NOAA SWPC Kp, G/R/S scales, and Kp outlook.
- Added NASA/JPL CNEOS close-approach display for near-Earth objects.
- Added filesystem-only runtime cache with atomic writes and per-URL locking.
- Added automatic cache cleanup and a hard cap of about 2 MiB / 96 JSON files.
- Added SysOp connectivity/status panel.
- No door-specific telemetry/history tables, API keys, daemon, cron job, IRC, or websocket required.
