Repository navigation
Conversation
`tensorfold config validate FILE` reads a cluster.json, prints every problem the existing parser collected, and exits without planning models or probing hosts.
|
Thanks @mvanhorn, One fix, in the docs:
Optional: the test "an unknown key exits 1 and names the key" actually checks an unknown backend value, because unknown keys are ignored, as the loader ignores them. A name like "an unknown backend exits 1 and names it" would match what it tests.
|
|
Good catch on the release binary. You're right that the archives only ship tensorfold-native and server/main.zig has no config command, so that smoke check line would print usage and exit 2 on a release install. Of the two options I'd go with scoping the docs line to source builds (tensorfold from source, or tf-cluster). Wiring config into server/main.zig adds a command to the release binary's surface, which feels like its own change rather than something to slip into this PR. Agreed on the test name too. It checks an unknown backend value, not an unknown key, so "an unknown backend exits 1 and names it" is the accurate name. |
… test The release binary, tensorfold-native, has no config command, so the smoke check line now says the command comes from a source build. The "unknown key" test checks an unknown backend value, so its name says so.
|
Pushed 66dfcd6: |
feat(cli): validate a cluster config file without planning or probes
What this changes
Before this change there was no
tensorfold config validatecommand.tensorfold cluster checkstill plans models and may need probes ormemory_gb. After this change,tensorfold config validate FILEreads a cluster.json through the existing parser, prints a short confirmation (path, node count, model count) when the file is valid, or every problem the parser collected when it is not, and exits 0 / 1 / 2. It does not plan models, probe hosts, open an engine, or load a checkpoint.cluster checkis unchanged.atc overlap --json: ATC 0.9.6, runatc overlap --json --base origin/mainat 3:56 AM PT, Fri Nov 13, 2026 (America/Los_Angeles) on head1cf7bc7. The snapshot was incomplete (complete: false; limitations:otherPullRequestsLimit,pullFilesUnavailable,pullRequestsLimit,timeLimit).changedFiles: 10.myPullRequests: none. Two overlaps, bothconflict: "unknown"(ATC could not run merge-tree): draft #2762 and draft #2763 each sharezig/src/cli/cuda_main.zig. Manual review of those patches: they edit the--carveoutusage and the carveout-open path; this change only adds a usage line forconfig validateand a dispatch next to the existing cluster-command branch. The regions do not overlap, so a merge would be clean. No overlap with open #2885 (serve --config FILE.toml).Checks on this head
1cf7bc7f6606c95dc7758b84f71c9e3f96159161python3 tools/zig/lean_check.py, on the base and on this head: 341 problems on origin/main (13d7ce0), 341 on this head, 0 new. None of the 10 changed files appear in the lean report.zig build test-cluster-membership-host— validate runner 2 pass, 6 fail (8 total); the six new cases exited 2 from a stubrun(nonzero).zig build test-cluster-membership-host— validate runner 10 pass, 0 fail, 0 skip; bringup runner 37 pass, 1 skip. Re-run on this head after review: the same step succeeded (Build Summary: 5/5 steps succeeded).zig build tf-config-validate, thentensorfold config validate FILEon a valid file (exit 0:fixtures/cluster.json: 6 nodes, 3 models), an unknown backend (exit 1:nodes[0] (a): backend must be "metal" or "cuda"), a wrong type (exit 1:nodes: must be an array), a conflicting layout (exit 1: tensor 3 does not divide 4 nodes, and mixed Metal/CUDA in one tensor-parallel group), a missing path (exit 1:no-such-cluster-9f3a.json: FileNotFound), and bad usage (exit 2:usage: tensorfold config validate FILE).test-cuda-host. This box has no GPU and the change never reaches a device.Receipt
n/a — this command only reads a cluster.json and prints parse problems. It does not load a checkpoint, open an engine, or reach inference.
1cf7bc7f6606c95dc7758b84f71c9e3f96159161, no GPU, no checkpointzig build test-cluster-membership-hostandzig build tf-config-validate. Metaltensorfoldand the CUDA product binary were not built here. The command is also wired fromzig/src/main.zigandzig/src/cli/cuda_main.zig.tools/bench_concurrent.py --alone --serialortoken_shaagainst"draft": false: n/a (cannot reach inference)tools/bench_openai.py: n/a (cannot reach inference)Checklist
Demo
Animated replay of real captured command output, not a live UI recording.