Commit Graph

270 Commits

Author SHA1 Message Date
Claude (Chronicler #83 - The Compiler)
28608e9fa8 Build pipeline hardening: ErrorBoundary, no PHP copies, TS pre-flight
- ErrorBoundary.tsx wraps widget — crashes show fallback, not blank void
- build.sh v1.1.0: removed ALL PHP file copies (Chronicler deploys manually)
- Added set -e / set -u for fail-fast
- Added TypeScript pre-flight check (yarn tsc --noEmit) before build
- Added dynamic Blueprint controller detection via find
- Widget injection now wrapped in <ModpackErrorBoundary>
- Pre-commit PHP lint hook at scripts/pre-commit-hook.sh

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 00:17:30 -05:00
Claude
7b2f3f810b Bridge: dispatch — ErrorBoundary + build.sh hardening from Gemini consultation
Priority order:
1. ErrorBoundary.tsx wrapping widget injection
2. set -e + tsc --noEmit pre-flight in build.sh
3. Pre-commit PHP lint hook
4. Dev Panel test before live panel
2026-04-13 05:15:26 +00:00
Claude
60ab055754 Bridge: dispatch — build.sh clobbers PHP files, remove PHP copy steps 2026-04-13 05:08:23 +00:00
Claude
8c3a0abe26 Bridge: dispatch — fix */6 docblock in source file PERMANENTLY 2026-04-13 04:53:45 +00:00
Claude (Chronicler #83 - The Compiler)
be6b14bd67 Housekeeping: archive stale manifest.json dispatch from responses
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:50:00 -05:00
Claude (Chronicler #83 - The Compiler)
c0435bc1d0 bridge: Request — consolidated v1.1.0 deploy (all 5 priorities)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:44:48 -05:00
Claude (Chronicler #83 - The Compiler)
dd05a41567 v1.1.0 Priority 3b: zero-click widget with recalibrate + ignore
Widget redesign:
- Zero-click: loads cached status on mount via GET /status (no API calls)
- Shows platform icon + modpack name + version comparison
- Orange background + arrow (current → latest) when update available
- Cyan + checkmark when up to date
- Refresh button triggers manual check
- Calibrate button opens dropdown with last 10 releases
- Ignore button hides non-modpack servers
- Current release highlighted in calibrate dropdown

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:44:21 -05:00
Claude
ec37fc819c Bridge: dispatch — keep going with widget TSX, consolidated deploy at end 2026-04-13 04:43:08 +00:00
Claude (Chronicler #83 - The Compiler)
b84958c0ee v1.1.0 Priorities 2-5: date seeding, new endpoints, BCC detection
Priority 2 — Date-time seeding:
- fetchFileHistory() for CurseForge, Modrinth, FTB
- seedCurrentVersion() matches release closest to server install date
- Falls back to latest if no history or no install date

Priority 3 — New endpoints:
- GET /servers/{server}/status — zero-click cached status
- GET /servers/{server}/releases — recalibrate dropdown (10 releases)
- POST /servers/{server}/calibrate — save user's version selection
- POST /servers/{server}/ignore — toggle is_ignored flag

Priority 5 — BCC log parsing:
- detectFromBccLog() reads logs/latest.log for BetterCompatibilityChecker
- Extracts modpack name + version from BCC output line
- Skips CHANGE_ME values

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:42:34 -05:00
Claude
9991240eab Bridge: dispatch — keep going with Priority 2, consolidated deploy later 2026-04-13 04:40:17 +00:00
Claude (Chronicler #83 - The Compiler)
9415c1b984 v1.1.0 Priority 1+2b: file ID comparison + manifest version extraction
- Migration: adds current_file_id, latest_file_id, is_ignored columns
- ModpackApiService: all 4 platforms now return file_id in response
- CheckModpackUpdates: file ID comparison (preferred) with string fallback
- detectCurseForge: extracts manifest['version'] as installed_version
- Cron skips is_ignored servers
- Detection priority: manifest version > egg var > DB record > seed latest

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:38:41 -05:00
Claude
3906303754 Bridge: dispatch — v1.1.0 full architecture plan from Gemini consultation
7 priorities in order:
1. File ID comparison (foundational)
2. Date-time seeding heuristic
3. Zero-click widget + Recalibrate dropdown
4. is_ignored flag
5. BCC log parsing
Plus: manifest version audit results (5 servers have version data)
2026-04-13 04:35:14 +00:00
Claude
d8f7f76a51 Bridge: dispatch — manifest.json has version field, use as current_version 2026-04-13 04:16:49 +00:00
Claude (Chronicler #83 - The Compiler)
32e2d726bb 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) <noreply@anthropic.com>
2026-04-12 23:09:23 -05:00
Claude
dce0e06023 Bridge: dispatch — manualCheck missing modpack_installations lookup, widget shows NOT CONFIGURED 2026-04-13 04:08:14 +00:00
Claude
c545d2409e docs: Add how-version-detection-works.md for BuiltByBit product page
Explains:
- First-run seeding behavior (why everything shows up_to_date initially)
- Manual current version override
- 3-step detection (no egg changes required)
- CurseForge API key requirement
- Check frequency and badge meanings
2026-04-13 04:06:39 +00:00
Claude (Chronicler #83 - The Compiler)
68ee40e89d Fix: seed current_version from latest on first detection
When a server is first detected, current_version is set to latest_version
(the pack was just installed = it's current). On future runs, if the API
returns a newer latest_version, the stored current_version stays and we
detect the update. Also preserves egg variable and existing DB values.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 23:04:04 -05:00
Claude
8de93f26ce Bridge: dispatch — current_version empty, widget shows NOT CONFIGURED 2026-04-13 04:02:08 +00:00
Claude (Chronicler #83 - The Compiler)
31f245a1b9 Fix: trim CurseForge API key + add debug logging for 403 diagnosis
Key may have whitespace from dbGet. Added Log::debug with key length
and modpack ID to diagnose the 403.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:57:23 -05:00
Claude
28f2c3d904 Bridge: dispatch — CurseForge 403, key valid but ModpackApiService not sending correctly 2026-04-13 03:56:44 +00:00
Claude (Chronicler #83 - The Compiler)
36800ae7a7 Fix: remove orderBy on modpack_installations — table has no id column
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:52:22 -05:00
Claude
5e666e7853 Bridge: dispatch — modpack_installations has no id column, remove orderBy 2026-04-13 03:51:47 +00:00
Claude (Chronicler #83 - The Compiler)
87d834942a Fix: remove finalized filter, use latest installation per server
Most modpack_installations rows have finalized=0 — filter was excluding
nearly everything. Now takes the most recent installation row regardless
of finalized status.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:48:37 -05:00
Claude
6b9cfe6976 Bridge: dispatch — modpack_installations finalized filter too strict + possible type mismatch 2026-04-13 03:48:03 +00:00
Claude (Chronicler #83 - The Compiler)
3b64110f01 Add modpack_installations table as primary detection source
Detection priority now:
1. modpack_installations table (panel's own install data — fastest)
2. Egg variables (MODPACK_PLATFORM/MODPACK_ID)
3. DaemonFileRepository file scan (last resort fallback)

This immediately detects all 19 CurseForge servers on the live panel
without any Wings calls or egg variable configuration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:41:19 -05:00
Claude
8cfbd9d277 Bridge: dispatch — use modpack_installations table, 19 servers confirmed with CurseForge IDs 2026-04-13 03:40:00 +00:00
Claude (Chronicler #83 - The Compiler)
7ef83fd0a0 Add debug logging, alternate paths, and FTB detection to cron
- CurseForge: tries manifest.json + minecraftinstance.json
- Modrinth: modrinth.index.json (unchanged)
- FTB: version.json with parent ID detection
- All catch blocks now log exception messages for debugging
- Wings connection failures logged explicitly

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:39:50 -05:00
Claude
962dc3bd4f Bridge: dispatch — manifest.json not on live servers, use modpack_installations table instead 2026-04-13 03:39:23 +00:00
Claude
bd63c3d3e4 Bridge: dispatch — detection scanning but finding nothing, need verbose logging 2026-04-13 03:37:53 +00:00
Claude (Chronicler #83 - The Compiler)
698273d636 Implement hybrid auto-detection for modpack cron (Magic & Manual)
- CheckModpackUpdates now scans ALL servers, not just egg-configured ones
- Step 1: egg variables (fastest)
- Step 2: DaemonFileRepository file detection (manifest.json, modrinth.index.json)
- Step 3: mark unconfigured if nothing found
- Respects is_user_overridden flag for manual configs
- New migration adds detection_method + is_user_overridden columns
- Per Gemini hybrid detection consultation (2026-04-06)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:35:24 -05:00
Claude
763e7940a6 Bridge: dispatch — auto-detection not implemented, DaemonFileRepository missing 2026-04-13 03:33:47 +00:00
Claude (Chronicler #83 - The Compiler)
0bdd745527 Archive: live panel deploy confirmed — v1.0.0 is live on production
*/6 fix already in repo since 44a3043 — no change needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:27:36 -05:00
Claude
c6afaf08b3 Bridge: dispatch — live panel deployed successfully, fix */6 docblock in repo 2026-04-13 03:26:35 +00:00
Claude (Chronicler #83 - The Compiler)
8d2241e031 Update ACTIVE_CONTEXT — Phase 11 complete, v1.0.0 ready for live deploy
All features verified on Dev Panel including dashboard badges.
Waiting on BuiltByBit listings + live panel green light.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:17:07 -05:00
Claude (Chronicler #83 - The Compiler)
4e5ee7e49d Fix: getStatus returns all servers for root admins
accessibleServers() only returns explicitly assigned servers — admins
don't get them on the client API side. Now checks root_admin and
returns all servers for admin users.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:14:30 -05:00
Claude
93907d4d16 Bridge: dispatch — badge not rendering, accessibleServers() may exclude admin users 2026-04-13 03:13:59 +00:00
Claude (Chronicler #83 - The Compiler)
0311249938 Add Node version detection + yarn build:production to build.sh
- Node <16 fails fast with helpful error
- Node 17+ gets --openssl-legacy-provider for CSS module compat
- yarn build:production runs automatically after all injections
- Graceful fallback if yarn missing or build fails (admin + console still work)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:06:43 -05:00
Claude
1e9c7fbeeb Bridge: dispatch — add Node detection + badge build now, test on live panel 2026-04-13 03:05:26 +00:00
Claude (Chronicler #83 - The Compiler)
00b5eadc7d Archive: Gemini consultation on v1.1.0 badge build plan (Node detection)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 22:02:02 -05:00
Claude
521e379edd Bridge: dispatch — v1.1.0 badge implementation plan from Gemini consult 2026-04-13 03:00:06 +00:00
Claude (Chronicler #83 - The Compiler)
990542abc9 Phase 11D complete, badges deferred to v1.1.0, listings updated
- Moved dashboard badges to "Upcoming v1.1.0" in both BBB listings
- Updated ACTIVE_CONTEXT — all code-side Phase 11 work done
- Waiting on Michael for BBB listings + live panel green light

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:56:43 -05:00
Claude
b297712bb7 Bridge: RES — skip badges for v1.0.0, ship with console widget + admin UI, list in v1.1.0 2026-04-13 02:53:45 +00:00
Claude (Chronicler #83 - The Compiler)
0d6752792a bridge: Request — badge build blocked, need decision (skip or patch webpack)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:51:21 -05:00
Claude
ab0b328bd2 Bridge: RES badge debug — injection correct, yarn build fails with 7 CSS errors 2026-04-13 02:50:11 +00:00
Claude (Chronicler #83 - The Compiler)
bb7728fe0d Fix: add !important to callout backgrounds to override AdminLTE
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:48:47 -05:00
Claude
c80ead379c Bridge: dispatch — need !important on callout backgrounds to override AdminLTE 2026-04-13 02:47:58 +00:00
Claude (Chronicler #83 - The Compiler)
9d1c5d4291 bridge: Request — debug dashboard badge injection on Dev Panel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:47:11 -05:00
Claude
9d40560ccd Bridge: dispatch — dashboard badges not appearing on server cards 2026-04-13 02:46:12 +00:00
Claude (Chronicler #83 - The Compiler)
705960b61f Fix: callout boxes use dark background with accent border + heading
Dark #1a1a2e background, brand color borders and headings only,
light gray body text. Matches Pterodactyl dark theme.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 21:44:34 -05:00
Claude
d793e0d1c8 Bridge: dispatch — callout boxes need dark bg with accent border, not bright fills 2026-04-13 02:43:30 +00:00