Commit Graph

122 Commits

Author SHA1 Message Date
Claude (Chronicler #83 - The Compiler)
98f4f5b82a v1.0.5: Fix console path — was never fetching from Discord
Console /rules hit early return before DIAG logs and before any
Discord fetch. Now fetches async like the player path. DIAG logs
moved before the player/console branch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:14:29 -05:00
Claude (Chronicler #83 - The Compiler)
b4fbfc6adf docs: Update CHANGELOG.md (v1.0.4 entry) + ACTIVE_CONTEXT.md
CHANGELOG now includes diagnostic builds. ACTIVE_CONTEXT reflects
full session state for Chronicler pickup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:10:45 -05:00
Claude (Chronicler #83 - The Compiler)
f23f71ef04 v1.0.4: Diagnostic build — INFO-level logging for config read path
Added [DIAG] logs to RulesCommand (token length, channel, messageId,
isValid) and DiscordFetcher (fetch attempt, raw messageId on failure).
1.20.1 only — for Otherworld debugging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:05:26 -05:00
Claude
36caddc609 Add Code bridge request: rules still returning defaults despite config loading 2026-04-13 23:02:34 +00:00
Claude (Chronicler #83 - The Compiler)
29f0127a60 v1.0.3: Fix config read — wrong event bus + section header comments
1.20.1: ModConfigEvent fires on mod bus, not MinecraftForge.EVENT_BUS.
Moved Loading/Reloading to FMLJavaModLoadingContext.getModEventBus().
Added config file header warning about preserving [section] headers.
Debug logging in RulesCommand prints token length + channel at runtime.
All 6 builds bumped to 1.0.3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:53:28 -05:00
Claude
75c9feecec Add Code bridge request: Arbiter native Discord role management 2026-04-13 22:48:44 +00:00
Claude
4e354c1c70 bridge: ping test 2026-04-13 22:46:11 +00:00
Claude
953e7f27ef Add Code bridge request: rules mod COMMON config not read at runtime 2026-04-13 22:45:29 +00:00
Claude (Chronicler #83 - The Compiler)
fe6445c023 bridge: REQ + RES — config reset fix (v1.0.2, SERVER→COMMON)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:37:36 -05:00
Claude (Chronicler #83 - The Compiler)
e8e1f6106b bridge: Close REQ — discord-rules fork executed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:56:47 -05:00
Claude (Chronicler #83 - The Compiler)
d2e572661d bridge: Close REQ #2 (already resolved) + REQ #3 (blocked on CF rate limit)
REQ #2 migration already committed in 1783055.
REQ #3 deploy ready but blocked until CurseForge rate limit resets 2026-04-14.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 16:47:35 -05:00
Claude
f01b0c3c91 Bridge: MSG — move ModpackChecker card above Address card
Holly feedback: card should be first thing seen when opening server console.
Especially important for pending_calibration servers after restart.
Post-launch: detect restart event and re-prompt version confirmation.
2026-04-13 17:11:42 +00:00
Claude
538523832a Bridge: MSG — calibrate dropdown not rendering in pending_calibration block
Early return exits before showCalibrate + renderCalibrateDropdown() runs.
Fix: include {showCalibrate && renderCalibrateDropdown()} inside the
pending_calibration return block.
2026-04-13 16:49:53 +00:00
Claude
3c68174a98 Bridge: MSG — releases endpoint 429, rate limit too aggressive for calibration UI
2 attempts per 60s blocks Identify Version button after any testing.
Fix: bump to 10 attempts + show error message in widget on 429.
2026-04-13 16:48:10 +00:00
Claude
47d6644f64 Bridge: MSG — Chronicler deployed pending_calibration fix to live panel
Michael on mobile, Chronicler deployed directly via Trinity Core.
No code changes — existing wrapper.tsx + controller already had the fix.
Just needed frontend rebuild. 1939 modules compiled clean.
2026-04-13 12:01:04 +00:00
Claude
75a59fe3c0 Bridge: MSG — pending_calibration shows as checkmark, widget fix needed
API returns configured:true + update_available:false for pending servers.
Widget needs pending_calibration flag in API response + TSX check.
DeceasedCraft showing green checkmark instead of Identify Version button.
2026-04-13 11:55:34 +00:00
Claude (Chronicler #83 - The Compiler)
cef0d8465e Fix: skip stale DB versions for installer-detected servers without file_id
Installer-method servers had full filenames as current_version (e.g.
"DeceasedCraft_Beta_DH_Edition_5.10.16") which prevented reaching
pending_calibration. Now only uses DB current_version if file_id is
also set (validated) or detection method isn't installer.

Migration clears existing stale rows → pending_calibration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 06:33:57 -05:00
Claude
88a3744289 Bridge: MSG — stale installer versions blocking pending_calibration
DB fallback picks up old full filename strings before Truth File check.
installer-method servers never reach pending_calibration.
Fix: skip DB fallback for installer method unless current_file_id is set.
Plus one-time data cleanup needed.
2026-04-13 11:32:33 +00:00
Claude (Chronicler #83 - The Compiler)
27b2744786 Truth File strategy: never seed from latest, calibrate or detect
CheckModpackUpdates:
- Reads .modpack-checker.json Truth File from server filesystem
- Falls back to manifest.json, extracts fileID, writes Truth File
- NEVER seeds current_version from latest API result
- Unknown version → status: pending_calibration (not up_to_date)
- Removed seedCurrentVersion heuristic — replaced with Truth File
- writeTruthFile() helper writes .modpack-checker.json via Wings

ModpackAPIController:
- calibrate() now writes Truth File after DB update
- Persists across server reinstalls and cron runs

wrapper.tsx:
- pending_calibration: shows "Version unknown" + "Identify Version" button
- Ignored servers: muted card with "Resume" button (not hidden)
- Extracted renderCalibrateDropdown() for reuse
- Error state shows message instead of vanishing

Migration:
- Updates existing unknown+detected rows to pending_calibration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 06:09:05 -05:00
Claude
f39b6d6c67 Bridge: MSG — Truth File version detection architecture
Complete spec for Code:
- Stop seeding from latest (CRITICAL)
- Detection chain: DB → Truth File → manifest.json → pending_calibration
- Write Truth File on any successful detection + on calibration
- pending_calibration DB status + widget UI
- Muted card for ignore toggle (not return null)
- Migration for new status enum value
- DaemonFileRepository::putContent() for Truth File writes
Based on 3 rounds of Gemini consultation + live Wings API testing.
2026-04-13 11:00:41 +00:00
Claude (Chronicler #83 - The Compiler)
0caddef86d Fix async error handling + build.sh copy/inject separation
wrapper.tsx:
- Added error state — shows graceful message instead of silent vanish
- useEffect catch sets error string, not null data
- refresh() catch sets error string, not empty catch
- Error UI shows gray card with message in widget slot

build.sh:
- ALWAYS copies TSX files (even on reinstall — fixes stale component bug)
- Separated copy step from injection step
- ErrorBoundary upgrade path: removes bare <ModpackVersionCard />,
  replaces with wrapped version
- Imports added independently (not as one sed block)
- Renumbered sections for clarity

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 01:31:44 -05:00
Claude
b20f342bd3 Bridge: MSG — manual Dev Panel changes not in repo
Documented all manual fixes Chronicler made during Dev Panel validation:
- AfterInformation.tsx ErrorBoundary wrapper added manually
- wrapper.tsx manually copied to ModpackVersionCard.tsx
- Blueprint extension package manually updated with v1.1.0 files
- Routes manually copied to 3 locations
Build.sh update logic and .conf archive rebuild needed.
2026-04-13 06:29:41 +00:00
Claude
9514204bd5 Bridge: MSG — async error handling fix required before live panel deploy
Gemini flagged: ErrorBoundary doesn't catch async failures.
useEffect .catch() silently hides widget, refresh catch{} is empty.
Need error state with graceful message before we push to live panel.
2026-04-13 06:27:23 +00:00
Claude (Chronicler #83 - The Compiler)
7e3ffe2577 Fix: clean version extraction + short display names
ModpackApiService: regex extracts semver from CurseForge displayName
  "All the Mods 9-0.1.0" → version: "0.1.0", display_name: full string

Widget: short name + version helpers
  "All the Mods 9 - ATM9" → "ATM9"
  Display: "ATM9 0.1.0 → 1.0.0 ↑" (update) or "✓ ATM9 — 1.0.0" (current)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 01:09:57 -05:00
Claude
c4cbde3a0e Bridge: MSG — correction to version display, cron stores versions backwards
current_version and latest_version swapped in DB.
Server has 0.1.0 installed, 1.0.0 is latest.
Need fix in CheckModpackUpdates.php assignment logic.
2026-04-13 06:07:35 +00:00
Claude
663b0a2d9c Bridge: MSG — version display format fix
↑ 1.0.0 → All the Mods 9-0.1.0 should read ↑ ATM9 1.0.0 → 0.1.0
Need short name from modpack_name (after ' - ') and
short version from latest_version (after last '-').
2026-04-13 06:04:22 +00:00
Claude (Chronicler #83 - The Compiler)
9e3122c408 bridge: Response — status route exists, needs deploy + protocol reminder
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 00:56:25 -05:00
Claude
04815fe9ef Bridge: REQ — status route mismatch, widget 404s on page load
Widget calls /servers/{uuid}/status but route is /status (no uuid).
useEffect hits 404, widget shows nothing until manual refresh.
Option A preferred: register route with {server} param.
2026-04-13 05:55:06 +00:00
Claude (Chronicler #83 - The Compiler)
03d7f87aff bridge: Response — modpack_installations fixed + gentle protocol note
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 00:46:01 -05:00
Claude
a256aa2090 Bridge: REQ — missing modpack_installations migration file
Table exists on live panel but was never committed to repo.
Blocks fresh installs. Code needs to write the migration.
Schema captured from live panel via Trinity Core.
2026-04-13 05:42:54 +00:00
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 (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