Fixed
{% if/else %}branches miscounting div depth in template extraction —_extract_liveview_root_with_wrapperand the other extraction methods treated both branches of a{% if/else %}block as independent div opens, causing depth to never reach 0 when both branches opened a div sharing a single closing</div>. This caused the entire template to be returned as root, making the view non-reactive. Fixed with a shared_find_closing_div_pos()static method that uses a branch stack to restore depth at{% else %}/{% elif %}tags, so mutually-exclusive branches are counted as one open. (#365)- VDOM extraction used fully-merged
{% extends %}document — For inherited templates,get_template()extracted the VDOM root from the fully-resolved document (base HTML + inlined blocks), which contains surrounding HTML that the depth counter could trip over. Now prefers the child template source when it containsdj-root/dj-view, which holds exactly the block content needed. Also fixes the exception fallback path: the raw child source (containing{% extends %}) was incorrectly stored in_full_template, causingrender_full_templateto attempt rendering a non-standalone template. (#366) TypeError: Illegal invocationin debug panel on Chrome/Edge —_hookExistingWebSocketcalled native WebSocket getter/setter functions viaFunction.prototype.call()from external code, which fails V8's brand check on IDL-generated bindings. Fixed by using normal property access (ws.onmessage) and assignment (ws.onmessage = handler) instead ofdesc.get/set.call(ws). (#367)