7-day edition

Aug 22, 2026 – Aug 28, 2026

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

Aug 29, 202610 reads · 338 merged PRs screened

core implementation

microsoft/vscode · #333226

Files changed →View PR ↗

automations: add context menu actions for automation cardsTypeScript · 224 + / 33

Introduces 3 new declarations in src/vs/sessions/contrib/sessions/browser/views/automationsView.ts.

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

src/vs/sessions/contrib/sessions/browser/views/automationsView.ts · 6 files

@@ -1362,4 +1411,143 @@ registerAction2(class NewAutomationAction extends Action2 { 	} }); +registerAction2(class DuplicateAutomationAction extends Action2 {+	constructor() {+		super({+			id: 'sessions.automations.duplicate',+			title: localize2('duplicateAutomation', "Duplicate"),+			precondition: ChatAutomationsEnabledContext,+			menu: [{ id: Menus.AutomationCardContext, group: 'navigation', order: 1, when: ChatAutomationsEnabledContext }],+		});+	}++	override async run(accessor: ServicesAccessor, automation: IAutomationDescriptor): Promise<void> {+		const automationDialogService = accessor.get(IAutomationDialogService);+		const automationService = accessor.get(IAutomationService);+		const configurationService = accessor.get(IConfigurationService);+		const dialogService = accessor.get(IDialogService);+		const logService = accessor.get(ILogService);+		const isEnabled = () => configurationService.getValue<boolean>(CHAT_AUTOMATIONS_ENABLED_SETTING) === true;+		if (!isEnabled()) {+			await showAutomationsDisabled(dialogService);+			return;+		}++		try {+			const name = getDuplicateAutomationName(automation.name, automationService.automations.get());+			const result = await automationDialogService.showAutomationDialog({+				initialValues: {+					name,+					prompt: automation.prompt,+					schedule: automation.schedule,+					target: automation.target,

language design

denoland/deno · #36592

Files changed →View PR ↗

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);+  }+

framework internals

kubernetes/kubernetes · #141359

Files changed →View PR ↗

apiserver/cacher: interface refactor prep for lazy iteration of watch cache snapshotsGo · 89 + / 9

Introduces 7 new declarations in staging/src/k8s.io/apiserver/pkg/storage/cacher/store/watch_cache_storage.go.

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

staging/src/k8s.io/apiserver/pkg/storage/cacher/store/watch_cache_storage.go · 9 files

@@ -179,6 +200,42 @@ func (l listSnapshot) OrderedListPrefix(prefix string, continueKey string) ([]in 	return result, nil } +func (l listSnapshot) RangePrefix(prefix, continueKey string) iter.Seq2[*Element, error] {+	return func(yield func(*Element, error) bool) {+		items, err := l.OrderedListPrefix(prefix, continueKey)+		if err != nil {+			yield(nil, err)+			return+		}+		for _, item := range items {+			// OrderedListPrefix has already checked every item is an *Element.+			if !yield(item.(*Element), nil) {+				return+			}+		}+	}+}++// Count returns the number of items RangePrefix(prefix, continueKey) would+// yield, by applying its filter without allocating or sorting.+func (l listSnapshot) Count(prefix, continueKey string) int {+	count := 0+	for _, item := range l.Items {+		elem, ok := item.(*Element)+		if !ok {+			continue+		}+		if len(continueKey) > 0 && continueKey > elem.Key {+			continue+		}+		if !key.HasPathPrefix(elem.Key, prefix) {+			continue

core implementation

huggingface/transformers · #48071

Files changed →View PR ↗

Add an opt-in per-frame pixel cap (cap_pixels_per_frame) to the Qwen3-VL video processorPython · 381 + / 63

Introduces 8 new declarations in src/transformers/models/cohere_compass/video_processing_cohere_compass.py.

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

src/transformers/models/cohere_compass/video_processing_cohere_compass.py · 8 files

@@ -296,12 +331,55 @@ def _preprocess(         processed_grids = reorder_videos(processed_grids, grouped_videos_index)         pixel_values_videos = torch.cat(processed_videos, dim=0)         video_grid_thw = torch.tensor(processed_grids)-        data = {-            "pixel_values_videos": pixel_values_videos,-            "video_grid_thw": video_grid_thw,-        } -        return BatchFeature(data=data, tensor_type=return_tensors)+        return BatchFeature(+            data={"pixel_values_videos": pixel_values_videos, "video_grid_thw": video_grid_thw},+            tensor_type=return_tensors,+        )++    def get_num_of_video_patches(self, num_frames: int, height: int, width: int, videos_kwargs=None):+        """+        A utility that returns number of video patches a given video size.++        Args:+            num_frames (`int`):+                Number of frames in the input video.+            height (`int`):+                Height of the input video.+            width (`int`):+                Width of the input video.+            videos_kwargs (`dict`, *optional*)+                Any kwargs to override defaults of the video processor.+        Returns:+            `Tuple(int, int)`: Number of placeholder tokens required and number of patches per image.+        """+        videos_kwargs = videos_kwargs if videos_kwargs is not None else {}+        min_pixels = videos_kwargs.get("min_pixels", None) or self.size["shortest_edge"]+        max_pixels = videos_kwargs.get("max_pixels", None) or self.size["longest_edge"]

framework internals

vercel/next.js · #97808

Files changed →View PR ↗

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);

runtime

ggml-org/llama.cpp · #27804

Files changed →View PR ↗

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);

runtime

ggml-org/llama.cpp · #27762

Files changed →View PR ↗

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]);+    }+

runtime

kubernetes/kubernetes · #141500

Files changed →View PR ↗

apiextensions: report why the test server's healthz wait failedGo · 21 + / 7

Reworks 22 lines of existing logic in staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go.

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

staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go · 1 files

@@ -216,23 +216,37 @@ func StartTestServer(t Logger, _ *TestServerInstanceOptions, customFlags []strin 	if err != nil { 		return result, fmt.Errorf("failed to create a client: %v", err) 	}-	err = wait.Poll(100*time.Millisecond, time.Minute, func() (bool, error) {+	// Keep the outcome of the last probe around: on timeout it is the only+	// clue about what the server was still waiting for, and /healthz names+	// the checks that did not pass in its body.+	var lastStatus int+	var lastBody []byte+	var lastErr error+	err = wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, time.Minute, false, func(ctx context.Context) (bool, error) { 		select { 		case err := <-errCh: 			return false, err 		default: 		} -		result := client.CoreV1().RESTClient().Get().AbsPath("/healthz").Do(context.TODO())+		res := client.CoreV1().RESTClient().Get().AbsPath("/healthz").Do(ctx) 		status := 0-		result.StatusCode(&status)-		if status == 200 {-			return true, nil+		res.StatusCode(&status)+		body, rerr := res.Raw()+		// The probe that runs into the poll deadline is aborted mid-flight and+		// carries no useful outcome; keep the last one that actually completed.+		if ctx.Err() == nil {+			lastStatus, lastBody, lastErr = status, body, rerr 		}-		return false, nil+		return status == 200, nil 	})

runtime

nodejs/node · #65465

Files changed →View PR ↗

sqlite: keep sessions alive across SQLite callbacksC++ · 26 + / 2

Reworks 10 lines of existing logic in src/node_sqlite.cc.

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

src/node_sqlite.cc · 3 files

@@ -1024,6 +1024,15 @@ void DatabaseSync::RemoveBackup(BackupJob* job) {   backups_.erase(job); } +std::vector<BaseObjectPtr<Session>> DatabaseSync::PinSessions() const {+  std::vector<BaseObjectPtr<Session>> pinned;+  pinned.reserve(sessions_.size());+  for (Session* session : sessions_) {+    pinned.emplace_back(session);+  }+  return pinned;+}+ void DatabaseSync::DeleteSessions() {   // all attached sessions need to be deleted before the database is closed   // https://www.sqlite.org/session/sqlite3session_create.html

language design

react/react · #37363

Files changed →View PR ↗

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(

Read today’s edition →