Selected changesmerged Aug 30, 2026 – Sep 5, 2026
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)
[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):
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'
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]);- }
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 {
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,
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())
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 {
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
[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(
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.