After 7 hours of debugging, I finally found the problem: someone, somewhere in the codebase, had overwritten the built-in JavaScript Proxy
object. Naturally, since Chart.js relies on it, it couldn't create objects as intended. This was extremely difficult to debug and required commenting and uncommenting over 12,000 lines of code.