fanat98/laravel-task-orchestrator
task-orchestrator:monitor-scheduled-runs).illuminate/support constraint from ^11.0|^12.0|^13.0 to ^12.0|^13.0.task-orchestrator:monitor-scheduled-runs command.orchestra/testbench:^9.15.require-dev and allow transitive dependency adjustments during matrix resolution.illuminate/support) and dev tooling (orchestra/testbench).composer.json package metadata with a stronger description, Packagist keywords, homepage, and support links.task-orchestrator.notifications (enabled, recipients).notifications key, with precedence over global settings.NotificationEvaluationAction orchestrates notification dispatch after terminal status transitions.NotificationConfigResolver resolves effective enabled state and recipient list with global/per-task precedence.RecoveryDetector determines if a successful run represents recovery from a previous failure.TaskFailedMailable and TaskRecoveredMailable queued mailables with Blade email templates.NotificationPayload value object for resolved notification data (validated emails, max 50 recipients).TaskDefinition::notifications() fluent method for immutable per-task notification config.DiscoveredTaskDefinitionFactory maps notifications key from discovery metadata.illuminate/mail is not registered.task-orchestrator-views publish tag for template customization.TaskFailedMailable and TaskRecoveredMailable.ExecuteTaskRunAction now accepts an optional NotificationEvaluationAction dependency and triggers notification evaluation after terminal status updates.ExecuteTaskRunJob::failed() now triggers notification evaluation for timeout/exception failures.TaskOrchestratorServiceProvider conditionally registers notification services when mail.manager is bound.QueueHeartbeatJob now implements ShouldBeUnique with a 120-second lock to prevent thousands of duplicate jobs accumulating when the queue worker is down.RunScheduledTaskCommand now checks queue worker heartbeat health before dispatching. When the queue worker is down, scheduled tasks are skipped with a warning instead of creating orphaned task run records.latest('started_at'), latest('created_at') with COALESCE(finished_at, started_at, created_at) DESC across all run queries. Runs with NULL started_at (stale queued runs marked as failed) now sort correctly by their most recent activity timestamp.DashboardController, DashboardStatusController, TaskRunIndexController, FailedTaskRunIndexController, TaskDetailDataProvider, and TaskStartBlockingEvaluator all use consistent COALESCE-based ordering for task run queries.status-badge to status-pill for better consistencytask_runs via timeout_seconds and timeout_at so stale-run handling no longer depends solely on the current task definition.StartTaskAction now stores the effective timeout on the task run record when dispatching ExecuteTaskRunJob.ExecuteTaskRunAction now preserves an existing run's original started_at and timeout_at values instead of resetting them on a later execution attempt.RecoverStaleTaskRunsCommand now resolves stale runs primarily from persisted per-run timeout data, while still supporting explicit global timeout overrides.running after their configured timeout when worker timeout failure hooks were not reached reliably.prefers-color-scheme on first visit, persists choice in localStorage, and toggles sun/moon icons instead of emoji.1rem gap) with a subtle top border separator..td-tabs-bar had no bottom spacing causing them to overlap the border line..task-tab-pagination were missing styles entirely, causing them to render without any gap.task-orchestrator:record-scheduler-heartbeat command so scheduler liveness heartbeats are not blocked by stale scheduler mutexes in Cloud Foundry / distributed environments.queue_worker.status (running, down)queue_worker.last_heartbeat_atQueueHeartbeatJobExecuteTaskRunJobGET /tasks/{task}GET /tasks/{task}/runsGET /tasks/{task}/failuresGET /tasks/{task}/logsGET /tasks/{task}/documentationTaskDetailDataProvider for task meta, recent runs, startability state, logs, and documentation extraction.documentation() method, and $documentation property.Runs (redundant Overview tab removed)View tasks, View runs, View pipelines) because top navigation already covers these links.health.queue_worker.heartbeat_max_age_seconds configuration.TaskStartBlockingEvaluator) reused by UI state and backend guard logic.is_blocked_by_dependenciesblocked_by_task_namesstart_block_reasoncan_starthealthy, busy, stuck) based on pending job count and oldest pending job agerunning, down) based on scheduler heartbeat timestamptask-orchestrator.healthtask-orchestrator:record-scheduler-heartbeatStartTaskAction now enforces dependency-based blocking through the centralized backend guard path.--minutes override to respect task-specific timeouts.queue and scheduler sections while keeping compatibility top-level metrics.queueconnectionTaskDefinition immutable builders now preserve queue and connection across chained calls.README.md and docs/discovery.md with queue/connection discovery examples.depends_on)timeout_minutes)discovery_path)How can I help you explore Laravel packages today?