7-day edition

Aug 30, 2026 – Sep 5, 2026

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

Sep 6, 202611 reads · 331 merged PRs screened

framework internals

vercel/next.js · #96968

Files changed →View PR ↗

fix: route info segment overrides not updating in dev overlayTypeScript · 52 + / 26

Introduces 3 new declarations in packages/next/src/next-devtools/dev-overlay/segment-explorer-trie.ts.

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

packages/next/src/next-devtools/dev-overlay/segment-explorer-trie.ts · 2 files

@@ -75,55 +75,81 @@ function createTrie<Value = string>({     }   } -  function insert(value: Value) {-    let currentNode = root-    const segments = getCharacters(value)+  function copyChildren(children: TrieNode<Value>['children']) {+    return Object.assign(Object.create(null), children)+  } +  // Snapshots must be immutable for `useSyncExternalStore` consumers, so+  // updates copy the nodes along the mutated path instead of mutating them+  // in place. Untouched subtrees stay shared.+  function copyPath(segments: string[]): TrieNode<Value>[] {+    const newRoot: TrieNode<Value> = {+      value: root.value,+      children: copyChildren(root.children),+    }++    const path: TrieNode<Value>[] = [newRoot]+    let currentNode = newRoot     for (const segment of segments) {-      if (!currentNode.children[segment]) {-        currentNode.children[segment] = {-          value: undefined,-          // Skip value for intermediate nodes-          children: Object.create(null),-        }+      const existingNode = currentNode.children[segment]+      const copiedNode: TrieNode<Value> = {+        value: existingNode?.value,+        children: existingNode+          ? copyChildren(existingNode.children)

core implementation

huggingface/transformers · #47975

Files changed →View PR ↗

[generate] stop synchronizing the accelerator on every decode stepPython · 185 + / 3

Introduces 13 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 · 5 files

@@ -356,6 +357,127 @@ class GenerateBeamEncoderDecoderOutput(ModelOutput): GenerateOutput = GenerateNonBeamOutput | GenerateBeamOutput  +def _undo_generation_steps(num_steps: int, input_ids: torch.LongTensor, *recorded: "tuple | None") -> tuple:+    """+    Undo the last `num_steps` decoding steps, so that they leave no trace in what `generate` returns.+    Note that the cache entries those steps wrote are dropped by `DeferredStopCheck.finish` instead.+    """+    # `[:-0]` is `[:0]`, which would empty everything rather than leave it alone+    if num_steps == 0:+        return (input_ids, *recorded)+    return (input_ids[..., :-num_steps], *(record[:-num_steps] if record else record for record in recorded))+++class StopCheck:+    """+    Decides when the decoding loop should stop, and hands each new token to a streamer.+    """++    def __init__(self, streamer: "BaseStreamer | None" = None):+        self.streamer = streamer++    def __call__(self, unfinished_sequences: torch.Tensor, tokens: torch.Tensor, length: int) -> bool:+        if self.streamer is not None:+            self.streamer.put(tokens.cpu())+        return bool(unfinished_sequences.max() == 0)++    def finish(self) -> int:+        """Flush whatever is still held back, and report how many decoding steps have to be undone."""+        return 0+++class DeferredStopCheck(StopCheck):

language design

denoland/deno · #36727

Files changed →View PR ↗

fix(npm): correct the pnpm lockfile import against real-world lockfilesRust · 848 + / 20

Introduces 19 new declarations in libs/resolver/pnpm_lockfile_import.rs.

Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.

libs/resolver/pnpm_lockfile_import.rs · 1 files

@@ -756,6 +972,618 @@ snapshots:     assert_eq!(v["npm"]["lodash@4.17.21"]["integrity"], "sha512-AAA");   } +  #[test]+  fn aliased_snapshot_dependency() {+    // `string-width-cjs: string-width@4.2.3` names a package, not a version,+    // so it must not collapse into `string-width-cjs@string-width@4.2.3`.+    let input = r#"+lockfileVersion: '9.0'++importers:+  .:+    dependencies:+      wrap-ansi:+        specifier: ^8.1.0+        version: 8.1.0++packages:+  wrap-ansi@8.1.0:+    resolution: {integrity: sha512-WRAP}+  ansi-styles@6.2.1:+    resolution: {integrity: sha512-ANSI}+  string-width@4.2.3:+    resolution: {integrity: sha512-WIDTH}+  '@scope/pkg@1.0.0':+    resolution: {integrity: sha512-SCOPED}++snapshots:+  wrap-ansi@8.1.0:+    dependencies:+      ansi-styles: 6.2.1+      string-width-cjs: string-width@4.2.3+      scoped-alias: '@scope/pkg@1.0.0'

core implementation

microsoft/vscode · #334534

Files changed →View PR ↗

agentHost: Preserve workspace transition boundariesTypeScript · 657 + / 193

Introduces 8 new declarations in src/vs/platform/agentHost/node/sessionDatabase.ts.

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

src/vs/platform/agentHost/node/sessionDatabase.ts · 27 files

@@ -834,63 +919,56 @@ export class SessionDatabase implements ISessionDatabase { 	}  	remapTurnIds(mapping: ReadonlyMap<string, string>, eventIds?: ReadonlyMap<string, string>): Promise<void> {-		// Mutates `turn_usage`, so it must serialize with every other such-		// mutation — a usage write racing the fork transaction would otherwise-		// land against either the old or the new turn id unpredictably.-		return this._mutateTurnUsage(async db => {-			await this._transactionSequencer.queue(async () => {-				// Defer FK checks to commit time so we can update turns.id and-				// file_edits.turn_id in any order without mid-statement violations.-				// This pragma auto-resets after the transaction ends.-				await dbExec(db, 'PRAGMA defer_foreign_keys = ON');-				await dbExec(db, 'BEGIN TRANSACTION');-				try {-					// Delete turns not present in the mapping (e.g. turns beyond-					// the fork point). File edits cascade-delete via FK.-					const oldIds = [...mapping.keys()];-					if (oldIds.length > 0) {-						const placeholders = oldIds.map(() => '?').join(',');-						await dbRun(db,-							`DELETE FROM turns WHERE id NOT IN (${placeholders})`,-							oldIds,-						);-					}--					// Remap the remaining turn IDs to their new values-					for (const [oldId, newId] of mapping) {-						await dbRun(db, 'UPDATE turns SET id = ? WHERE id = ?', [newId, oldId]);-						await dbRun(db, 'UPDATE file_edits SET turn_id = ? WHERE turn_id = ?', [newId, oldId]);-					}-					for (const [turnId, eventId] of eventIds ?? []) {-						await dbRun(db, 'UPDATE turns SET event_id = ? WHERE id = ?', [eventId, turnId]);-					}

core implementation

microsoft/vscode · #334695

Files changed →View PR ↗

Fix Copilot Sessions Provider to Resolve Changes Summary CorrectlyTypeScript · 27 + / 16

Introduces 1 new declaration in src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsProvider.ts.

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

src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsProvider.ts · 2 files

@@ -1272,22 +1285,18 @@ class AgentSessionAdapter implements ICopilotChatSession { 	}  	private _extractChanges(session: IAgentSession): readonly ISessionFileChange[] {-		if (!session.changes) {-			return [];-		}-		if (Array.isArray(session.changes)) {-			return session.changes as ISessionFileChange[];-		}-		// Summary object — create a synthetic entry for total insertions/deletions-		const summary = session.changes as { readonly files: number; readonly insertions: number; readonly deletions: number };-		if (summary.insertions > 0 || summary.deletions > 0) {-			return [{-				modifiedUri: URI.parse('summary://changes'),-				insertions: summary.insertions,-				deletions: summary.deletions,-			}];+		return session.changes && !isChangesSummary(session.changes) ? session.changes : [];+	}++	private _extractChangesSummary(session: IAgentSession): ISessionChangesSummary | undefined {+		if (!isChangesSummary(session.changes)) {+			return undefined; 		}-		return [];+		return {+			files: session.changes.files,+			additions: session.changes.insertions,+			deletions: session.changes.deletions,+		}; 	}  	private _extractCheckpoints(session: IAgentSession): IChatCheckpoints | undefined {

language design

rust-lang/rust · #160564

Files changed →View PR ↗

volatile: allow accesses to non-AM memory to trapRust · 62 + / 46

Introduces 2 new declarations in compiler/rustc_codegen_llvm/src/intrinsic.rs.

Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.

compiler/rustc_codegen_llvm/src/intrinsic.rs · 7 files

@@ -138,6 +138,42 @@ fn call_simple_intrinsic<'ll, 'tcx>(     )) } +impl<'ll, 'tcx> Builder<'_, 'll, 'tcx> {+    fn black_box(&mut self, result: PlaceRef<'tcx, &'ll Value>, span: Span) {+        let result_val_span = [result.val.llval];+        // We need to "use" the argument in some way LLVM can't introspect, and on+        // targets that support it we can typically leverage inline assembly to do+        // this. LLVM's interpretation of inline assembly is that it's, well, a black+        // box. This isn't the greatest implementation since it probably deoptimizes+        // more than we want, but it's so far good enough.+        //+        // For zero-sized types, the location pointed to by the result may be+        // uninitialized. Do not "use" the result in this case; instead just clobber+        // the memory.+        let (constraint, inputs): (&str, &[_]) = if result.layout.is_zst() {+            ("~{memory}", &[])+        } else {+            ("r,~{memory}", &result_val_span)+        };+        crate::asm::inline_asm_call(+            self,+            "",+            constraint,+            inputs,+            self.type_void(),+            &[],+            true,+            false,+            llvm::AsmDialect::Att,+            &[span],+            false,+            None,

runtime

nodejs/node · #65649

Files changed →View PR ↗

crypto: fix multi-prime RSA JWKsC++ · 102 + / 8

Reworks 99 lines of existing logic in src/crypto/crypto_rsa.cc.

Changes how existing runtime behaves. Tests changed with it, with code of their own.

src/crypto/crypto_rsa.cc · 7 files

@@ -417,19 +448,79 @@ KeyObjectData ImportJWKRsaKey(Environment* env, Local<Object> jwk) {     ByteSource dq = ByteSource::FromEncodedString(env, dq_value.As<String>());     ByteSource qi = ByteSource::FromEncodedString(env, qi_value.As<String>()); -    if (!rsa_view.setPrivateKey(-            d.ToBN(), q.ToBN(), p.ToBN(), dp.ToBN(), dq.ToBN(), qi.ToBN())) {+    ncrypto::Rsa::OtherPrimeInfoPointers other_prime_infos;+    if (!oth_value->IsUndefined()) {+      if (!oth_value->IsArray()) {+        THROW_ERR_CRYPTO_INVALID_JWK(env, "Invalid JWK RSA key");+        return {};+      }++      Local<Array> oth = oth_value.As<Array>();+      const uint32_t length = oth->Length();+      if (length == 0 || length > kMaxRsaOtherPrimeInfos) {+        THROW_ERR_CRYPTO_INVALID_JWK(env, "Invalid JWK RSA key");+        return {};+      }+      other_prime_infos.reserve(length);+      for (uint32_t i = 0; i < length; i++) {+        Local<Value> item_value;+        Local<Value> r_value;+        Local<Value> other_d_value;+        Local<Value> t_value;+        if (!oth->Get(env->context(), i).ToLocal(&item_value) ||+            !item_value->IsObject()) {+          THROW_ERR_CRYPTO_INVALID_JWK(env, "Invalid JWK RSA key");+          return {};+        }++        Local<Object> item = item_value.As<Object>();+        if (!item->Get(env->context(), env->jwk_r_string()).ToLocal(&r_value) ||+            !item->Get(env->context(), env->jwk_d_string())

language design

rust-lang/rust · #162226

Files changed →View PR ↗

Clean up the AST visitorRust · 189 + / 230

Introduces 14 new declarations in compiler/rustc_ast/src/visit.rs.

Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.

compiler/rustc_ast/src/visit.rs · 2 files

@@ -929,98 +916,110 @@ macro_rules! common_visitor_and_walkers {             ) -> V::Result {                 match self {                     ForeignItemKind::Static(item) =>-                        visit_visitable!($($mut)? vis, item),+                        visit_visitable!(vis, item),                     ForeignItemKind::Fn(func) => {-                        let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &$($mut)?*func);+                        let kind = FnKind::Fn(FnCtxt::Foreign, visibility, &$($mut)? *func);                         try_visit!(vis.visit_fn(kind, attrs, span, id))                     }                     ForeignItemKind::TyAlias(alias) =>-                        visit_visitable!($($mut)? vis, alias),+                        visit_visitable!(vis, alias),                     ForeignItemKind::MacCall(mac) =>-                        visit_visitable!($($mut)? vis, mac),+                        visit_visitable!(vis, mac),                 }                 V::Result::output()             }         } -        pub fn walk_fn<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, kind: FnKind<$($lt)? $(${ignore($mut)} '_)?>) -> V::Result {+        pub fn walk_fn<$($lt,)? V: $Visitor$(<$lt>)?>(+            vis: &mut V,+            kind: FnKind<$($lt)? $(${ignore($mut)} '_)?>,+        ) -> V::Result {             match kind {                 FnKind::Fn(                     _ctxt,                     // Visibility is visited as a part of the item.                     _vis,-                    Fn { defaultness, ident, sig, generics, contract, body, define_opaque, eii_impl },+                    Fn {

framework internals

microsoft/vscode · #334322

Files changed →View PR ↗

Add layout density options for modern UI in `Customize Layout` menuTypeScript · 28 + / 2

Introduces 1 new declaration in src/vs/workbench/browser/actions/layoutActions.ts.

Adds new framework internals rather than adjusting what was there. Read the linked PR for the surrounding test context.

src/vs/workbench/browser/actions/layoutActions.ts · 1 files

@@ -1385,18 +1388,28 @@ const QuickInputActions: CustomizeLayoutItem[] = [ 	CreateOptionLayoutItem('workbench.action.alignQuickInputCenter', QuickInputAlignmentContextKey.isEqualTo('center'), localize('center', "Center"), quickInputAlignmentCenterIcon), ]; +const ModernUIEnabledContext = ContextKeyExpr.equals(`config.${LayoutSettings.MODERN_UI}`, true);++const LayoutDensityActions: CustomizeLayoutItem[] = [+	CreateOptionLayoutItem(`workbench.action.setLayoutDensity.${ModernUIDensity.Default}`, ContextKeyExpr.equals(`config.${LayoutSettings.MODERN_UI_DENSITY}`, ModernUIDensity.Default), localize('layoutDensityDefault', "Default"), layoutDensityDefaultIcon),+	CreateOptionLayoutItem(`workbench.action.setLayoutDensity.${ModernUIDensity.Compact}`, ContextKeyExpr.equals(`config.${LayoutSettings.MODERN_UI_DENSITY}`, ModernUIDensity.Compact), localize('layoutDensityCompact', "Compact"), layoutDensityCompactIcon),+];+ const MiscLayoutOptions: CustomizeLayoutItem[] = [ 	CreateOptionLayoutItem('workbench.action.toggleFullScreen', IsMainWindowFullscreenContext, localize('fullscreen', "Full Screen"), fullscreenIcon), 	CreateOptionLayoutItem('workbench.action.toggleZenMode', InEditorZenModeContext, localize('zenMode', "Zen Mode"), zenModeIcon), 	CreateOptionLayoutItem('workbench.action.toggleCenteredLayout', IsMainEditorCenteredLayoutContext, localize('centeredLayout', "Centered Layout"), centerLayoutIcon), ];  const LayoutContextKeySet = new Set<string>();-for (const { active } of [...ToggleVisibilityActions, ...MoveSideBarActions, ...AlignPanelActions, ...QuickInputActions, ...MiscLayoutOptions]) {+for (const { active } of [...ToggleVisibilityActions, ...MoveSideBarActions, ...AlignPanelActions, ...QuickInputActions, ...LayoutDensityActions, ...MiscLayoutOptions]) { 	for (const key of active.keys()) { 		LayoutContextKeySet.add(key); 	} }+for (const key of ModernUIEnabledContext.keys()) {+	LayoutContextKeySet.add(key);+}  /**  * Matches the title bar's `editorActionsEnabled` getter: true when editor

language design

react/react · #37364

Files changed →View PR ↗

[rust-compiler] Propagate block lowering errorsRust · 38 + / 27

Introduces 1 new declaration in compiler/crates/react_compiler_lowering/src/build_hir.rs.

Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.

compiler/crates/react_compiler_lowering/src/build_hir.rs · 2 files

@@ -2589,17 +2588,25 @@ fn lower_block_statement(     block: &react_compiler_ast::statements::BlockStatement,     parent_scope: Option<react_compiler_ast::scope::ScopeId>, ) -> Result<(), CompilerError> {-    let _ = lower_block_statement_inner(builder, block, None, parent_scope);-    Ok(())+    Ok(lower_block_statement_inner(+        builder,+        block,+        None,+        parent_scope,+    )?) }  fn lower_block_statement_with_scope(     builder: &mut HirBuilder,     block: &react_compiler_ast::statements::BlockStatement,     scope_override: react_compiler_ast::scope::ScopeId, ) -> Result<(), CompilerError> {-    let _ = lower_block_statement_inner(builder, block, Some(scope_override), None);-    Ok(())+    Ok(lower_block_statement_inner(+        builder,+        block,+        Some(scope_override),+        None,+    )?) }  fn lower_block_statement_inner(

language design

rust-lang/rust · #162289

Files changed →View PR ↗

alloc: a bunch of safety commentsRust · 93 + / 44

Reworks 14 lines of existing logic in library/alloc/src/raw_vec/mod.rs.

Changes how existing language design behaves. Read the linked PR for the surrounding test context.

library/alloc/src/raw_vec/mod.rs · 4 files

@@ -245,11 +245,17 @@ impl<T, A: Allocator> RawVec<T, A> {         );          let me = ManuallyDrop::new(self);-        // ignore-tidy-undocumented-unsafe-        unsafe {-            let slice = me.ptr().cast::<MaybeUninit<T>>().cast_slice(len);-            Box::from_raw_in(slice, ptr::read(&me.inner.alloc))-        }+        let slice = me.ptr().cast::<MaybeUninit<T>>().cast_slice(len);+        // SAFETY: `slice` is a valid pointer for `len` `T`s, and the+        // above `ManuallyDrop` ensures that the destructor of `me` which+        // would free the allocation is never run. The caller upholds that+        // `len` meets or exceeds the last requested capacity, ensuring that+        // the layout generated when dropping the resulting `Box` fits the+        // allocation the `RawVec` created.+        //+        // Moving the allocator out of `me.inner` is also sound since it is+        // never accessed after this point.+        unsafe { Box::from_raw_in(slice, ptr::read(&me.inner.alloc)) }     }      /// Reconstitutes a `RawVec` from a pointer, capacity, and allocator.

Read today’s edition →