Daily edition

Aug 28, 2026

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

Aug 29, 20264 reads · 97 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,

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

runtime

nodejs/node · #64024

Files changed →View PR ↗

events: fix weak listener retention overwriteJavaScript · 24 + / 3

Reworks 23 lines of existing logic in lib/internal/event_target.js.

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

lib/internal/event_target.js · 3 files

@@ -545,8 +555,19 @@ class Listener {     if (this.next !== undefined)       this.next.previous = this.previous;     this.removed = true;-    if (this.weak)+    if (this.weak) {       weakListeners().registry.unregister(this);+      const weakKey = this.weakKeyRef?.deref();+      const listener = this.callback?.deref();+      if (weakKey !== undefined && listener !== undefined) {+        const retained = weakListeners().map.get(weakKey);+        if (retained !== undefined) {+          retained.delete(listener);+          if (retained.size === 0)+            weakListeners().map.delete(weakKey);+        }+      }+    }   } } 

language design

denoland/deno · #36716

Files changed →View PR ↗

fix(transpile): don't report diagnostics from bundled assets in declaration emitRust · 17 + / 1

Reworks 9 lines of existing logic in cli/type_checker.rs.

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

cli/type_checker.rs · 7 files

@@ -225,8 +225,24 @@ impl TypeChecker {       None,     )?; +    // Declaration emit type-checks with `TypeCheckMode::All`, which (unlike+    // `deno check`'s default `Local` mode) doesn't scope semantic diagnostics+    // to the user's own files. That widens the report to every file in the+    // program, including deno's bundled `asset:///` declarations. Those aren't+    // self-contained under a user-supplied `compilerOptions.lib`: with+    // `"lib": ["dom", "deno.ns"]`, `lib.deno.ns.d.ts`'s own `import("node:net")`+    // and `NodeJS.Timeout` references have nothing to resolve against, and+    // adding `"node"` instead collides the bundled node types with the web+    // ones. Either way the user gets errors in a file they can't edit.+    // `deno check` never surfaces these, so neither should declaration emit.+    let diagnostics = response.diagnostics.filter(|d| {+      !d.file_name+        .as_deref()+        .is_some_and(|f| f.starts_with("asset:///"))+    });+     Ok(EmitDeclarationsResult {-      diagnostics: response.diagnostics,+      diagnostics,       emitted_files: response.emitted_files,     })   }

Read today’s edition →