Daily edition

Aug 25, 2026

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

Aug 26, 20263 reads · 34 merged PRs screened

framework internals

vercel/next.js · #97825

Files changed →View PR ↗

Fix Turbopack resolution through chained symlinksRust · 135 + / 13

148 source lines changed in turbopack/crates/turbo-tasks-fs/src/disk.rs.

A reviewable change in a preferred framework internals path. Focused tests changed with it.

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 {

language design

denoland/deno · #36474

Files changed →View PR ↗

fix(publish): reject invalid JSR package namesRust · 209 + / 38

247 source lines changed in cli/registry.rs.

A reviewable change in a preferred language design path. Focused tests changed with it.

cli/registry.rs · 5 files

@@ -269,8 +330,84 @@ mod test {   #[test]   fn test_parse_package_name() {     assert_eq!(parse_package_name("@deno/doc").unwrap(), ("deno", "doc"));-    assert!(parse_package_name("deno/doc").is_err());-    assert!(parse_package_name("@deno").is_err());+    assert_eq!(+      parse_package_name("@scope-1/package-2").unwrap(),+      ("scope-1", "package-2")+    );+    assert_eq!(parse_package_name("@a/b").unwrap(), ("a", "b"));++    for invalid_name in [+      "deno/doc",+      "@deno",+      "@deno/../doc",+      "@deno/doc/other",+      "@deno/doc?other",+      "@deno/doc#other",+      "@deno/doc\\other",+      "@deno/doc%2Fother",+    ] {+      assert!(+        parse_package_name(invalid_name).is_err(),+        "{invalid_name} should be invalid"+      );+    }+  }++  #[test]+  fn package_api_urls_use_path_segments() {+    let base = Url::parse("https://registry.example/custom/api/").unwrap();+    let package_url = get_package_api_url(&base, "scope", "package").unwrap();+    assert_eq!(

networking

tailscale/tailscale · #20927

Files changed →View PR ↗

wgengine/magicsock: teach magicsock about multiple discokey originsGo · 200 + / 65

265 source lines changed in wgengine/magicsock/endpoint.go.

A reviewable change in a preferred networking path. Focused tests changed with it.

wgengine/magicsock/endpoint.go · 7 files

@@ -1476,21 +1516,73 @@ func (de *endpoint) setLastPing(ipp netip.AddrPort, now mono.Time) { 	state.lastPing = now } -// updateDiscoKey replaces the disco key for de. If the key is a zero value key,-// set the key to nil.+// updateDiscoKey replaces the controlClient learned disco key for de.+// Update only the control-provided key, leaving any existing TSMP key as-is.+// If the new control key is zero, switch back to using the TSMP key if it+// exists; otherwise mark the new control key as preferred.+// Should both keys be zero, nil out the saved key.+// The loop here ensures another update did not occur during the interval+// between load and store (based on pointer identity). func (de *endpoint) updateDiscoKey(key key.DiscoPublic) {-	if key.IsZero() {-		de.disco.Store(nil)-	} else {-		de.disco.Store(&endpointDisco{-			key:   key,-			short: key.ShortString(),-		})+	epDisco := &endpointDisco{}+	for {+		old := de.disco.Load()+		if old != nil {+			epDisco.tsmpKey = old.tsmpKey+			epDisco.tsmpShort = old.tsmpShort+			epDisco.tsmpActive = key.IsZero()+		}+		if !key.IsZero() {+			epDisco.controlKey = key+			epDisco.controlShort = key.ShortString()+			epDisco.tsmpActive = false+		}

Read today’s edition →