Daily edition

Nov 4, 2026

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

Nov 5, 20265 reads · 135 merged PRs screened

systems design

kubernetes/kubernetes · #143408

Files changed →View PR ↗

client-go/rest/watch: add concurrent watch event decoderGo · 225 + / 1 −

Introduces 14 new declarations in staging/src/k8s.io/client-go/rest/watch/concurrent_decoder.go.

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

staging/src/k8s.io/client-go/rest/watch/concurrent_decoder.go ↗ · 6 files

@@ -0,0 +1,208 @@+/*+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 watch++import (+	"fmt"+	"io"+	"sync"++	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"+	"k8s.io/apimachinery/pkg/runtime"+	"k8s.io/apimachinery/pkg/runtime/serializer/streaming"+	utilruntime "k8s.io/apimachinery/pkg/util/runtime"+	"k8s.io/apimachinery/pkg/watch"+)++type rawWatchEventResult struct {+	event *metav1.WatchEvent+	err   error

framework internals

vercel/next.js · #98271

Files changed →View PR ↗

feat(next/image): add internal image redirects (to match existing external image redirects)TypeScript · 131 + / 72 −

Introduces 3 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 ↗ · 10 files

@@ -100,6 +100,77 @@ export interface ImageParamsResult {   minimumCacheTTL: number } +type ImageUrlParamResult =+  | { href: string; isAbsolute: boolean }+  | { errorMessage: string }++function validateUrlParam(+  url: string | string[] | undefined,+  imageData: ImageConfigComplete,+  isRedirect = false+): ImageUrlParamResult {+  // Note - We intentionally skip validation for local/remotePatterns when+  // validating redirect locations so that we don't break a src img redirect+  // to a new domain (e.g. github.com => githubusercontent.com).+  const { domains = [], remotePatterns = [], localPatterns } = imageData++  if (!isRedirect && domains.length > 0) {+    Log.warnOnce(+      'The "images.domains" configuration is deprecated. Please use "images.remotePatterns" configuration instead.'+    )+  }++  if (!url) {+    return { errorMessage: '"url" parameter is required' }+  } else if (Array.isArray(url)) {+    return { errorMessage: '"url" parameter cannot be an array' }+  }++  if (url.length > 3072) {+    return { errorMessage: '"url" parameter is too long' }+  }+

core implementation

NVIDIA-NeMo/Speech · #16509

Files changed →View PR ↗

salm_automodel_ctc_10ms: calibrated 40 ms to 10 ms CTC timestampsPython · 961 + / 108 −

Introduces 23 new declarations in nemo/collections/speechlm2/parts/ctc_timestamp_utils.py.

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

nemo/collections/speechlm2/parts/ctc_timestamp_utils.py ↗ · 14 files

@@ -2207,14 +2681,229 @@ def _align_banded_ctc(aligner, prepared):             diarization_frame_seconds=prepared['diarization_frame_seconds'],             diarization_max_speaker_count=prepared['diarization_max_speaker_count'],         )+        calibration = prepared['config'].get('boundary_interpolation')+        if calibration is not None:+            # Use raw DP edges, before any VAD snapping or extending.+            _interpolate_word_boundaries(+                rows,+                ctc,+                record['ctc_step'],+                record['time_offset'],+                record['audio_duration'],+                diarization,+                mapping,+                calibration,+                aligner=aligner,+            )+            result['speaker_word_timestamps'] = aligner._public_word_timestamps(rows)+            result['boundary_interpolation'] = {+                'method': 'calibrated_edge_local_linear_interpolation',+                'estimated_grid_seconds': aligner.boundary_grid_seconds,+                'outside_words': sum(w.get('_outside_diarization', False) for w in rows),+            }         result['speaker_assignment_mode'] = 'token_distribution'         result['alignment_diagnostics']['failed_streams'] = failures         result['alignment_diagnostics']['one_pass'] = True         result['alignment_diagnostics']['banded'] = diagnostics-        results.append(_refine_word_timestamps(result, prepared['config']['max_word_frames']))+        results.append(+            _refine_word_timestamps(+                result,+                prepared['config']['max_word_frames'],+                onset_snap_seconds=aligner.onset_snap_seconds,

core implementation

huggingface/transformers · #49753

Files changed →View PR ↗

Keep image inputs on the first chunk of a chunked prefillPython · 133 + / 13 −

Introduces 4 new declarations in src/transformers/generation/utils.py.

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

src/transformers/generation/utils.py ↗ · 10 files

@@ -4322,15 +4333,47 @@ def _prefill(              attention_mask = model_kwargs.pop("attention_mask", None)             position_ids = model_kwargs.pop("position_ids", None)+            token_types = {+                key: model_kwargs.pop(key)+                for key in ("token_type_ids", "mm_token_type_ids", "moe_mm_token_type_ids")+                if model_kwargs.get(key) is not None+            }+            mm_encoder_outputs = model_kwargs.pop("mm_encoder_outputs", None)++            # Pre-encoded features are consumed in placeholder order over (batch, seq): feature row `i` of a modality+            # fills its `i`-th placeholder token, so each chunk gets the rows of the placeholders it contains+            chunk_mm_encoder_outputs = [{} for _ in input_chunks]+            if is_first_iteration and mm_encoder_outputs:+                for modality, output in mm_encoder_outputs.items():+                    if output is None:+                        continue+                    mask = prefill_ids == getattr(self.config, f"{modality}_token_id")+                    feature_rows = mask.flatten().cumsum(0).view_as(mask) - 1+                    for chunk_idx, (chunk_mask, chunk_rows) in enumerate(+                        zip(mask.split(chunk_size, dim=-1), feature_rows.split(chunk_size, dim=-1))+                    ):+                        if chunk_mask.any():+                            chunk_mm_encoder_outputs[chunk_idx][modality] = _slice_mm_encoder_output(+                                output, chunk_rows[chunk_mask]+                            )+             past_length = cache.get_seq_length()-            for input_chunk in input_chunks:+            for chunk_idx, input_chunk in enumerate(input_chunks):                 current_length = past_length + input_chunk.shape[-1]                 if attention_mask is not None:                     model_kwargs["attention_mask"] = attention_mask[:, :current_length]

runtime

nodejs/node · #67083

Files changed →View PR ↗

v8: support X509Certificate serializationC++ · 169 + / 1 −

Introduces 3 new declarations in src/crypto/crypto_x509.cc.

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

src/crypto/crypto_x509.cc ↗ · 9 files

@@ -1065,6 +1082,76 @@ void X509Certificate::NewFromHandle(const FunctionCallbackInfo<Value>& args) {                       issuer); } +void X509Certificate::ParseSnapshot(const FunctionCallbackInfo<Value>& args) {+  Environment* env = Environment::GetCurrent(args);+  Local<Context> context = env->context();+  if (args.Length() != 1 || !args[0]->IsArray()) {+    THROW_ERR_INVALID_ARG_TYPE(env,+                               "The \"snapshot\" argument must be an Array");+    return;+  }++  Local<Array> input = args[0].As<Array>();+  std::vector<X509CertificateSnapshot::DER> certificates;+  certificates.reserve(input->Length());+  for (uint32_t i = 0; i < input->Length(); i++) {+    Local<Value> value;+    if (!input->Get(context, i).ToLocal(&value)) return;+    if (!value->IsArrayBufferView()) {+      THROW_ERR_INVALID_ARG_TYPE(+          env, "The \"snapshot\" entries must be ArrayBufferViews");+      return;+    }++    ArrayBufferViewContents<unsigned char> contents(+        value.As<ArrayBufferView>());+    certificates.emplace_back(contents.data(),+                              contents.data() + contents.length());+  }++  auto snapshot = X509CertificateSnapshot::Create(std::move(certificates));+  if (!snapshot) [[unlikely]] {+    THROW_ERR_CRYPTO_OPERATION_FAILED(

Read today’s edition →