Selected changesmerged Sep 24, 2026 – Sep 30, 2026
fix(next/image): Pin DNS resolution when fetching external images TypeScript · 362 + / 55 −
Introduces 13 new declarations in packages/next/src/server/image-optimizer.ts.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
packages/next/src/server/image-optimizer.ts ↗ · 5 files
@@ -518,24 +537,286 @@ function isRedirect(statusCode: number) { return [301, 302, 303, 307, 308].includes(statusCode) } +function upstreamTimedOut(href: string): ImageError {+ Log.error('upstream image response timed out for', href)+ return new ImageError(+ 504,+ '"url" parameter is valid but upstream response timed out'+ )+}++const agentOptions = {+ keepAlive: true,+ timeout: 7_000,+}+type ImageRequestOptions = HttpRequestOptions & { imageLookupKey?: string }+type AgentGetName = (options?: HttpRequestOptions) => string++const getHttpAgentName = (+ HttpAgent.prototype as HttpAgent & { getName: AgentGetName }+).getName+const getHttpsAgentName = (+ HttpsAgent.prototype as HttpsAgent & { getName: AgentGetName }+).getName++class ImageHttpAgent extends HttpAgent {+ getName(options: ImageRequestOptions = {}): string {+ return `${getHttpAgentName.call(this, options)}:${options.imageLookupKey ?? ''}`+ }+}++class ImageHttpsAgent extends HttpsAgent {+ getName(options: ImageRequestOptions = {}): string {
[Executorch] Add MLX recipePython · 46 + / 5 −
Introduces 3 new declarations in src/transformers/exporters/exporter_executorch.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/transformers/exporters/exporter_executorch.py ↗ · 4 files
@@ -258,9 +273,33 @@ def prepare_for_cuda(model: PreTrainedModel, sample_inputs: dict[str, Any]): return model, _make_contiguous(sample_inputs), partitioner +def prepare_for_mlx(model: PreTrainedModel, sample_inputs: dict[str, Any]):+ """Apple Silicon GPU inference via the ExecuTorch MLX backend."""+ for value in sample_inputs.values():+ caches = [value]+ if isinstance(value, EncoderDecoderCache):+ caches = [value.self_attention_cache, value.cross_attention_cache]+ if any(isinstance(cache, StaticCache) for cache in caches):+ raise ValueError(+ "StaticCache is not supported by the ExecuTorch MLX backend. "+ "Use DynamicCache or set cache_implementation='dynamic' in GenerationConfig."+ )++ from executorch.backends.mlx import MLXPartitioner++ model.requires_grad_(False)+ model = model.to(device="cpu")+ # MLX does not support grouped MoE kernels.+ if isinstance(model, PreTrainedModel) and model._can_set_experts_implementation():+ model.set_experts_implementation("batched_mm")+ partitioner = [MLXPartitioner()]+ return model, _make_contiguous(sample_inputs), partitioner++ _BACKEND_PREPARE = { "xnnpack": prepare_for_xnnpack, "cuda": prepare_for_cuda,+ "mlx": prepare_for_mlx, }
Add watch validationGo · 220 + / 2 −
Introduces 15 new declarations in staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/watch.go.
Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.
staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/watch.go ↗ · 6 files
@@ -0,0 +1,203 @@+/*+Copyright The Kubernetes Authors.++Licensed under the Apache License, Version 2.0 (the "License");+you may not use this file except in compliance with the License.+You may obtain a copy of the License at++ http://www.apache.org/licenses/LICENSE-2.0++Unless required by applicable law or agreed to in writing, software+distributed under the License is distributed on an "AS IS" BASIS,+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+See the License for the specific language governing permissions and+limitations under the License.+*/++package correctness++import (+ "fmt"+ "math"+ "reflect"++ "github.com/google/go-cmp/cmp"++ "k8s.io/apimachinery/pkg/api/meta"+ "k8s.io/apimachinery/pkg/runtime"+ "k8s.io/apimachinery/pkg/watch"+ "k8s.io/apiserver/pkg/storage"+)++// WatchValidator checks watch streams against the event history the model+// derived from the recorded operations.
Don't merge distinct impl candidatesRust · 89 + / 30 −
Introduces 5 new declarations in compiler/rustc_next_trait_solver/src/solve/trait_goals.rs.
Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.
compiler/rustc_next_trait_solver/src/solve/trait_goals.rs ↗ · 10 files
@@ -1493,19 +1493,77 @@ where } } + /// Like `try_merge_candidates`, but returns `None` if there are multiple user-written+ /// impls, or a user-written impl and a builtin impl, in which case we bail with ambiguity.+ ///+ /// Candidates with equal responses can still come from conflicting impls, ex - two+ /// overlapping impls which both apply due to impossible where-clauses. We don't want+ /// to merge these. Multiple builtin impls are still merged as usual. This is not+ /// done for marker traits, as their impls are allowed to overlap.+ #[instrument(level = "trace", skip(self), ret)]+ fn try_merge_impl_candidates(+ &mut self,+ trait_def_id: I::TraitId,+ candidates: &[Candidate<I>],+ ) -> Option<CanonicalResponse<I>> {+ let is_marker = self.cx().trait_is_marker(trait_def_id);+ let all_builtin = candidates+ .iter()+ .all(|candidate| matches!(candidate.source, CandidateSource::BuiltinImpl(_)));++ if is_marker || all_builtin {+ self.try_merge_candidates(candidates).map(|(response, _)| response)+ } else if candidates.len() > 1 {+ None+ } else {+ candidates.first().map(|candidate| candidate.result)+ }+ }++ fn merge_candidates_or_bail_with_ambiguity(+ &mut self,+ candidates: &[Candidate<I>],
DRA ResourceSlice + ResourceClaim[Template]: reject qualified names with more than one slashGo · 72 + / 83 −
Introduces 8 new declarations in pkg/apis/resource/validation/validation.go.
Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.
pkg/apis/resource/validation/validation.go ↗ · 5 files
@@ -1074,31 +1069,33 @@ func validateDevice(device resource.Device, oldDevice *resource.Device, fldPath } allErrs = append(allErrs, validateMap(device.Attributes, -1, attributeAndCapacityMaxKeyLength, validateQualifiedName, validateDeviceAttribute, fldPath.Child("attributes"))...)- // If the entire capacity is the same as before then validation can be skipped.- // We could also do the DeepEqual on the entire spec, but here it is a bit cheaper.- if oldDevice == nil || !apiequality.Semantic.DeepEqual(oldDevice.Capacity, device.Capacity) {- if allowMultipleAllocations {- allErrs = append(allErrs, validateMap(device.Capacity, -1, attributeAndCapacityMaxKeyLength, validateQualifiedName, validateMultiAllocatableDeviceCapacity, fldPath.Child("capacity"))...)- } else {- allErrs = append(allErrs, validateMap(device.Capacity, -1, attributeAndCapacityMaxKeyLength, validateQualifiedName, validateSingleAllocatableDeviceCapacity, fldPath.Child("capacity"))...)- }- }- // If the entire set is the same as before then validation can be skipped.- // We could also do the DeepEqual on the entire spec, but here it is a bit cheaper.- if oldDevice == nil || !apiequality.Semantic.DeepEqual(oldDevice.Taints, device.Taints) {- allErrs = append(allErrs, validateSlice(device.Taints, resource.DeviceTaintsMaxLength,- func(taint resource.DeviceTaint, fldPath *field.Path) field.ErrorList {- return validateDeviceTaint(taint, nil, fldPath)- },- fldPath.Child("taints"))...)+ if allowMultipleAllocations {+ allErrs = append(allErrs, validateMap(device.Capacity, -1, attributeAndCapacityMaxKeyLength, validateQualifiedName, validateMultiAllocatableDeviceCapacity, fldPath.Child("capacity"))...)+ } else {+ allErrs = append(allErrs, validateMap(device.Capacity, -1, attributeAndCapacityMaxKeyLength, validateQualifiedName, validateSingleAllocatableDeviceCapacity, fldPath.Child("capacity"))...) }+ allErrs = append(allErrs, validateSlice(device.Taints, resource.DeviceTaintsMaxLength,+ func(taint resource.DeviceTaint, fldPath *field.Path) field.ErrorList {+ return validateDeviceTaint(taint, nil, fldPath)+ },+ fldPath.Child("taints"))...) allErrs = append(allErrs, validateSet(device.ConsumesCounters, resource.ResourceSliceMaxDeviceCounterConsumptionsPerDevice, validateDeviceCounterConsumption,
[ai-upgrade] Ask user whether to start upgrade in worktreeTypeScript · 47 + / 9 −
Introduces 3 new declarations in packages/next/src/lib/upgrade/harness.ts.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
packages/next/src/lib/upgrade/harness.ts ↗ · 5 files
@@ -21,6 +21,27 @@ type UpgradeHarness = { path: string } +type UpgradePrompt = string | ((useWorktree: boolean | null) => string)++function resolvePrompt(+ prompt: UpgradePrompt,+ useWorktree: boolean | null+): string {+ return typeof prompt === 'string' ? prompt : prompt(useWorktree)+}++async function chooseWorktree(): Promise<boolean> {+ Log.bootstrap(' Open the upgrade in a separate Git worktree?')+ const { id } = await cliSelect({+ values: { yes: 'Yes', no: 'No' },+ defaultValue: 0,+ selected: cyan('❯'),+ unselected: ' ',+ indentation: 2,+ })+ return id === 'yes'+}+ function getHarnessDisplayName(name: UpgradeHarness['name']): string { return name === 'codex' ? 'Codex' : 'Claude Code' }
fix: Stop shared ESM watchers when unusedPython · 165 + / 29 −
Introduces 11 new declarations in panel/io/watcher.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
panel/io/watcher.py ↗ · 3 files
@@ -0,0 +1,157 @@+"""+Shared file watching for the autoreload development loop.++Components that render from the same file, e.g. every component compiled+into a shared ESM bundle, would otherwise each start their own watcher+task. This module hands out one watcher per path and notifies all its+subscribers when the file changes.+"""+from __future__ import annotations++import asyncio+import os+import pathlib+import typing as t+import weakref++from .state import state++_watchers: dict[pathlib.Path, PathWatcher] = {}+++class PathWatcher:+ """+ Watches a single path on behalf of any number of subscribers.++ Subscribers are held weakly, so subscribing does not keep a component+ alive; each is notified by calling the method it subscribed with.+ """++ def __init__(self, path: pathlib.Path):+ self.path = path+ self._subscribers: weakref.WeakKeyDictionary[t.Any, set[str]] = weakref.WeakKeyDictionary()+ self._stop_event: asyncio.Event | None = None
Refactor PodGroupProtectionController to use namespacedKey and objectOf functionsGo · 32 + / 31 −
Introduces 4 new declarations in pkg/controller/scheduling/podgroupprotection/podgroup_protection_controller.go.
Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.
pkg/controller/scheduling/podgroupprotection/podgroup_protection_controller.go ↗ · 2 files
@@ -316,27 +314,30 @@ func (c *Controller) enqueuePodGroupForPod(logger klog.Logger, pod *v1.Pod) { return } - pgKey := pod.Namespace + "/" + *pod.Spec.SchedulingGroup.PodGroupName+ pgKey := namespacedKey(pod.Namespace, *pod.Spec.SchedulingGroup.PodGroupName) logger.V(4).Info("Enqueuing PodGroup for pod event", "pod", klog.KObj(pod), "podGroup", pgKey) c.queue.Add(pgKey) } -func getPod(obj interface{}) *v1.Pod {+// objectOf extracts a typed object from an informer event payload or unwraps it+// from a cache.DeletedFinalStateUnknown tombstone.+func objectOf[T any](obj any) T {+ var zero T if obj == nil {- return nil+ return zero+ }+ if t, ok := obj.(T); ok {+ return t+ }+ tombstone, ok := obj.(cache.DeletedFinalStateUnknown)+ if !ok {+ utilruntime.HandleError(fmt.Errorf("expected %T or DeletedFinalStateUnknown, got %T", zero, obj))+ return zero }- pod, ok := obj.(*v1.Pod)+ t, ok := tombstone.Obj.(T) if !ok {- tombstone, ok := obj.(cache.DeletedFinalStateUnknown)- if !ok {- utilruntime.HandleError(fmt.Errorf("couldn't get object from tombstone %#v", obj))- return nil
add `Div` and `Mul` for `Complex<{float}>`Rust · 74 + / 1 −
Introduces 6 new declarations in library/core/src/num/complex.rs.
Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.
library/core/src/num/complex.rs ↗ · 4 files
@@ -91,3 +92,54 @@ impl<T: Sub<Output = T>> Sub<T> for Complex<T> { Complex::new(self.re - rhs, self.im) } }++macro_rules! impl_complex_mul_div {+ ($ty:ty, $mul:ident, $div:ident) => {+ #[unstable(feature = "complex_numbers", issue = "154023")]+ impl Mul for Complex<$ty> {+ type Output = Self;++ #[inline]+ fn mul(self, rhs: Self) -> Self::Output {+ let Complex { re: a, im: b } = self;+ let Complex { re: c, im: d } = rhs;++ let ac = a * c;+ let bd = b * d;+ let ad = a * d;+ let bc = b * c;++ let z = Complex::new(ac - bd, ad + bc);++ // Only call the libcall when both components are NaN.+ //+ // The naive algorithm would return NaN + NaNi for an input like+ // (1 + 0i) * (inf + infi). The libcall instead returns inf + infi.+ //+ // We duplicate the fast path here so that it can be inlined. We use a libcall+ // for the NaN correction to reduce the size of `core`.+ if z.re.is_nan() && z.im.is_nan() {+ crate::hint::cold_path();+ $mul(a, b, c, d)+ } else {
Use focused npm advisories and nudge only for ready upgradesTypeScript · 106 + / 350 −
Introduces 4 new declarations in packages/next/src/lib/upgrade/prepare-upgrade.ts.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
packages/next/src/lib/upgrade/prepare-upgrade.ts ↗ · 6 files
@@ -533,136 +426,55 @@ async function readNpmAdvisories(versions: string[]): Promise<Advisory[]> { throw new Error('Could not check for security updates.') } - const advisories: Advisory[] = data.next.map((finding) => {- if (!finding || typeof finding.vulnerable_versions !== 'string') {+ return data.next.map((finding) => {+ if (+ !finding ||+ typeof finding.vulnerable_versions !== 'string' ||+ !finding.vulnerable_versions.trim()+ ) { throw new Error('Could not check for security updates.') }-- return {- // npm's active advisory feed does not expose withdrawal metadata.- withdrawn_at: null,- vulnerabilities: [- {- package: { ecosystem: 'npm', name: 'next' },- vulnerable_version_range: finding.vulnerable_versions,- },- ],+ const range = finding.vulnerable_versions.replace(/,\s*/g, ' ')+ if (!semver.validRange(range)) {+ throw new Error('Could not check for security updates.') }+ return range })- return advisories-}--function advisoryVersions(value: unknown, checkedVersion: string): string[] {
Drop pyodide-http from converted appsPython · 24 + / 50 −
Introduces 3 new declarations in panel/io/pyodide.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
panel/io/pyodide.py ↗ · 9 files
@@ -101,31 +96,28 @@ def _sampledata_dir(create=None): return '/drive/assets/sampledata' bokeh.util.sampledata.external_data_dir = _sampledata_dir -if pyodide_http is None:- import pandas-- def _read_file(*args, **kwargs):- if args and isurl(args[0]):- args = (pyodide.http.open_url(args[0]),)+args[1:]- elif isurl(kwargs.get('filepath_or_buffer')):- kwargs['filepath_or_buffer'] = pyodide.http.open_url(kwargs['filepath_or_buffer'])- return args, kwargs-- # Patch pandas.read_csv- _read_csv_original = pandas.read_csv- @functools.wraps(pandas.read_csv)- def _read_csv(*args, **kwargs):- args, kwargs = _read_file(*args, **kwargs)- return _read_csv_original(*args, **kwargs)- pandas.read_csv = _read_csv # type: ignore-- # Patch pandas.read_json- _read_json_original = pandas.read_json- @functools.wraps(pandas.read_json)- def _read_json(*args, **kwargs):- args, kwargs = _read_file(*args, **kwargs)- return _read_json_original(*args, **kwargs)- pandas.read_json = _read_json # type: ignore+def _read_file(*args, **kwargs):+ if args and isurl(args[0]):+ args = (pyodide.http.open_url(args[0]),)+args[1:]+ elif isurl(kwargs.get('filepath_or_buffer')):+ kwargs['filepath_or_buffer'] = pyodide.http.open_url(kwargs['filepath_or_buffer'])
model: Add GTE to TransformersPython · 1050 + / 0 −
Introduces 67 new declarations in src/transformers/models/gte/modeling_gte.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/transformers/models/gte/modeling_gte.py ↗ · 13 files
@@ -0,0 +1,660 @@+# 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨+# This file was automatically generated from src/transformers/models/gte/modular_gte.py.+# Do NOT edit this file manually as any edits will be overwritten by the generation of+# the file from the modular. If any change should be done, please apply the change to the+# modular_gte.py file directly. One of our CI enforces this.+# 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨+# Copyright 2026 the HuggingFace Team. All rights reserved.+#+# Licensed under the Apache License, Version 2.0 (the "License");+# you may not use this file except in compliance with the License.+# You may obtain a copy of the License at+#+# http://www.apache.org/licenses/LICENSE-2.0+#+# Unless required by applicable law or agreed to in writing, software+# distributed under the License is distributed on an "AS IS" BASIS,+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+# See the License for the specific language governing permissions and+# limitations under the License.++from collections.abc import Callable++import torch+import torch.nn as nn+from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss++from ...activations import ACT2FN, gelu+from ...integrations import use_kernel_forward_from_hub, use_kernelized_func+from ...masking_utils import create_bidirectional_mask+from ...modeling_layers import GradientCheckpointingLayer+from ...modeling_outputs import (+ BaseModelOutputWithPooling,+ MaskedLMOutput,