Selected changesmerged Aug 21, 2026 – Aug 27, 2026
DRA: Fix ExtendedResourceCache handling of DeviceClass collisionsGo · 170 + / 78 −
Introduces 7 new declarations in staging/src/k8s.io/dynamic-resource-allocation/deviceclass/extendedresourcecache/extendedresourcecache.go.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
staging/src/k8s.io/dynamic-resource-allocation/deviceclass/extendedresourcecache/extendedresourcecache.go ↗ · 2 files
@@ -134,86 +150,150 @@ func (c *ExtendedResourceCache) OnUpdate(oldObj, newObj interface{}) { // OnDelete handles deletion of a device class. func (c *ExtendedResourceCache) OnDelete(obj interface{}) {- if tombstone, ok := obj.(cache.DeletedFinalStateUnknown); ok {- obj = tombstone.Obj- }- deviceClass, ok := obj.(*resourceapi.DeviceClass)- if !ok {+ // DeltaFIFO.Replace can emit a key-only tombstone with a nil Obj when+ // the key is no longer available from knownObjects.+ // DeletionHandlingObjectToName falls back to the tombstone key in that+ // case, which is enough because DeviceClass is cluster-scoped and all+ // mappings are keyed by class name.+ objName, err := cache.DeletionHandlingObjectToName(obj)+ if err != nil { utilruntime.HandleErrorWithLogger(c.logger, nil, "Expected DeviceClass", "actual", fmt.Sprintf("%T", obj)) return }- c.logger.V(5).Info("DeviceClass deleted", "deviceClass", klog.KObj(deviceClass))- c.removeResourceName2class(deviceClass)- c.removeClass2ResourceName(deviceClass)+ className := objName.Name+ c.logger.V(5).Info("DeviceClass deleted", "deviceClass", className)+ c.removeMappings(className) for _, handler := range c.handlers { handler.OnDelete(obj) } } -// updateResourceName2class updates the cache with the device class mapping.-// It first removes any existing mappings for this device class to handle-// ExtendedResourceName changes, then adds the new mappings.
fix(ext/node): do not resume client TLS sessions unless requestedRust · 150 + / 31 −
Introduces 10 new declarations in ext/node/ops/tls_wrap.rs.
Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.
ext/node/ops/tls_wrap.rs ↗ · 4 files
@@ -4053,11 +4067,80 @@ fn normalize_pem_headers(pem: &[u8]) -> std::borrow::Cow<'_, [u8]> { std::borrow::Cow::Owned(s.into_bytes()) } +#[derive(Debug)]+struct NodeClientSessionStoreWrapper {+ inner: Arc<dyn rustls::client::ClientSessionStore>,+ allow_resumption: Arc<AtomicBool>,+}++impl rustls::client::ClientSessionStore for NodeClientSessionStoreWrapper {+ fn set_kx_hint(+ &self,+ server_name: rustls::pki_types::ServerName<'static>,+ group: rustls::NamedGroup,+ ) {+ self.inner.set_kx_hint(server_name, group);+ }++ fn kx_hint(+ &self,+ server_name: &rustls::pki_types::ServerName<'_>,+ ) -> Option<rustls::NamedGroup> {+ self.inner.kx_hint(server_name)+ }++ fn set_tls12_session(+ &self,+ server_name: rustls::pki_types::ServerName<'static>,+ value: rustls::client::Tls12ClientSessionValue,+ ) {+ self.inner.set_tls12_session(server_name, value);+ }+
validation-gen: Support maps of pointersGo · 726 + / 22 −
Introduces 49 new declarations in staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_pointers/zz_generated.validations.go.
Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.
staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_pointers/zz_generated.validations.go ↗ · 19 files
@@ -0,0 +1,156 @@+//go:build !ignore_autogenerated+// +build !ignore_autogenerated++/*+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.+*/++// Code generated by validation-gen. DO NOT EDIT.++package mapofpointers++import (+ context "context"+ fmt "fmt"++ equality "k8s.io/apimachinery/pkg/api/equality"+ operation "k8s.io/apimachinery/pkg/api/operation"+ safe "k8s.io/apimachinery/pkg/api/safe"+ validate "k8s.io/apimachinery/pkg/api/validate"+ field "k8s.io/apimachinery/pkg/util/validation/field"+ testscheme "k8s.io/code-generator/cmd/validation-gen/testscheme"
Fix Turbopack resolution through chained symlinksRust · 135 + / 13 −
Introduces 4 new declarations in turbopack/crates/turbo-tasks-fs/src/disk.rs.
Adds new framework internals rather than adjusting what was there. Read the linked PR for the surrounding test context.
turbopack/crates/turbo-tasks-fs/src/disk.rs ↗ · 8 files
@@ -1958,6 +1958,67 @@ mod tests { tt.stop_and_wait().await; } + #[cfg(unix)]+ #[tokio::test(flavor = "multi_thread", worker_threads = 2)]+ async fn test_link_target_resolved_type_through_chain() {+ use std::os::unix::fs::symlink;++ let scratch = tempfile::tempdir().unwrap();+ let path = scratch.path().to_owned();+ create_dir_all(path.join("target-dir")).unwrap();+ File::create_new(path.join("target-file")).unwrap();+ symlink("target-dir", path.join("dir-inner")).unwrap();+ symlink("dir-inner", path.join("dir-outer")).unwrap();+ symlink("target-file", path.join("file-inner")).unwrap();+ symlink("file-inner", path.join("file-outer")).unwrap();+ symlink("../outside", path.join("invalid-inner")).unwrap();+ symlink("invalid-inner", path.join("invalid-outer")).unwrap();++ let root = canonicalize_to_rcstr(&path).unwrap();++ #[turbo_tasks::function(operation, root)]+ async fn assert_operation(+ fs: ResolvedVc<DiskFileSystem>,+ root_path: FileSystemPath,+ ) -> anyhow::Result<()> {+ for (input_path, expected_output) in [+ ("dir-outer", FileSystemEntryType::Directory),+ ("file-outer", FileSystemEntryType::File),+ ("invalid-outer", FileSystemEntryType::Error),+ ] {+ let link = fs.read_link(root_path.join(input_path)?).await?;+ let LinkContent::Link { target } = &*link else {
Upgrade Turbopack to hashbrown 0.15Rust · 268 + / 324 −
Introduces 8 new declarations in turbopack/crates/turbo-tasks-backend/src/backend/mod.rs.
Adds new framework internals rather than adjusting what was there. Read the linked PR for the surrounding test context.
turbopack/crates/turbo-tasks-backend/src/backend/mod.rs ↗ · 11 files
@@ -1569,76 +1570,88 @@ impl TurboTasksBackend { self.track_cache_hit_by_fn(native_fn); // Step 3a: Insert into in-memory cache using the pre-located shard. // Use the existing Arc from storage to avoid a duplicate allocation.- match raw_entry_in_shard(shard, self.storage.task_cache.hasher(), hash, |k| {- k.eq_components(native_fn, this, arg_ref)- }) {- RawEntry::Occupied(_) => {}- RawEntry::Vacant(e) => {- e.insert(stored_type, task_id);- }- };+ with_entry_in_shard(+ shard,+ self.storage.task_cache.hasher(),+ hash,+ arg,+ |k, arg| k.eq_components(native_fn, this, arg.as_ref()),+ |entry, _arg| {+ if let Entry::Vacant(entry) = entry {+ entry.insert((stored_type, task_id));+ }+ },+ ); task_id } else {- match raw_entry_in_shard(shard, self.storage.task_cache.hasher(), hash, |k| {- k.eq_components(native_fn, this, arg_ref)- }) {- RawEntry::Occupied(e) => {- // Another thread beat us to creating this task — use their task_id.- // They will handle logging the new task as modified.- let task_id = *e.get();- drop(e);
feat(desktop): support checked, icon, and tooltip on menu itemsRust · 87 + / 5 −
Introduces 1 new declaration in runtime/ops/desktop.rs.
Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.
runtime/ops/desktop.rs ↗ · 7 files
@@ -1821,6 +1831,53 @@ mod tests { } } + #[test]+ fn menu_item_wire_shape_new_fields_are_optional() {+ // Pre-existing callers only pass label/enabled (+ optional id and+ // accelerator); checked/icon/tooltip must default rather than error.+ let item: MenuItem = serde_json::from_value(json!({+ "item": { "label": "Save", "enabled": true }+ }))+ .unwrap();+ match item {+ MenuItem::Item {+ checked,+ icon,+ tooltip,+ ..+ } => {+ assert!(!checked);+ assert!(icon.is_none());+ assert!(tooltip.is_none());+ }+ _ => panic!("expected Item"),+ }++ let item: MenuItem = serde_json::from_value(json!({+ "item": {+ "label": "Mute",+ "enabled": true,+ "checked": true,+ "icon": [0x89, 0x50, 0x4E, 0x47],+ "tooltip": "Silence notifications",+ }
model: add DSpark support for Nemotron3.5C++ · 52 + / 25 −
Introduces 1 new declaration in src/models/dflash.cpp.
Adds new runtime rather than adjusting what was there. Read the linked PR for the surrounding test context.
src/models/dflash.cpp ↗ · 6 files
@@ -354,17 +360,21 @@ static void build_dspark_markov_head(llm_graph_context & g, const llama_model & cat = cat ? ggml_concat(ctx0, cat, col, 1) : col; - // conf(i) = sigmoid(conf_proj . [conf_inp(i); markov_w1[prev(i)]] + b) -- [1, n_blocks]- ggml_tensor * conf_inp_i = ggml_view_2d(ctx0, conf_inp, conf_inp->ne[0], n_blocks,- (size_t) block_drafts * conf_inp->nb[1], i*conf_inp->nb[1]);- ggml_tensor * feat = ggml_concat(ctx0, ggml_cont(ctx0, conf_inp_i), w1_prev, 0);- ggml_tensor * conf = ggml_mul_mat(ctx0, model.dspark_conf_proj, feat);- if (model.dspark_conf_proj_b) {- conf = ggml_add(ctx0, conf, model.dspark_conf_proj_b);- }- conf = ggml_sigmoid(ctx0, conf);+ if (has_conf) {+ // confidence head input: predicts per-position acceptance+ ggml_tensor * conf_inp = res->t_embd; // [n_embd, n_tok]+ // conf(i) = sigmoid(conf_proj . [conf_inp(i); markov_w1[prev(i)]] + b) -- [1, n_blocks]+ ggml_tensor * conf_inp_i = ggml_view_2d(ctx0, conf_inp, conf_inp->ne[0], n_blocks,+ (size_t) block_drafts * conf_inp->nb[1], i*conf_inp->nb[1]);+ ggml_tensor * feat = ggml_concat(ctx0, ggml_cont(ctx0, conf_inp_i), w1_prev, 0);+ ggml_tensor * conf = ggml_mul_mat(ctx0, model.dspark_conf_proj, feat);+ if (model.dspark_conf_proj_b) {+ conf = ggml_add(ctx0, conf, model.dspark_conf_proj_b);+ }+ conf = ggml_sigmoid(ctx0, conf); - cat_conf = cat_conf ? ggml_concat(ctx0, cat_conf, conf, 1) : conf;+ cat_conf = cat_conf ? ggml_concat(ctx0, cat_conf, conf, 1) : conf;+ } if (i + 1 < block_drafts) { prev = ggml_argmax(ctx0, col);
llama: add token ID tracking to KV cellC++ · 133 + / 14 −
Reworks 75 lines of existing logic in src/llama-kv-cache.cpp.
Changes how existing runtime behaves. Read the linked PR for the surrounding test context.
src/llama-kv-cache.cpp ↗ · 4 files
@@ -1805,6 +1813,69 @@ void llama_kv_cache::set_input_v_rot(ggml_tensor * dst) const { memcpy(dst->data, attn_rot_hadamard.at(n_rot).data(), ggml_nbytes(dst)); } +bool llama_kv_cache::has_cell_ext() const {+ return hparams.n_pos_per_embd() > 1;+}++void llama_kv_cache::get_prev_tokens(const llama_ubatch & ubatch, uint32_t n, std::vector<llama_token> & res) const {+ const uint32_t n_tokens = ubatch.n_tokens;++ res.clear();+ res.resize(n_tokens*n, LLAMA_TOKEN_NULL);++ if (n == 0) {+ return;+ }++ // note: apply_ubatch() has already stored the current ubatch+ // the window below thus covers tokens of this very ubatch as well, which is what we want+ llama_pos p_min = std::numeric_limits<llama_pos>::max();+ llama_pos p_max = std::numeric_limits<llama_pos>::min();++ std::bitset<LLAMA_MAX_SEQ> seqs;++ for (uint32_t i = 0; i < n_tokens; ++i) {+ p_min = std::min(p_min, ubatch.pos[i]);+ p_max = std::max(p_max, ubatch.pos[i]);+ }++ for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) {+ seqs.set(ubatch.seq_id_unq[s]);+ }+
Add spelling suggestions to the Integrated Browser context menuTypeScript · 24 + / 0 −
Reworks 23 lines of existing logic in src/vs/platform/browserView/electron-main/browserViewMainService.ts.
Changes how existing core implementation behaves. Read the linked PR for the surrounding test context.
src/vs/platform/browserView/electron-main/browserViewMainService.ts ↗ · 1 files
@@ -564,6 +564,30 @@ export class BrowserViewMainService extends Disposable implements IBrowserViewMa })); } + const spellingSuggestions = params.dictionarySuggestions ?? [];+ const canAddToDictionary = !!params.misspelledWord && webContents.session.isPersistent();+ if (params.misspelledWord && (spellingSuggestions.length > 0 || canAddToDictionary)) {+ if (menu.items.length > 0) {+ menu.append(new MenuItem({ type: 'separator' }));+ }+ for (const suggestion of spellingSuggestions) {+ menu.append(new MenuItem({+ label: suggestion,+ click: () => webContents.replaceMisspelling(suggestion)+ }));+ }+ if (canAddToDictionary) {+ if (spellingSuggestions.length > 0) {+ menu.append(new MenuItem({ type: 'separator' }));+ }+ menu.append(new MenuItem({+ label: localize('browser.contextMenu.addToDictionary', 'Add to Dictionary'),+ click: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)+ }));+ }+ menu.append(new MenuItem({ type: 'separator' }));+ }+ if (params.isEditable) { menu.append(new MenuItem({ role: 'cut', enabled: params.editFlags.canCut })); menu.append(new MenuItem({ role: 'copy', enabled: params.editFlags.canCopy }));
Revert "[rust-compiler] Bail out on nested TypeScript `this` parameters (#37232)"Rust · 4 + / 12 −
Reworks 16 lines of existing logic in compiler/crates/react_compiler_lowering/src/build_hir.rs.
Changes how existing language design behaves. Read the linked PR for the surrounding test context.
compiler/crates/react_compiler_lowering/src/build_hir.rs ↗ · 1 files
@@ -2589,25 +2589,17 @@ fn lower_block_statement( block: &react_compiler_ast::statements::BlockStatement, parent_scope: Option<react_compiler_ast::scope::ScopeId>, ) -> Result<(), CompilerError> {- Ok(lower_block_statement_inner(- builder,- block,- None,- parent_scope,- )?)+ let _ = lower_block_statement_inner(builder, block, None, parent_scope);+ Ok(()) } fn lower_block_statement_with_scope( builder: &mut HirBuilder, block: &react_compiler_ast::statements::BlockStatement, scope_override: react_compiler_ast::scope::ScopeId, ) -> Result<(), CompilerError> {- Ok(lower_block_statement_inner(- builder,- block,- Some(scope_override),- None,- )?)+ let _ = lower_block_statement_inner(builder, block, Some(scope_override), None);+ Ok(()) } fn lower_block_statement_inner(
src: use simdutf for two-byte string utf8 conversion in utf8 valueC++ · 12 + / 5 −
Reworks 16 lines of existing logic in src/util.cc.
Changes how existing runtime behaves. Read the linked PR for the surrounding test context.
src/util.cc ↗ · 2 files
@@ -121,13 +121,20 @@ static void MakeUtf8String(Isolate* isolate, return; } - // Add +1 for null termination.- size_t storage = (3 * value_length) + 1;+ auto const_char16 = reinterpret_cast<const char16_t*>(value_view.data16());+ size_t storage = static_cast<size_t>(value_length) * 3 + 1; target->AllocateSufficientStorage(storage); - size_t length = string->WriteUtf8V2(- isolate, target->out(), storage, String::WriteFlags::kReplaceInvalidUtf8);- target->SetLengthAndZeroTerminate(length);+ size_t actual_length =+ simdutf::convert_utf16_to_utf8(const_char16, value_length, target->out());+ if (actual_length == 0) {+ actual_length =+ string->WriteUtf8V2(isolate,+ target->out(),+ storage,+ String::WriteFlags::kReplaceInvalidUtf8);+ }+ target->SetLengthAndZeroTerminate(actual_length); } Utf8Value::Utf8Value(Isolate* isolate, Local<Value> value) {