Uplinkr Release Notes and Changelog
v0.2.1 — Scheduler safety for async probe execution
Section titled “v0.2.1 — Scheduler safety for async probe execution”Changed
Section titled “Changed”- Added
scheduler.alert_cronas a separate cron expression foruplinkr:project:alert:decision - Default
scheduler.alert_cronis now*/2 * * * *to give queued probe jobs more time to persist freshstate.jsondata - Setting
scheduler.alert_crontonullreuses the mainscheduler.cronschedule
uplinkr:project:alert:decisionis no longer scheduled withrunInBackground()- Reduces the risk of stale
state.jsonreads when async (job) probe execution returns before queue workers persist probe state
v0.2.0 — TLS, async execution & alert quality improvements
Section titled “v0.2.0 — TLS, async execution & alert quality improvements”Highlights
Section titled “Highlights”- Added async probe execution via queue jobs (
execution_mode:directorjob) - Added new
uplinkr:configcommand to inspect effective configuration - Added TLS metadata field
probe_tls_expiration_datein probe results - Added project-level alert notification aggregation (reduced alert noise)
- Added aggregated notification rendering with deterministic probe ordering
- Added configurable probe-result JSON formatting (
pretty_print_probe_results)
Configuration Additions
Section titled “Configuration Additions”probes.execution_modeprobes.queue_connectionstorage.pretty_print_probe_results
Additional Changes
Section titled “Additional Changes”- Added explicit Composer requirement
ext-opensslfor TLS certificate parsing support UrlHandlernow dispatches jobs whenexecution_mode = 'job'and returnsnullfor dispatched probe runsUplinkrConfignow includesprobeExecutionMode,probeQueueConnection, andshouldExecuteProbesAsJob()HandlesProbeOutputnow handlesnullresults and shows clearer feedback for queued probe dispatchingprobe_tls_expiration_dateis now propagated into alert notification payloads (mail, webhook, log)- Project handlers were reorganized into focused namespaces (
Analyze,Archive,Probes) with updated imports/bindings/tests
Additional Fixes
Section titled “Additional Fixes”AlertDecisionHandlernow persists alert state immediately after each successfully delivered grouped notification batch to reduce duplicate alerts on partial failures- Persisted
probe_tls_expiration_dateintostate.jsonprobe entries for reliable alert decision access - Aggregated mail output now renders
n/awhen TLS expiration isnull uplinkr:configoutput now escapes keys/values to avoid console markup parsing and shows empty arrays as[]AnalyzeHandler::extractDateFromFilename()now respects the configured probe filename separatorPruneHandlernow parses probe-result dates according to configured grouping (daily,hourly,monthly)- Added backward-compatible normalization from legacy
headertoheadersin project storage and values
Testing
Section titled “Testing”- Extended probe/job execution test coverage (direct mode, job mode, and
executeProbe()) - Added coverage for TLS metadata propagation, aggregated alert notifications/log output, and deterministic probe ordering
- Added coverage for configurable probe-result JSON pretty printing and config command escaping
- Added coverage for custom filename separators, hourly pruning, and header key normalization
- No breaking changes
- Default behavior remains synchronous (
execution_mode=direct) - Existing storage behavior remains unchanged by default (
pretty_print_probe_results = true)
v0.1.2 — Stability & compatibility fixes
Section titled “v0.1.2 — Stability & compatibility fixes”Release Goal
Section titled “Release Goal”This patch release focuses on configuration safety, clearer error handling, and general code quality improvements. No new features are introduced; existing behavior is preserved while preventing unintended breaking changes.
Fixes & Improvements
Section titled “Fixes & Improvements”-
User-Agent configuration for HTTP probes
-
Implemented configurable
user_agentsupport for HTTP-based probes. -
Constructor compatibility safeguard
-
Moved the
userAgentparameter to the end of theUplinkrConfigconstructor. -
Prevents breaking changes by maintaining positional argument compatibility for existing constructor calls.
-
Improved error logging
-
Added explicit error logging when invalid JSON data is encountered.
-
Corrected analysis failure messaging
-
Fixed incorrect string output used for failed analyses in result messages.
-
General code cleanup
-
Minor refactoring and cleanup to improve readability and maintainability.
- No breaking changes
- Recommended update for all users
v0.1.1 — Stability & fixes
Section titled “v0.1.1 — Stability & fixes”Release Goal
Section titled “Release Goal”This patch release improves resilience in containerized environments where filesystem permission issues can affect access to storage/app/uplinkr.
Fixes & Improvements
Section titled “Fixes & Improvements”League\Flysystem\UnableToListContentsis now explicitly handled during project directory listing.- Instead of aborting execution, Uplinkr now falls back gracefully to an empty result (
[]). - A warning log entry is emitted to make the fallback reason visible to operators.
Logging Details
Section titled “Logging Details”When storage listing fails, Uplinkr logs a warning with structured context:
diskstorage_pathreason(original exception message)
Impact on Existing Behavior
Section titled “Impact on Existing Behavior”- No breaking changes.
- CLI commands remain stable and do not crash on listing permission failures.
- Improved observability through explicit warning logs.
Operator Guidance
Section titled “Operator Guidance”If this warning appears, verify:
- Runtime user permissions (for example:
www-data) - Owner/group configuration of mounted storage directories
- Container mount options (read/write access, UID/GID mapping)
- Added a unit test covering the exception path and verifying warning log emission.
Documentation
Section titled “Documentation”- Updated README, CHANGELOG and CONTRIBUTING for clarity and consistency.
v0.1.0 — Initial MVP release
Section titled “v0.1.0 — Initial MVP release”- CLI-first monitoring for URLs and APIs
- Project and probe management
- File-based JSON storage
- Alert configuration with log, mail and webhook channels
- Scheduler integration for automated probe execution
- Prune tooling for old results
- Minimal result summaries (experimental)
Notes
- Requires PHP 8.2+ and Laravel 12
- Early MVP — API and behavior may evolve
- No breaking changes