From a5ef42e0e967ce298eb4ec85c233f1aac04f2149 Mon Sep 17 00:00:00 2001 From: Whq02 <178854749+Whq02@users.noreply.github.com> Date: Thu, 5 Nov 2026 23:28:32 +0000 Subject: [PATCH 1/2] build: the CPU server graph gives the server module core, as the Metal, CUDA and fuzz graphs do Since 0a83dd5b3 the Living Weights view reads a shard's header with core (zig/src/server/slide_model.zig), and that commit gave the core module to the three graphs that root zig/src/server/root.zig: the Metal build's server tests, the CUDA host tests and fuzz-cortheon. The fourth, plain in zig/build/server.zig, builds the fake server's module for zig build server-cpu without it, so the step fails at slide_model.zig:4 with no module named 'core' available within module 'server'. plain now carries core/root.zig over its own tokenizer, as the Metal graph's server tests do, and cpuArtefacts takes it from the import table as it takes engine_api, tokenizer and template, so the engine-less CLI and the fake server share one core. --- zig/build/server.zig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zig/build/server.zig b/zig/build/server.zig index 5ad8f3144f..8d38791488 100644 --- a/zig/build/server.zig +++ b/zig/build/server.zig @@ -101,10 +101,12 @@ pub fn plain(b: *std.Build, root: []const u8, target: std.Build.ResolvedTarget, const api = b.createModule(.{ .root_source_file = b.path("zig/src/core/engine_api.zig"), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{.{ .name = "lanes", .module = lanes }} }); const tokenizer = b.createModule(.{ .root_source_file = b.path("zig/src/core/tokenizer/tokenizer.zig"), .target = target, .optimize = optimize }); const template = b.createModule(.{ .root_source_file = b.path("zig/src/core/template/template.zig"), .target = target, .optimize = optimize }); + const core = b.createModule(.{ .root_source_file = b.path("zig/src/core/root.zig"), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{.{ .name = "tokenizer", .module = tokenizer }} }); const m = b.createModule(.{ .root_source_file = b.path(root), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{ .{ .name = "engine_api", .module = api }, .{ .name = "tokenizer", .module = tokenizer }, .{ .name = "template", .module = template }, + .{ .name = "core", .module = core }, } }); _ = addTo(b, m, target, optimize); testImports(b, m, target, optimize); @@ -119,7 +121,7 @@ pub fn cpuArtefacts(b: *std.Build, target: std.Build.ResolvedTarget, optimize: s const api = server_mod.import_table.get("engine_api").?; const tokenizer = server_mod.import_table.get("tokenizer").?; const template = server_mod.import_table.get("template").?; - const core = b.createModule(.{ .root_source_file = b.path("zig/src/core/root.zig"), .target = target, .optimize = optimize, .link_libc = true }); + const core = server_mod.import_table.get("core").?; const none = b.createModule(.{ .root_source_file = b.path("zig/src/native/none.zig"), .target = target, .optimize = optimize, .imports = &.{.{ .name = "engine_api", .module = api }} }); const fake = b.addExecutable(.{ .name = "fake_serve", .root_module = b.createModule(.{ .root_source_file = b.path("zig/tests/server/fake_serve.zig"), From 012ec0d14600d90ba225cd6f9227063e3ab4bdda Mon Sep 17 00:00:00 2001 From: ashhart <71890694+ashhart@users.noreply.github.com> Date: Fri, 6 Nov 2026 13:20:16 +0000 Subject: [PATCH 2/2] changelog: #2363 under Unreleased --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5deab01f1..2e78246a0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ Each release's page on GitHub has its notes and measurements. See [the 1.0.0 rel ## Unreleased +- Build: `zig build server-cpu` (the CPU-only fake server and engine-less CLI the server tests install) compiles again; its server module gets `core`, as the Metal, CUDA and fuzz graphs give it (#2363). Thanks to @Whq02. + - Build: a plain `zig build` on Linux compiles again; the `tf-qwen35-cuda` tool passes the device flag that kept prompt states gained on 4 Nov (#2362). Thanks to @jschmied for the report. - Flash Next on CUDA: a shared round's DeltaNet steps run in one launch each across its lanes instead of one launch a lane, so 8 streams decode 3-6% faster on a GB10 with the same tokens; one stream keeps its own launches (#1942). Thanks to @Arminova.