7-day edition

Sep 18, 2026 – Sep 24, 2026

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

Sep 25, 202612 reads · 973 merged PRs screened

core implementation

TheAlgorithms/Python · #12056

Files changed →View PR ↗

Added edmonds_blossom_algorithm.py. For maximum matching in the graph. #12043Python · 267 + / 0 −

Introduces 9 new declarations in graphs/edmonds_blossom_algorithm.py.

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

graphs/edmonds_blossom_algorithm.py ↗ · 3 files

@@ -0,0 +1,267 @@+from collections import deque+++class BlossomAuxData:+    """Class to hold auxiliary data during the blossom algorithm's execution."""++    def __init__(+        self,+        queue: deque,+        parent: list[int],+        base: list[int],+        in_blossom: list[bool],+        match: list[int],+        in_queue: list[bool],+    ) -> None:+        """+        Initializes the BlossomAuxData instance.++        Args:+            queue: A deque for BFS processing.+            parent: List of parent vertices in the augmenting path.+            base: List of base vertices for each vertex.+            in_blossom: Boolean list indicating if a vertex is in a blossom.+            match: List of matched vertices.+            in_queue: Boolean list indicating if a vertex is in the queue.+        """+        self.queue = queue+        self.parent = parent+        self.base = base+        self.in_blossom = in_blossom+        self.match = match+        self.in_queue = in_queue+

systems design

kubernetes/kubernetes · #140058

Files changed →View PR ↗

kubectl explain: add auto completionGo · 265 + / 5 −

Introduces 7 new declarations in staging/src/k8s.io/kubectl/pkg/cmd/explain/completion.go.

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

staging/src/k8s.io/kubectl/pkg/cmd/explain/completion.go ↗ · 4 files

@@ -0,0 +1,252 @@+/*+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 explain++import (+	"slices"+	"strings"++	"github.com/spf13/cobra"++	"k8s.io/apimachinery/pkg/api/meta"+	"k8s.io/apimachinery/pkg/runtime/schema"+	"k8s.io/cli-runtime/pkg/genericclioptions"+	"k8s.io/client-go/openapi3"+	"k8s.io/kube-openapi/pkg/validation/spec"+	"k8s.io/kubectl/pkg/explain"+	"k8s.io/kubectl/pkg/util/completion"+)+

language design

rust-lang/rust · #161386

Files changed →View PR ↗

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>],

framework internals

vercel/next.js · #98997

Files changed →View PR ↗

Add some more verification and safety rules around custom `distDir`TypeScript · 62 + / 0 −

Introduces 3 new declarations in packages/next/src/lib/dist-dir.ts.

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

packages/next/src/lib/dist-dir.ts ↗ · 8 files

@@ -0,0 +1,59 @@+import * as path from 'node:path'++export class InvalidDistDirError extends Error {+  constructor(distDir: string, appDir: string, workspaceRoot: string) {+    super(+      `The configured distDir should be inside of the application directory ` ++        `or the workspace containing it, and must not contain the application ` ++        `directory itself:\n\n` ++        `  distDir:        ${distDir}\n` ++        `  application:    ${appDir}\n` ++        `  workspace root: ${workspaceRoot}\n\n` ++        `Read more: https://nextjs.org/docs/messages/invalid-dist-dir`+    )+    this.name = 'InvalidDistDirError'+  }+}++/** Whether `descendant` is strictly inside `ancestor`. */+// TODO: Account for symlinks when validating containment.+function isStrictlyInside(ancestor: string, descendant: string): boolean {+  const relative = path.relative(path.resolve(ancestor), descendant)+  return (+    relative !== '' &&+    relative !== '..' &&+    !relative.startsWith('..' + path.sep) &&+    !path.isAbsolute(relative)+  )+}++/**+ * Throws unless `distDir` is inside the application or workspace, without+ * containing the application itself.+ */

runtime

nodejs/node · #65787

Files changed →View PR ↗

sqlite: add virtual table support via createModule()C++ · 826 + / 0 −

Introduces 7 new declarations in src/node_sqlite.cc.

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

src/node_sqlite.cc ↗ · 5 files

@@ -1012,6 +1015,483 @@ BaseObjectPtr<DatabaseSyncLimits> DatabaseSyncLimits::Create(   return MakeBaseObject<DatabaseSyncLimits>(env, obj, std::move(database)); } +// ---------------------------------------------------------------------------+// VirtualTableModule+// ---------------------------------------------------------------------------++VirtualTableModule::VirtualTableModule(Environment* env,+                                       BaseObjectWeakPtr<DatabaseSync> db,+                                       Local<Function> rows_fn,+                                       std::string&& schema_sql,+                                       int num_columns,+                                       std::vector<int>&& hidden_col_indices,+                                       bool use_bigint_args,+                                       bool direct_only)+    : env_(env),+      db_(std::move(db)),+      rows_fn_(env->isolate(), rows_fn),+      schema_sql_(std::move(schema_sql)),+      num_columns_(num_columns),+      hidden_col_indices_(std::move(hidden_col_indices)),+      use_bigint_args_(use_bigint_args),+      direct_only_(direct_only),+      module_def_({}) {+  // Initialize the sqlite3_module definition. Each VirtualTableModule instance+  // gets its own copy to avoid thread-safety issues with worker threads.+  module_def_.iVersion = 1;+  module_def_.xCreate = VirtualTableModule::xCreate;+  module_def_.xConnect = VirtualTableModule::xCreate;+  module_def_.xBestIndex = VirtualTableModule::xBestIndex;+  module_def_.xDisconnect = VirtualTableModule::xDisconnect;+  module_def_.xDestroy = VirtualTableModule::xDestroy;+  module_def_.xOpen = VirtualTableModule::xOpen;

framework internals

vercel/next.js · #98426

Files changed →View PR ↗

Fix startTime and shutdown delivery of forwarded Turbopack trace spansRust · 154 + / 33 −

Introduces 5 new declarations in turbopack/crates/turbo-tasks/src/message_queue.rs.

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

turbopack/crates/turbo-tasks/src/message_queue.rs ↗ · 5 files

@@ -59,58 +88,93 @@ impl CompilationEventQueue {                 history.pop_front();             }             history.push_back(message_clone.clone());+            drop(history);++            if deliver {+                // Send to all active receivers of the same message type+                if let Some(mut type_subscribers) = subscribers.get_mut(&EventChannelType::Type(+                    message_clone.type_name().to_owned(),+                )) {+                    let mut removal_indices = Vec::new();+                    for (ix, sender) in type_subscribers.iter().enumerate() {+                        if sender.send(message_clone.clone()).await.is_err() {+                            removal_indices.push(ix);+                        }+                    } -            // Send to all active receivers of the same message type-            if let Some(mut type_subscribers) = subscribers.get_mut(&EventChannelType::Type(-                message_clone.type_name().to_owned(),-            )) {-                let mut removal_indices = Vec::new();-                for (ix, sender) in type_subscribers.iter().enumerate() {-                    if sender.send(message_clone.clone()).await.is_err() {-                        removal_indices.push(ix);+                    for ix in removal_indices.iter().rev() {+                        type_subscribers.remove(*ix);                     }                 } -                for ix in removal_indices.iter().rev() {-                    type_subscribers.remove(*ix);-                }

framework internals

kubernetes/kubernetes · #141580

Files changed →View PR ↗

scheduler: refine SchedulingAlgorithm surface and decouple cache vs snapshot placementGo · 338 + / 192 −

Introduces 16 new declarations in pkg/scheduler/algorithm.go.

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

pkg/scheduler/algorithm.go ↗ · 9 files

@@ -447,126 +557,148 @@ func (a *SchedulingAlgorithm) assume(logger klog.Logger, schedFramework framewor 		// Any potential NodeAllocatableResourceClaimStatuses from a previously failed scheduling attempt is overwritten. 		// This field is not explicitly cleared as the Pod object is reconstructed in handleSchedulingFailure() 		// before re-queueing.-		assumedPodInfo.Pod.Status.NodeAllocatableResourceClaimStatuses = dynamicresources.ExtractPodNodeAllocatableResourceClaimStatus(logger, state, host)+		assumedPodInfo.Pod.Status.NodeAllocatableResourceClaimStatuses =+			dynamicresources.ExtractPodNodeAllocatableResourceClaimStatus(logger, state, host) 	}+	return assumedPodInfo+} -	if state.IsPodGroupSchedulingCycle() {-		err := a.nodeInfoSnapshot.AssumePod(assumedPodInfo.PodInfo)-		if err != nil {-			logger.Error(err, "Scheduler snapshot AssumePod failed")-			return err+// reserve runs Reserve plugins for the assumed pod and converts plugin rejections+// into a single-node FitError.+func (a *SchedulingAlgorithm) reserve(ctx context.Context, state fwk.CycleState,+	schedFramework framework.Framework, assumedPodInfo *framework.QueuedPodInfo,+	origPod *v1.Pod, host string) *fwk.Status {+	if status := schedFramework.RunReservePluginsReserve(ctx, state, assumedPodInfo.Pod, host); !status.IsSuccess() {+		if status.IsRejected() {+			fitErr := &framework.FitError{+				NumAllNodes: 1,+				Pod:         origPod,+				Diagnosis: framework.Diagnosis{+					NodeToStatus: framework.NewDefaultNodeToStatus(),+				},+			}+			fitErr.Diagnosis.NodeToStatus.Set(host, status)+			fitErr.Diagnosis.AddPluginStatus(status)+			return fwk.NewStatus(status.Code()).WithError(fitErr) 		}

core implementation

pandas-dev/pandas · #68000

Files changed →View PR ↗

BUG: named agg result depended on the output name matching the column name (GH#63743)Python · 40 + / 4 −

Introduces 3 new declarations in pandas/core/apply.py.

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

pandas/core/apply.py ↗ · 4 files

@@ -1902,10 +1902,22 @@ def reconstruct_func(     names, and the reconstructed order of columns.     If relabeling is False, the columns and order will be None. +    Named aggregation is the one exception: when ``allow_skip_normalization`` is+    True, every output name equals its source column name, and every aggfunc+    reduces to a scalar, relabeling is reported as False (and columns/order as+    None) even though named aggregation was used, because the caller can consume+    the un-normalized func directly.+     Parameters     ----------     func: agg function (e.g. 'min' or Callable) or list of agg functions         (e.g. ['min', np.max]) or dictionary (e.g. {'A': ['min', np.max]}).+    allow_skip_normalization: bool, default False+        Whether the caller can handle the un-normalized ``{column: aggfunc}`` form+        that named aggregation reduces to when every output name equals its source+        column name and every aggfunc is a scalar reduction. Callers that rely on+        ``columns``/``order`` being returned whenever named aggregation was used+        must leave this False.     **kwargs: dict, kwargs used in is_multi_agg_with_relabel and         normalize_keyword_aggregation function for relabelling 

language design

rust-lang/rust · #160679

Files changed →View PR ↗

Staticlib rename internal symbols: add COFF supportRust · 183 + / 17 −

Introduces 3 new declarations in compiler/rustc_codegen_ssa/src/back/symbol_edit.rs.

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

compiler/rustc_codegen_ssa/src/back/symbol_edit.rs ↗ · 4 files

@@ -441,6 +476,125 @@ fn macho_rebuild_strtab(     Some(result) } +// ---------------------------------------------------------------------------+// COFF: single-pass collection + apply+// ---------------------------------------------------------------------------++fn coff_collect_impl<'data, Coff: CoffHeader>(+    data: &'data [u8],+    header: &'data Coff,+    exported: &FxHashSet<String>,+    out: &mut FxHashSet<String>,+    strip_underscore: bool,+) {+    let Ok(symbols) = header.symbols(data) else { return };+    let strings = symbols.strings();++    for (_index, sym) in symbols.iter() {+        let sclass = sym.storage_class();+        if sclass != pe::IMAGE_SYM_CLASS_EXTERNAL && sclass != pe::IMAGE_SYM_CLASS_WEAK_EXTERNAL {+            continue;+        }+        if sym.section_number() <= 0 {+            continue;+        }+        let Ok(name_bytes) = sym.name(strings) else { continue };+        let Ok(mut name) = str::from_utf8(name_bytes).map(String::from) else { continue };+        if strip_underscore {+            name = name.strip_prefix('_').unwrap_or(&name).to_string();+        }+        if !exported.contains(&name) {+            out.insert(name);+        }

language design

rust-lang/rust · #161275

Files changed →View PR ↗

Refactor `core::cmp::{smallest, largest}` & add `mir-opt` testRust · 40 + / 49 −

Introduces 4 new declarations in library/core/src/cmp.rs.

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

library/core/src/cmp.rs ↗ · 4 files

@@ -2040,36 +2035,34 @@ impl_tuples! { #[expect(private_bounds, reason = "`SmallestArgs` is an internal implementation detail")] #[cfg(not(test))] // FIXME: splat interacts poorly with the double linking of `core` in tests pub const fn smallest<T: [const] Ord + [const] Destruct>(-    #[rustc_splat] args: impl [const] SmallestArgs<Item = T>,+    v1: T,+    #[rustc_splat] args: impl [const] SmallestArgs<T>, ) -> T {-    SmallestArgs::smallest(args)+    SmallestArgs::smallest(v1, args) }  /// Implementation detail for [`smallest`]. #[diagnostic::on_unimplemented(message = "`{Self}` is not a valid set of arguments for `smallest`")] #[unstable(feature = "cmp_splat_internals", issue = "160728")] #[rustc_const_unstable(feature = "cmp_splat_internals", issue = "160728")]-const trait SmallestArgs: HomogeneousTuple {+const trait SmallestArgs<T>: HomogeneousTuple<T> {     /// Reduces all elements of a homogeneous tuple to its smallest value.-    fn smallest(self) -> Self::Item;+    fn smallest(v1: T, args: Self) -> T; }  /// Implements [`SmallestArgs`] for a provided tuple if applicable.-macro impl_smallest_args($($x:ident, $($($y:ident,)+)?)?) {-    $(-        #[unstable(feature = "cmp_splat_internals", issue = "160728")]-        #[rustc_const_unstable(feature = "cmp_splat_internals", issue = "160728")]-        const impl<T> SmallestArgs for (T, $($(${ignore($y)}T,)+)?)-        $(where T: [const] Destruct + [const] Ord, $(${ignore($y)})+)?-        {-            #[inline]-            fn smallest(self) -> Self::Item {-                let ($x, $($($y,)+)?) = self;

framework internals

vercel/next.js · #99001

Files changed →View PR ↗

Enable AI upgrade for canaryTypeScript · 338 + / 244 −

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

@@ -44,121 +44,212 @@ export async function prepareUpgrade(     throw new Error('Could not determine the installed Next.js version.')   } -  // TODO: Handle prereleases-  if (semver.prerelease(installedVersion)) {+  if (semver.prerelease(installedVersion) && !isCanary(installedVersion)) {     throw new Error(       'AI upgrades are not available for prerelease versions of Next.js yet.'     )   } -  if (targetRequest === 'latest' || targetRequest === 'future') {-    const url = `${NPM_REGISTRY}next/latest`-    const { value } = await fetchJSON(url)-    const release = value as { version: string } | null+  const { upgrade } = await getUpgradeAssessment(+    installedVersion,+    targetRequest+  )+  if (upgrade.status === 'blocked' || upgrade.status === 'unknown') {+    throw new Error(upgrade.reason)+  }+  if (upgrade.status !== 'ready' || targetRequest !== 'future') {+    return upgrade+  } -    if (-      !release ||-      !semver.valid(release.version) ||-      semver.prerelease(release.version)-    ) {-      throw new Error('Could not determine the latest stable Next.js version.')+  const config = await loadConfig(PHASE_INFO, directory, {

runtime

ggml-org/llama.cpp · #24669

Files changed →View PR ↗

llama: add llama_batch_extC++ · 692 + / 139 −

Introduces 19 new declarations in src/llama-batch.cpp.

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

src/llama-batch.cpp ↗ · 10 files

@@ -985,3 +1020,305 @@ void llama_batch_free(struct llama_batch batch) {     }     if (batch.logits)   free(batch.logits); }+++// llama_batch_ext++size_t llama_batch_ext_select_n_embd_inp(llama_context_type ctx_type, llm_arch arch, const llama_hparams & hparams) {+    if (ctx_type == LLAMA_CONTEXT_TYPE_MTP) {+        return hparams.n_embd_out();+    }+    if (arch == LLM_ARCH_DFLASH) {+        return hparams.n_embd_inp_enc();+    }+    return hparams.n_embd_inp();+}++llama_batch_ext::llama_batch_ext(llama_context * ctx) :+        n_tokens_max(llama_n_batch(ctx)),+        n_embd_inp(llama_batch_ext_select_n_embd_inp(ctx->get_cparams().ctx_type, llama_get_model(ctx)->arch, llama_get_model(ctx)->hparams)),+        n_embd_inp_enc(llama_get_model(ctx)->hparams.n_embd_inp_enc()),+        n_seq_max(llama_n_seq_max(ctx)),+        mem(llama_get_memory(ctx)),+        n_vocab(llama_vocab_n_tokens(llama_model_get_vocab(llama_get_model(ctx)))),+        n_pos_per_embd(llama_get_model(ctx)->hparams.n_pos_per_embd()) {+    clear();+}++llama_batch_ext::llama_batch_ext(+        size_t n_tokens_max,+        size_t n_embd_inp,+        size_t n_embd_inp_enc,+        llama_seq_id n_seq_max,

Read today’s edition →