7-day edition

Aug 26, 2026 – Sep 1, 2026

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

Sep 2, 20268 reads · 379 merged PRs screened

language design

denoland/deno · #36644

Files changed →View PR ↗

fix(ext/node): allow repeated child process signalsTypeScript · 68 + / 27

Introduces 3 new declarations in ext/node/polyfills/internal/child_process.ts.

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

ext/node/polyfills/internal/child_process.ts · 2 files

@@ -873,20 +890,19 @@ class ChildProcess extends EventEmitter {       }     } -    /* Cancel any pending IPC I/O */-    if (this[kCanDisconnect]) {-      this.disconnect?.();+    if (isWindows) {+      // See the `#windowsSignalFallback` use in the status handler above.+      this.#windowsSignalFallback = signalName;+    }+    if (signalName === "SIGKILL") {+      this[kSigkillIssued] = true;     }-     this.killed = true;-    this.signalCode = signalName;     return true;   }    [SymbolDispose]() {-    if (!this.killed) {-      this.kill();-    }+    this.kill();   }    ref() {

core implementation

huggingface/transformers · #48446

Files changed →View PR ↗

[Fix] Sparse TikToken tokenizers silently failPython · 113 + / 70

Introduces 4 new declarations in src/transformers/tokenization_utils_tokenizers.py.

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

src/transformers/tokenization_utils_tokenizers.py · 3 files

@@ -325,6 +269,102 @@ def _iter_special_tokens(values: Iterable[Any]) -> list[str]:             local_kwargs["merges"] = merges         return local_kwargs +    @classmethod+    def _convert_from_tiktoken(cls, vocab_file: str, local_kwargs: dict[str, Any]) -> dict[str, Any]:+        """Path to a vocab file and a list of extra special tokens."""+        from .convert_slow_tokenizer import TikTokenConverter++        # `added_tokens_decoder` is a (token_id -> token) dict of tokens that may not be contiguous+        added_tokens_decoder: dict[int, str] = {+            int(token_id): token["content"] if isinstance(token, dict) else str(token)+            for token_id, token in (local_kwargs.get("added_tokens_decoder") or {}).items()+        }+        # `extra_special_tokens` is a list of tokens to append to the base vocabulary+        extra_special_tokens: list[str] = local_kwargs.get("extra_special_tokens") or []+        if isinstance(extra_special_tokens, dict):+            extra_special_tokens = list(extra_special_tokens.keys())++        # Retrieve the vocab size from the vocab file+        base_vocab_size = len(TikTokenConverter.load_tiktoken_bpe(vocab_file))++        # If any of the tokens in `added_tokens_decoder` are not in the base vocabulary, they need to be added. To do so+        # we bake them in the `extra_special_tokens` list, with placeholder if `added_tokens_decoder` is not contiguous+        max_added_token_id = max(added_tokens_decoder.keys()) if added_tokens_decoder else 0+        if max_added_token_id >= base_vocab_size:+            new_extras = [+                added_tokens_decoder.get(index, f"<|reserved_token_{index}|>")+                for index in range(base_vocab_size, max_added_token_id + 1)+            ]+            set_new_extras = set(new_extras)+            for special_token in extra_special_tokens:+                if special_token not in set_new_extras:+                    new_extras.append(special_token)

framework internals

vercel/next.js · #97761

Files changed →View PR ↗

turbo-tasks-malloc: report memory from mimallocRust · 313 + / 117

Introduces 13 new declarations in turbopack/crates/turbo-tasks-malloc/src/counter.rs.

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

turbopack/crates/turbo-tasks-malloc/src/counter.rs · 4 files

@@ -166,42 +212,115 @@ mod tests {     use super::*;      #[test]-    fn counting() {-        let mut expected = get();-        add(100);-        // Initial change should fill up the buffer-        expected += TARGET_BUFFER + 100;-        assert_eq!(get(), expected);+    fn counts_allocations_and_deallocations() {+        let start = allocation_counters();+         add(100);-        // Further changes should use the buffer-        assert_eq!(get(), expected);-        add(MAX_BUFFER);-        // Large changes should require more buffer space-        expected += 100 + MAX_BUFFER;-        assert_eq!(get(), expected);+        add(250);         remove(100);-        // Small changes should use the buffer-        // buffer size is now TARGET_BUFFER + 100-        assert_eq!(get(), expected);-        remove(MAX_BUFFER);-        // The buffer should not grow over MAX_BUFFER-        // buffer size would be TARGET_BUFFER + 100 + MAX_BUFFER-        // but it will be reduce to TARGET_BUFFER-        // this means the global counter should reduce by 100 + MAX_BUFFER-        expected -= MAX_BUFFER + 100;-        assert_eq!(get(), expected);--        update(100, 200);

language design

denoland/deno · #36722

Files changed →View PR ↗

fix(cli): don't duplicate passthrough args for deno deploy/sandboxRust · 79 + / 5

Introduces 4 new declarations in libs/cli_parser/src/tests_full.rs.

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

libs/cli_parser/src/tests_full.rs · 2 files

@@ -9767,6 +9767,79 @@ fn use_env_proxy_flags() {   assert!(r.is_err()); } +#[test]+fn deploy_subcommand() {+  let r = flags_from_vec(svec!["deno", "deploy"]);+  assert_eq!(+    r.unwrap(),+    Flags {+      subcommand: DenoSubcommand::Deploy(DeployFlags { sandbox: false }),+      ..Flags::default()+    }+  );++  // `deploy` is a passthrough subcommand: every arg after it is forwarded+  // verbatim, exactly once. Regression test for a duplication bug where the+  // args were written to `argv` both by `deploy_parse` and by the generic+  // trailing-arg handling, turning `--prod` into `--prod --prod`.+  let r = flags_from_vec(svec!["deno", "deploy", "--prod"]);+  assert_eq!(+    r.unwrap(),+    Flags {+      subcommand: DenoSubcommand::Deploy(DeployFlags { sandbox: false }),+      argv: svec!["--prod"],+      ..Flags::default()+    }+  );++  let r =+    flags_from_vec(svec!["deno", "deploy", "--project=myapp", "--prod", "-y"]);+  assert_eq!(+    r.unwrap(),+    Flags {

core implementation

microsoft/vscode · #331727

Files changed →View PR ↗

Update Fig spec for Azure Developer CLI (azd)TypeScript · 507 + / 218

Reworks 725 lines of existing logic in extensions/terminal-suggest/src/completions/azd.ts.

Changes how existing core implementation behaves. Read the linked PR for the surrounding test context.

extensions/terminal-suggest/src/completions/azd.ts · 1 files

@@ -1477,13 +1453,116 @@ const completionSpec: Fig.Spec = { 								}, 							], 						},+						{+							name: ['pack'],+							description: 'Build a ready-to-sideload Teams app package for an activity agent.',+							options: [+								{+									name: ['--app-version'],+									description: 'Version stamped into the Teams app manifest',+									args: [+										{+											name: 'app-version',+										},+									],+								},+								{+									name: ['--display-name'],+									description: 'Display name for the Teams app (defaults to the agent name)',+									args: [+										{+											name: 'display-name',+										},+									],+								},+								{+									name: ['--output-dir'],+									description: 'Directory to write appPackage.zip to (defaults to the agent source directory)',+									args: [+										{+											name: 'output-dir',+										},+									],

language design

microsoft/vscode · #333603

Files changed →View PR ↗

sessions: Disable unavailable session type pickerTypeScript · 14 + / 11

Reworks 18 lines of existing logic in src/vs/sessions/contrib/chat/browser/sessionTypePicker.ts.

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

src/vs/sessions/contrib/chat/browser/sessionTypePicker.ts · 4 files

@@ -637,18 +635,19 @@ export class SessionTypePicker extends Disposable {  		dom.clearNode(this._triggerElement); -		// In web (vscode.dev/agents) the host filter already scopes the-		// workbench to a single agent host, so when that host advertises only-		// one harness there is nothing to pick — hide the trigger entirely.-		const hideForSingleHarness = isWeb && this._folderSessionTypes.length <= 1 && this._pickServedByFolder(this._picked);-		if (this._folderSessionTypes.length === 0 || hideForSingleHarness) {+		if (this._folderSessionTypes.length === 0) { 			this._triggerElement.classList.add('hidden');+			this._triggerElement.parentElement?.classList.remove('disabled'); 			this._visibleKey.set(false); 			return; 		} +		const disabled = this._folderSessionTypes.length === 1 && this._pickServedByFolder(this._picked); 		this._triggerElement.classList.remove('hidden');-		this._visibleKey.set(true);+		this._triggerElement.parentElement?.classList.toggle('disabled', disabled);+		this._triggerElement.tabIndex = disabled ? -1 : 0;+		this._triggerElement.setAttribute('aria-disabled', String(disabled));+		this._visibleKey.set(!disabled); 		const currentType = this._folderSessionTypes.find(t => 			t.providerId === this._picked?.providerId && t.sessionType.id === this._picked?.sessionTypeId)?.sessionType 			?? this._folderSessionTypes.find(t => t.sessionType.id === this._picked?.sessionTypeId)?.sessionType;

language design

rust-lang/rust · #161702

Files changed →View PR ↗

Use `drop_guard` in some places in {core,alloc,std}Rust · 313 + / 506

Introduces 1 new declaration in library/alloc/src/collections/vec_deque/drain.rs.

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

library/alloc/src/collections/vec_deque/drain.rs · 19 files

@@ -94,144 +94,137 @@ unsafe impl<T: Send, A: Allocator + Send> Send for Drain<'_, T, A> {} #[stable(feature = "drain", since = "1.6.0")] impl<T, A: Allocator> Drop for Drain<'_, T, A> {     fn drop(&mut self) {-        struct DropGuard<'r, 'a, T, A: Allocator>(&'r mut Drain<'a, T, A>);--        let guard = DropGuard(self);--        if mem::needs_drop::<T>() && guard.0.remaining != 0 {-            // SAFETY: We just checked that `self.remaining != 0`.-            let (front, back) = unsafe { guard.0.as_slices() };-            // since idx is a logical index, we don't need to worry about wrapping.-            guard.0.idx += front.len();-            guard.0.remaining -= front.len();-            // SAFETY: This can't have been dropped before since-            // `idx` & `remaining` track what's been dropped.-            unsafe { ptr::drop_in_place(front) };-            guard.0.remaining = 0;-            // SAFETY: Ditto.-            unsafe { ptr::drop_in_place(back) };-        }-         // Dropping `guard` handles moving the remaining elements into place.-        impl<'r, 'a, T, A: Allocator> Drop for DropGuard<'r, 'a, T, A> {-            #[inline]-            fn drop(&mut self) {-                if mem::needs_drop::<T>() && self.0.remaining != 0 {-                    // SAFETY: We just checked that `self.remaining != 0`.-                    unsafe {-                        let (front, back) = self.0.as_slices();-                        ptr::drop_in_place(front);-                        ptr::drop_in_place(back);-                    }+        let mut guard = DropGuard::new(self, |drain| {

framework internals

vercel/next.js · #98153

Files changed →View PR ↗

turbo-tasks-malloc: address review feedback on #97761Rust · 15 + / 25

Reworks 14 lines of existing logic in turbopack/crates/turbo-tasks-malloc/src/lib.rs.

Changes how existing framework internals behaves. Read the linked PR for the surrounding test context.

turbopack/crates/turbo-tasks-malloc/src/lib.rs · 1 files

@@ -111,14 +105,14 @@ impl TurboMalloc {             // Safety: every out-param is either null or a valid `usize` we own.             unsafe {                 libmimalloc_sys::mi_process_info(-                    std::ptr::null_mut(),-                    std::ptr::null_mut(),-                    std::ptr::null_mut(),-                    std::ptr::null_mut(),-                    std::ptr::null_mut(),+                    /* elapsed_msecs */ std::ptr::null_mut(),+                    /* user_msecs */ std::ptr::null_mut(),+                    /* system_msecs */ std::ptr::null_mut(),+                    /* current_rss */ std::ptr::null_mut(),+                    /* peak_rss */ std::ptr::null_mut(),                     &mut current_commit,-                    std::ptr::null_mut(),-                    std::ptr::null_mut(),+                    /* peak_commit */ std::ptr::null_mut(),+                    /* page_faults */ std::ptr::null_mut(),                 );             }             current_commit

Read today’s edition →