Daily edition

Sep 5, 2026

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

Sep 6, 20264 reads · 64 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

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 {

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 · #162285

Files changed →View PR ↗

box: fixup map/try_map deallocate callsRust · 14 + / 6

Reworks 10 lines of existing logic in library/alloc/src/boxed.rs.

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

library/alloc/src/boxed.rs · 1 files

@@ -731,12 +731,16 @@ impl<T, A: Allocator> Box<T, A> {         let (value, allocation) = Box::take(this);         let (raw, alloc) = Box::into_non_null_with_allocator(allocation);         if size_of::<T>() == size_of::<U>() && align_of::<T>() == align_of::<U>() {-            // ignore-tidy-undocumented-unsafe+            // SAFETY: We checked that the memory requirements are the same for both types+            // and `raw` is already a valid pointer for the requisite memory.             let allocation = unsafe { Box::from_non_null_in(raw.cast::<MaybeUninit<U>>(), alloc) };             Box::write(allocation, f(value))         } else {-            // ignore-tidy-undocumented-unsafe-            unsafe { alloc.deallocate(raw.cast(), Layout::for_value(&value)) }+            if size_of::<T>() != 0 {+                // SAFETY: `raw` isn't dangling since it points to a non-zero-sized+                // allocation and is never used again after this point.+                unsafe { alloc.deallocate(raw.cast(), Layout::for_value(&value)) }+            }             Box::new_in(f(value), alloc)         }     }

Read today’s edition →