Daily edition

Nov 2, 2026

The edition exactly as it was published. Nothing here is re-selected on a later reading.

Nov 3, 20265 reads · 176 merged PRs screened

runtime

nodejs/node · #67055

Files changed →View PR ↗

stream: keep async context of fromWeb writesJavaScript · 86 + / 1 −

Introduces 5 new declarations in lib/internal/webstreams/adapters.js.

Adds new runtime rather than adjusting what was there. Tests changed with it, with code of their own.

lib/internal/webstreams/adapters.js ↗ · 3 files

@@ -224,7 +250,37 @@ function createWriteTracker(getDestination) {   }; } +// A write issued before the destination has started would be queued and+// processed from the start step, in the async context of the code that+// created the WritableStream. Dispatch it from a writer.ready reaction+// instead, as the promise-based adapter did, so the sink runs in the+// context of the Node.js write. The stream may have been closed or+// errored (e.g. by destroy()) by then.+function deferDispatch(writer, tracker, dispatchNow) {+  const dispatch = () => {+    const failure = writableStreamDefaultWriterWriteFailure(writer);+    if (failure !== undefined) {+      tracker.failed = true;+      tracker.failure = failure;+      tracker.settle();+      return;+    }+    dispatchNow();+  };+  PromisePrototypeThen(writer.ready, dispatch, dispatch);+}+ function dispatchWrite(writer, chunk, tracker) {+  tracker.contextFrame = currentContextFrame();+  if (!writableStreamDefaultWriterIsStarted(writer)) {+    deferDispatch(writer, tracker,+                  () => dispatchWriteNow(writer, chunk, tracker));+    return;+  }+  dispatchWriteNow(writer, chunk, tracker);+}+

framework internals

vercel/next.js · #97570

Files changed →View PR ↗

[no-unsafe-inline] Add an experimental flag for React's external browser runtimeJavaScript · 723 + / 6 −

Introduces 8 new declarations in packages/next/src/compiled/react-dom-experimental/unstable_server-external-runtime.js.

Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.

packages/next/src/compiled/react-dom-experimental/unstable_server-external-runtime.js ↗ · 29 files

@@ -0,0 +1,504 @@+(function () {+  function handleExistingNodes(target) {+    target = target.querySelectorAll("template");+    for (var i = 0; i < target.length; i++) handleNode(target[i]);+  }+  function installFizzInstrObserver(target) {+    function handleMutations(mutations) {+      for (var i = 0; i < mutations.length; i++)+        for (+          var addedNodes = mutations[i].addedNodes, j = 0;+          j < addedNodes.length;+          j+++        )+          addedNodes[j].parentNode && handleNode(addedNodes[j]);+    }+    var fizzInstrObserver = new MutationObserver(handleMutations);+    fizzInstrObserver.observe(target, { childList: !0 });+    window.addEventListener("DOMContentLoaded", function () {+      handleMutations(fizzInstrObserver.takeRecords());+      fizzInstrObserver.disconnect();+    });+  }+  function handleNode(node_) {+    if (1 === node_.nodeType && node_.dataset) {+      var dataset = node_.dataset;+      null != dataset.rxi+        ? ($RX(+            dataset.bid,+            dataset.dgst,+            dataset.msg,+            dataset.stck,+            dataset.cstck+          ),

core implementation

pandas-dev/pandas · #71688

Files changed →View PR ↗

ENH: add an HTML repr for Series (GH#5563)Python · 60 + / 2 −

Introduces 5 new declarations in pandas/core/series.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

pandas/core/series.py ↗ · 5 files

@@ -1618,6 +1620,39 @@ def __repr__(self) -> str:         repr_params = fmt.get_series_repr_params()         return self.to_string(**repr_params) +    def _repr_html_(self) -> str | None:+        """+        Return a html representation for a particular Series.++        Mainly for IPython notebook.+        """+        # circular import+        from pandas.io.formats.html import SeriesNotebookFormatter++        if not get_option("display.notebook_repr_html"):+            return None++        formatter = fmt.DataFrameFormatter(+            self.to_frame(),+            header=False,+            index_names=True,+            bold_rows=True,+            escape=True,+            float_format=get_option("display.float_format"),+            max_rows=get_option("display.max_rows"),+            min_rows=get_option("display.min_rows"),+            show_dimensions=False,+        )+        # truncate as the table does, so the footer agrees with it+        footer = fmt.SeriesFormatter(+            self,+            name=True,+            dtype=True,+            length=get_option("display.show_dimensions"),+            max_rows=formatter.max_rows_fitted,

framework internals

holoviz/panel · #9008

Files changed →View PR ↗

fix: Only treat the document lock as held by the context that acquired itPython · 55 + / 3 −

Introduces 4 new declarations in panel/io/server.py.

Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.

panel/io/server.py ↗ · 4 files

@@ -734,6 +736,30 @@ def validate_static_dirs(static_dirs: Mapping[str, str]) -> dict[str, str]:     return static  +def _track_document_lock(func):+    if inspect.iscoroutinefunction(func):+        @wraps(func)+        async def wrapper(self, *args, **kwargs):+            with state._own_document_lock(self):+                return await func(self, *args, **kwargs)+    else:+        @wraps(func)+        def wrapper(self, *args, **kwargs):+            with state._own_document_lock(self):+                return func(self, *args, **kwargs)+    return wrapper++# Record which context holds the document lock so state._unblocked can+# tell the holder apart from other threads while the lock is taken.+ServerSession.with_document_locked = _needs_document_lock(  # type: ignore[method-assign]+    _track_document_lock(ServerSession.with_document_locked.__wrapped__)  # type: ignore[attr-defined]+)+for _method in ('_handle_push', '_handle_patch'):+    setattr(ServerSession, _method, _needs_document_lock_on_loop(+        _track_document_lock(getattr(ServerSession, _method).__wrapped__)+    ))++ # Patch Server to attach task factory to asyncio loop and handle Admin server context class Server(BokehServer): 

core implementation

huggingface/transformers · #49382

Files changed →View PR ↗

Audio from video in jinja Python · 843 + / 225 −

Introduces 34 new declarations in src/transformers/processing_utils.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

src/transformers/processing_utils.py ↗ · 17 files

@@ -2386,6 +2426,279 @@ def _check_special_mm_tokens(self, text: list[str], text_inputs: "BatchFeature",                     )  +class OmniModalProcessorMixin(ProcessorMixin):+    """+    This is a mixin used to provide additional functionality for omni-modal processor classes,+    including an API to load video and the corresponding audio track. New functions shared by omni+    models should be added here rather than in `ProcessorMixin` to keep simple processors apart from+    more involved models.+    Omni modal models are recommended to use this mixin from now on to get more functionality supported+    for cross-modal interactions.+    """++    @auto_docstring+    def __call__(+        self,+        images: ImageInput | None = None,+        text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None,+        videos: VideoInput | None = None,+        audio: AudioInput | None = None,+        audio_from_video_indices: list[int] | None = None,+        **kwargs: Unpack[ProcessingKwargs],+    ):+        r"""+        audio_from_video_indices (`list[int]`, *optional*):+            A list that describes the source of each audio slot where+                - `None` -> standalone audio associated with no video track+                - `i`    -> audio extracted from videos[i]+        """+        images, text, videos, audio = self.prepare_inputs_layout(+            images=images, text=text, videos=videos, audio=audio, **kwargs+        )+        self.validate_inputs(images=images, text=text, videos=videos, audio=audio, **kwargs)

Read today’s edition →