Daily edition

Oct 6, 2026

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

Oct 7, 20265 reads · 137 merged PRs screened

runtime

kubernetes/kubernetes · #142221

Files changed →View PR ↗

kubectl: separate `attach` flags from runtime optionsGo · 75 + / 48 −

Introduces 5 new declarations in staging/src/k8s.io/kubectl/pkg/cmd/attach/attach.go.

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

staging/src/k8s.io/kubectl/pkg/cmd/attach/attach.go ↗ · 2 files

@@ -94,20 +113,62 @@ type AttachOptions struct { 	Config        *restclient.Config } -// NewAttachOptions creates the options for attach-func NewAttachOptions(streams genericiooptions.IOStreams) *AttachOptions {-	return &AttachOptions{-		StreamOptions: exec.StreamOptions{-			IOStreams: streams,-		},-		Attach:     &DefaultRemoteAttach{},-		AttachFunc: DefaultAttachFunc,+// ToOptions converts from CLI inputs to runtime inputs.+func (flags *AttachFlags) ToOptions(f cmdutil.Factory, cmd *cobra.Command, args []string) (*AttachOptions, error) {+	namespace, _, err := f.ToRawKubeConfigLoader().Namespace()+	if err != nil {+		return nil, err+	}++	getPodTimeout, err := cmdutil.GetPodRunningTimeoutFlag(cmd)+	if err != nil {+		return nil, err 	}++	config, err := f.ToRESTConfig()+	if err != nil {+		return nil, err+	}++	o := &AttachOptions{+		Namespace:     namespace,+		ContainerName: flags.ContainerName,+		Stdin:         flags.Stdin,+		TTY:           flags.TTY,

runtime

nodejs/node · #66476

Files changed →View PR ↗

test_runner: add mock call assertions to t.assertJavaScript · 106 + / 0 −

Introduces 6 new declarations in lib/internal/test_runner/assert.js.

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

lib/internal/test_runner/assert.js ↗ · 4 files

@@ -28,13 +36,110 @@ const methodsToCopy = [ ]; let assertMap; +function getMockContext(fn) {+  const { MockFunctionContext } = require('internal/test_runner/mock/mock');+  const ctx = fn?.mock;++  if (!(ctx instanceof MockFunctionContext)) {+    throw new ERR_INVALID_ARG_TYPE('fn', 'mock function', fn);+  }++  return ctx;+}++function called(fn, message) {+  const count = getMockContext(fn).callCount();++  if (count === 0) {+    throw new AssertionError({+      __proto__: null,+      message: message ?? 'Expected mock function to have been called',+      actual: count,+      operator: 'called',+      stackStartFn: called,+    });+  }+}++function callCount(fn, times, message) {+  validateInteger(times, 'times', 0);+  const count = getMockContext(fn).callCount();++  if (count !== times) {

framework internals

vercel/next.js · #99736

Files changed →View PR ↗

[ai-upgrade] discover upgrade models and reasoning efforts from agent CLIsTypeScript · 477 + / 220 −

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

@@ -386,177 +325,200 @@ export async function handoffUpgrade(     return 'handed_off'   } -  let stage: 'harness' | 'model' | 'effort' | 'permission' | 'worktree' =-    'harness'-  let harness: UpgradeHarness | undefined-  let model: { id: string; efforts: readonly string[] } | undefined-  let effort: string | undefined-  let autoPermissionArgs: string[] | null = null-  let approvalPermissionArgs: string[] = []-  let permissionArgs: string[] = []-  let useAuto = true-  let useWorktree = true-  let codexModels: ReturnType<typeof getCodexModels> | undefined-  let codexAutoReview: boolean | undefined-  let claudePermissionSupport:-    | ReturnType<typeof getClaudePermissionSupport>-    | undefined--  while (true) {-    if (stage === 'harness') {-      const choice = await chooseHarness(installed, harness?.name)-      if (choice === 'copy') {-        const method = copyUpgradePrompt(resolvePrompt(prompt, null), false)-        onHandoff?.(method, null)-        return 'handed_off'-      }-      if (!choice) {-        break-      }-      harness = choice-      stage = 'model'-    } else if (stage === 'model') {

core implementation

huggingface/transformers · #48984

Files changed →View PR ↗

Allow registering new processing backendsPython · 329 + / 270 −

Introduces 12 new declarations in src/transformers/video_processing_utils.py.

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

src/transformers/video_processing_utils.py ↗ · 12 files

@@ -758,8 +583,173 @@ def fetch_videos(self, video_url_or_urls: str | list[str] | list[list[str]], sam             return load_video(video_url_or_urls, backend=backend, sample_indices_fn=sample_indices_fn)  -BaseVideoProcessor.push_to_hub = copy_func(BaseVideoProcessor.push_to_hub)-if BaseVideoProcessor.push_to_hub.__doc__ is not None:-    BaseVideoProcessor.push_to_hub.__doc__ = BaseVideoProcessor.push_to_hub.__doc__.format(+@requires(backends=("vision", "torchvision"))+class BaseVideoProcessor(VideoProcessorMixin, TorchvisionBackend):+    def convert_to_rgb(+        self,+        video: "torch.Tensor",+    ) -> VideoInput:+        """+        Converts a video to RGB format.++        Args:+            video (`"torch.Tensor"`):+                The video to convert.++        Returns:+            `torch.Tensor`: The converted video.+        """+        video = tvF.grayscale_to_rgb(video)+        return convert_to_rgb(video, input_data_format=ChannelDimension.FIRST)++    def sample_frames(+        self,+        metadata: VideoMetadata,+        num_frames: int | None = None,+        fps: int | float | None = None,+        **kwargs,+    ) -> np.ndarray:+        """

runtime

ggml-org/llama.cpp · #29535

Files changed →View PR ↗

model : add K2 Horizon dense and MoVA supportC++ · 825 + / 30 −

Introduces 5 new declarations in src/models/k2-horizon.cpp.

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

src/models/k2-horizon.cpp ↗ · 27 files

@@ -0,0 +1,362 @@+#include "models.h"++void llama_model_k2_horizon::load_arch_hparams(llama_model_loader & ml) {+    ml.get_key(LLM_KV_ROPE_SCALING_YARN_BETA_FAST, hparams.yarn_beta_fast, false);+    ml.get_key(LLM_KV_ROPE_SCALING_YARN_BETA_SLOW, hparams.yarn_beta_slow, false);+    ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);+    ml.get_key(LLM_KV_ATTENTION_GROUPNORM_GROUPS,  hparams.n_norm_groups, false);+    if (hparams.n_norm_groups == 0) {+        hparams.n_norm_groups = 1;+    }++    if (hparams.n_expert > 0) {+        ml.get_key_or_arr(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp_arr, hparams.n_layer_all);+        ml.get_key(LLM_KV_LEADING_DENSE_BLOCK_COUNT,         hparams.n_layer_dense_lead,   false);+        ml.get_key(LLM_KV_MOE_EVERY_N_LAYERS,                hparams.moe_every_n_layers,   false);+        ml.get_key(LLM_KV_EXPERT_SHARED_COUNT,               hparams.n_expert_shared,      false);+        ml.get_key(LLM_KV_EXPERT_SHARED_FEED_FORWARD_LENGTH, hparams.n_ff_shexp,           false);+        ml.get_key(LLM_KV_EXPERT_WEIGHTS_SCALE,              hparams.expert_weights_scale, false);+        ml.get_key(LLM_KV_EXPERT_WEIGHTS_NORM,               hparams.expert_weights_norm,  false);+        ml.get_key(LLM_KV_EXPERT_GATING_FUNC,                hparams.expert_gating_func,   false);+        if (hparams.expert_gating_func == LLAMA_EXPERT_GATING_FUNC_TYPE_NONE) {+            hparams.expert_gating_func = LLAMA_EXPERT_GATING_FUNC_TYPE_SIGMOID;+        }+    }++    // MoVA+    ml.get_key(LLM_KV_ATTENTION_VALUE_EXPERT_COUNT,      hparams.n_value_expert,      false);+    ml.get_key(LLM_KV_ATTENTION_VALUE_EXPERT_USED_COUNT, hparams.n_value_expert_used, false);+    if (hparams.n_value_expert > 0) {+        GGML_ASSERT(hparams.n_value_expert <= LLAMA_MAX_EXPERTS);+        GGML_ASSERT(hparams.n_value_expert_used > 0);+        GGML_ASSERT(hparams.n_value_expert_used <= hparams.n_value_expert);+    } else {

Read today’s edition →