Can't figure out/resolve what is timing out during WGLMakie button press

I have some code where I pull some data from a mysql database, do some minimal processing on it, and plot it in two different figures. I would include a “minimum code to recreate the issue” but the problem is that I cannot recreate this, even with the button press. Can someone help me take a look at the following code to see what’s going on?

so when the app initializes, it does this (removed some unnecessary stuff), which plots successfully without a hitch:

    # Initialize UI elements
    ts = TextField("2025-05-05 21:00:00")
    te = TextField("2025-05-05 23:00:00")
    load_button = Button("Load from db")
    @info "UI elements initialized"

    # Initial data load
    @info "Grabbing data from $(ts.value.val) to $(te.value.val)"
    df = process_data(get_data(ts.value.val, te.value.val))
    apply_calibration!(df, bunch of parameters)
    obs_t = Observable(df.times)
    obs_x = Observable(df.X_cal)
    obs_y = Observable(df.Y_cal)
    obs_z = Observable(df.Z_cal)
    obs_mag = Observable(df.mag)

    # Initialize plots
    bf = Figure(size = (1650,300))
    ax = Axis(bf[1,1])
    lines!(ax, obs_t, obs_x, label = "x", color = :red)
    lines!(ax, obs_t, obs_y, label = "y", color = :green)
    lines!(ax, obs_t, obs_z, label = "z", color = :blue)
    lines!(ax, obs_t, obs_mag, label = "mag", color = :black)
    DataInspector(bf)

    tf = Figure(size=(1650,900))
    axs = [Axis(tf[i, 1]) for i in 1:3]
    lines!(axs[1], obs_t, obs_x, color = :red)
    lines!(axs[2], obs_t, obs_y, color = :green)
    lines!(axs[3], obs_t, obs_z, color = :blue)
    DataInspector(tf)
    @info "Plots initialized"

However, I have a “load button” which queries the database, reprocesses the data, and replots like so:

    on(load_button) do _
        @. empty!(ax)
        @. empty!(axs)
        @info "Grabbing data from $(ts.value.val) to $(te.value.val)"
        df = process_data(get_data(ts.value.val, te.value.val))
        apply_calibration!(df, bunch of parameters)
        obs_t[], obs_x[], obs_y[], obs_z[], obs_mag[] = df.times, df.X_cal, df.Y_cal, df.Z_cal, df.mag
        lines!(ax, obs_t, obs_x, label = "x", color = :red)
        lines!(ax, obs_t, obs_y, label = "y", color = :green)
        lines!(ax, obs_t, obs_z, label = "z", color = :blue)
        lines!(ax, obs_t, obs_mag, label = "mag", color = :black)
        lines!(axs[1], obs_t, obs_x, color = :red)
        lines!(axs[2], obs_t, obs_y, color = :green)
        lines!(axs[3], obs_t, obs_z, color = :blue)
    end

This fails every single time, immediately after the first plot of the first figure shows up with a timed out error and a long stacktrace.

┌ Warning: error while processing received msg
│   exception =
│    Timed out
Stacktrace:
│      [1] error(s::String)
│        @ Base ./error.jl:35
│      [2] evaljs_value(session::Session{Bonito.SubConnection}, js::Bonito.JSCode; error_on_closed::Bool, timeout::Int64)
│        @ Bonito ~/.julia/packages/Bonito/IpsXl/src/session.jl:349
│      [3] evaljs_value
│        @ ~/.julia/packages/Bonito/IpsXl/src/session.jl:305 [inlined]
│      [4] insert_plot!(session::Session{WebSocketConnection}, scene::Scene, plot::Plot)
│        @ WGLMakie ~/.julia/packages/WGLMakie/6NlUE/src/display.jl:362
│      [5] insert!(screen::WGLMakie.Screen, scene::Scene, plot::Plot)
│        @ WGLMakie ~/.julia/packages/WGLMakie/6NlUE/src/display.jl:0
│      [6] #invokelatest#2
│        @ ./essentials.jl:1055 [inlined]
│      [7] invokelatest
│        @ ./essentials.jl:1052 [inlined]
│      [8] push!(scene::Scene, plot::Plot)
│        @ Makie ~/.julia/packages/Makie/KcEWO/src/scenes.jl:495
│      [9] plot!
│        @ ~/.julia/packages/Makie/KcEWO/src/interfaces.jl:449 [inlined]
│     [10] plot!(ax::Axis, plot::Lines{Tuple{Vector{Point{2, Float64}}}})
│        @ Makie ~/.julia/packages/Makie/KcEWO/src/figureplotting.jl:412
│     [11] _create_plot!(::Function, ::Dict{Symbol, Any}, ::Axis, ::Observable{Vector{Time}}, ::Vararg{Any})
│        @ Makie ~/.julia/packages/Makie/KcEWO/src/figureplotting.jl:381
│     [12] #lines!#49
│        @ ~/.julia/packages/MakieCore/G1QFL/src/recipes.jl:514 [inlined]
│     [13] lines!
│        @ ~/.julia/packages/MakieCore/G1QFL/src/recipes.jl:512 [inlined]
│     [14] (::var"#11#18"{Vector{Axis}, Axis, Observable{Vector{Float64}}, Observable{Vector{Float64}}, Observable{Vector{Float64}}, Observable{Vector{Float64}}, Observable{Vector{Time}}, TextField, TextField})(::Bool)
│        @ Main ~/ethan-git/em3-st5-plotter/src/web.jl:63
│     [15] #invokelatest#2
│        @ ./essentials.jl:1055 [inlined]
│     [16] invokelatest
│        @ ./essentials.jl:1052 [inlined]
│     [17] update_nocycle!(obs::Observable{Bool}, value::Any)
│        @ Bonito ~/.julia/packages/Bonito/IpsXl/src/rendering/observables.jl:47
│     [18] #invokelatest#2
│        @ ./essentials.jl:1055 [inlined]
│     [19] invokelatest
│        @ ./essentials.jl:1052 [inlined]
│     [20] process_message(session::Session{WebSocketConnection}, bytes::Vector{UInt8})
│        @ Bonito ~/.julia/packages/Bonito/IpsXl/src/serialization/protocol.jl:36
│     [21] (::Bonito.var"#1#2"{Session{WebSocketConnection}, Channel{Vector{UInt8}}})()
│        @ Bonito ~/.julia/packages/Bonito/IpsXl/src/types.jl:259
└ @ Bonito ~/.julia/packages/Bonito/IpsXl/src/types.jl:261

I cannot figure out why it is timing out. I’ve tried removing all of the data loading, and just updating the plots with the exact same data, but then it hangs and times out as well. I’ve tried playing with the button priority. I’ve run this directly in my repl and it works completely fine. It just doesn’t work inside of a button… Any ideas of how to troubleshoot this would be super appreciated!