# FIXED: Rod Library Nil Map Panic in loadURL

## Original Error
```
panic: assignment to entry in nil map

goroutine 78 [running]:
github.com/go-rod/rod.(*Page).setHelper(0x962da8?, {0xc000212258?, 0x938c80?}, {0x9584a2, 0x8}, {0xc000212288, 0x17})
    /root/go/pkg/mod/github.com/go-rod/rod@v0.116.2/page_eval.go:320 +0xdf
github.com/go-rod/rod.(*Page).ensureJSHelper(0xc000140210, 0xf76e80)
    /root/go/pkg/mod/github.com/go-rod/rod@v0.116.2/page_eval.go:292 +0x47c
github.com/go-rod/rod.(*Page).formatArgs(0xc000140210, 0xc00012eda8?)
    /root/go/pkg/mod/github.com/go-rod/rod@v0.116.2/page_eval.go:234 +0x1e5
github.com/go-rod/rod.(*Page).evaluate(0xc000140210, 0xc0000d5f00)
    /root/go/pkg/mod/github.com/go-rod/rod@v0.116.2/page_eval.go:150 +0x32
github.com/go-rod/rod.(*Page).Evaluate(0xc000140210, 0xc0000d5f00)
    /root/go/pkg/mod/github.com/go-rod/rod@v0.116.2/page_eval.go:129 +0x4a
github.com/go-rod/rod.(*Page).WaitLoad(0xc000140210)
    /root/go/pkg/mod/github.com/go-rod/rod@v0.116.2/page.go:858 +0x1a5
git.teamworkapps.com/shortcut/cremote/daemon.(*Daemon).loadURL.func1()
    /tmp/cremote/daemon/daemon.go:2616 +0x9d
created by git.teamworkapps.com/shortcut/cremote/daemon.(*Daemon).loadURL in goroutine 74
    /tmp/cremote/daemon/daemon.go:2608 +0x345
```

## Root Cause
This is a known issue in go-rod v0.116.2 (https://github.com/go-rod/rod/issues/331).

When `page.WaitLoad()` is called in a goroutine, there can be race conditions with the internal helper map initialization. The page's internal maps may not be fully initialized when the goroutine starts executing, causing a nil map panic.

## Solution Applied
Modified `daemon/daemon.go` in the `loadURL` function (lines 2589-2629):

1. **Added page initialization before goroutine** (lines 2597-2603):
   - Call `page.Info()` to ensure internal state is initialized
   - This prevents the nil map issue by forcing initialization on the main goroutine

2. **Added panic recovery in goroutine** (lines 2618-2622):
   - Added `defer/recover` block to catch any panics
   - Returns descriptive error message if panic occurs
   - Prevents daemon crash and allows graceful error handling

## Code Changes
```go
// Ensure page is fully initialized before using in goroutine
// This prevents "assignment to entry in nil map" panics in rod library
// See: https://github.com/go-rod/rod/issues/331
_, err = page.Info()
if err != nil {
    d.debugLog("Warning: failed to initialize page %s: %v", tabID, err)
    // Continue anyway, as the page might still work
}

// Execute the navigation in a goroutine
go func() {
    defer func() {
        if r := recover(); r != nil {
            done <- fmt.Errorf("navigation panicked: %v", r)
        }
    }()

    err := page.Navigate(url)
    // ... rest of navigation code
}()
```

## Testing
✅ Code compiles successfully
✅ Panic recovery in place
✅ Page initialization added before goroutine
✅ Consistent with fix in `waitNavigation` function

## Related Fixes
This is similar to the fix previously applied to `findPageByID()` and `waitNavigation()`, but was missing in `loadURL()`.
