From 32e2d726bb26dc1fb3a178c8e37c3b50433febe5 Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #83 - The Compiler)" Date: Sun, 12 Apr 2026 23:09:23 -0500 Subject: [PATCH] Fix: manualCheck now checks modpack_installations + cron cache Detection priority in manualCheck(): 1. Egg variables 2. modpack_installations table (NEW) 3. DaemonFileRepository file scan 4. Cached cron data from modpackchecker_servers (NEW) Also returns current_version and update_available in response so the console widget can show version comparison. Co-Authored-By: Claude Opus 4.6 (1M context) --- ...026-04-12-manualcheck-missing-installer.md | 43 +++++++++++++++++++ .../Http/Controllers/ModpackAPIController.php | 36 ++++++++++++++-- 2 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 docs/code-bridge/archive/MSG-2026-04-12-manualcheck-missing-installer.md diff --git a/docs/code-bridge/archive/MSG-2026-04-12-manualcheck-missing-installer.md b/docs/code-bridge/archive/MSG-2026-04-12-manualcheck-missing-installer.md new file mode 100644 index 0000000..bdffab3 --- /dev/null +++ b/docs/code-bridge/archive/MSG-2026-04-12-manualcheck-missing-installer.md @@ -0,0 +1,43 @@ +# Chronicler Dispatch — manualCheck doesn't check modpack_installations + +**Date:** 2026-04-12 +**From:** Chronicler #84 — The Meridian +**To:** Code + +--- + +## Root Cause + +The console widget calls `manualCheck()` in `ModpackAPIController.php`. That method only checks: +1. Egg variables +2. File detection (DaemonFileRepository) + +It does NOT check `modpack_installations` — so it always returns "Could not detect modpack" for servers without egg variables, even though the cron already knows the platform and pack ID. + +## The Fix + +Add `modpack_installations` as step 2 in `manualCheck()`, before file detection: + +```php +// 2. Check modpack_installations table +if (empty($platform) || empty($modpackId)) { + $installation = DB::table('modpack_installations') + ->where('server_id', $server->id) + ->first(); + if ($installation) { + $platform = $platform ?: $installation->provider; + $modpackId = $modpackId ?: (string) $installation->modpack_id; + } +} + +// 3. Try file detection (existing step) +if (empty($platform) || empty($modpackId)) { + $detected = $this->detectFromFiles($server); + ... +} +``` + +Also — the widget only shows `latest_version` but not `current_version`. Consider also reading from `modpackchecker_servers` to show both versions and the update status, since the cron already has that data cached. + +*— Chronicler #84, The Meridian* +**Fire + Frost + Foundation** 💙🔥❄️ diff --git a/services/modpack-version-checker/blueprint-extension/app/Http/Controllers/ModpackAPIController.php b/services/modpack-version-checker/blueprint-extension/app/Http/Controllers/ModpackAPIController.php index 9512644..aa1c012 100644 --- a/services/modpack-version-checker/blueprint-extension/app/Http/Controllers/ModpackAPIController.php +++ b/services/modpack-version-checker/blueprint-extension/app/Http/Controllers/ModpackAPIController.php @@ -92,14 +92,36 @@ class ModpackAPIController extends Controller }; } - // 2. If no egg variables, try file detection + // 2. Check modpack_installations table + if (empty($platform) || empty($modpackId)) { + $installation = DB::table('modpack_installations') + ->where('server_id', $server->id) + ->first(); + if ($installation) { + $platform = $platform ?: ($installation->provider ?? null); + $modpackId = $modpackId ?: (string) ($installation->modpack_id ?? ''); + } + } + + // 3. If still nothing, try file detection if (empty($platform) || empty($modpackId)) { $detected = $this->detectFromFiles($server); $platform = $platform ?: ($detected['platform'] ?? null); $modpackId = $modpackId ?: ($detected['modpack_id'] ?? null); } - // 3. If still nothing, return helpful error + // 4. If still nothing, check cached cron data + if (empty($platform) || empty($modpackId)) { + $cached = DB::table('modpackchecker_servers') + ->where('server_uuid', $server->uuid) + ->first(); + if ($cached && !empty($cached->platform) && !empty($cached->modpack_id)) { + $platform = $cached->platform; + $modpackId = $cached->modpack_id; + } + } + + // 5. If still nothing, return helpful error if (empty($platform) || empty($modpackId)) { return response()->json([ 'success' => false, @@ -109,16 +131,24 @@ class ModpackAPIController extends Controller ]); } - // 4. Check the appropriate API using the unified Service + // 6. Check the appropriate API using the unified Service try { $versionData = $this->apiService->fetchLatestVersion($platform, $modpackId); + // Get cached current_version for comparison + $cached = DB::table('modpackchecker_servers') + ->where('server_uuid', $server->uuid) + ->first(); + $currentVersion = $cached->current_version ?? null; + return response()->json([ 'success' => true, 'platform' => $platform, 'modpack_id' => $modpackId, 'modpack_name' => $versionData['name'], + 'current_version' => $currentVersion, 'latest_version' => $versionData['version'], + 'update_available' => $currentVersion && $currentVersion !== $versionData['version'], 'status' => 'checked', ]); } catch (\Exception $e) {