Skip to content

A modeled, content-keyed GB10 sm_121 vLLM build at 07b75534 -- and the two obligation symbols that do not exist - #11022

Merged
gunbai-bot[bot] merged 27 commits into
mainfrom
session/clever-bat-173
Sep 11, 2026
Merged

gunbai-bot[bot] merged 27 commits into
mainfrom
session/clever-bat-173

Conversation

@briansrls

@briansrls briansrls commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

What this is

The runtime sweep in #11016 probed every published GB10 image inside its exact digest and found none that registers DeepseekV41ForCausalLM on sm_121, leaving a build obligation: the only source known to carry the V4.1 path is vLLM at 07b75534651a0dd584c6f3be75d8c62fb8426397. This is that build, modelled.

It is not a shell script somebody ran. A docker build typed into a terminal produces an image whose provenance is a memory — which base, which arch list, which revision — and the whole product of this lane is a digest that someone else has to be able to re-derive or refute. So the inputs are declarations, the identity of the build is a content hash over those declarations, the tag is derived from that hash, and every leg executes through gunbc.typed_argv_exec typed_argv_exec_over_fleet_ssh: a portable-word-sealed argv over an SSH leg whose known-hosts anchor was materialized and read back and whose credential was verified against fleet_automation_ssh_key before any host was contacted. Two transports, and which one a leg takes is decided by what the leg needs. Source acquisition and reachability run as the managed executor over the fleet key. Docker cannot: its socket on a Spark is root-owned and gunbc-automation is in no docker group on any of them, so the docker legs bind to the one route the corpus already models for that daemon — gunbc.spark.model_snapshot_materialize spark_remote_run, briansrls over a password session with sudo -S, credential resolved inside the boundary where the entry runs and never in an authoring session. Privileged for a read-only question, and the modeled path rather than a second one invented here (operator ruling).

The modules

  • extdeps.vllm.source_build — upstream's own container build recipe at the pinned revision (docker/versions.json), its aarch64 release invocation (.buildkite/release-pipeline.yaml), and CUDA_SUPPORTED_ARCHS from CMakeLists.txt. The default BUILD_BASE_IMAGE is an amd64-only manifest, which is why an arm64 build must override it; vllm_recipe_targeting is the single override point, so a fleet recipe diverges from upstream in exactly the fields a reader is told to look at.
  • extdeps.vllm.deepseek_v4_1_sm12 — what the V4.1 SM12 path demands, read out of the tree rather than restated: the FlashInfer SM120 symbols the branch checks, the registered torch operators with their library namespaces (torch.ops._C and torch.ops._C_cache_ops are different lookups, so a bare name is not a question anything can be asked), the two arch-gated CMake source blocks, and which KV layouts the backend admits per device major.
  • gunbc.spark.v41_runtime_image_build — converges the source at the revision (readback first: a directory that exists says nothing about which commit is in it) and the image at its key-derived tag.
  • gunbc.spark.v41_runtime_image_probe — generates its probe from the roster and runs it inside the built image with --gpus all. A capability with no VERDICT line reads UNREAD, never absent: a probe that could not ask must not produce evidence against the image.

extdeps.docker.cli gains a DockerBuildSpec (the existing docker_build_command cannot say --build-arg, --target, --platform or --file, so it can only ever get a Dockerfile's defaults), an ephemeral docker run, and a short -v mount rendering — the long --mount form separates fields with commas, and a comma is outside the portable-word allowlist, so it is refused before it reaches a host. extdeps.git gains shallow clone/fetch/checkout/rev-parse. Both are admitted by name on argv_command.

The finding this lane produced before it produced an image

Two of the four FP4-KV symbols in #11016's build obligation do not exist at the pinned revision. There is no concat_and_cache_ds_mla_nvfp4 and no indexer_k_quant_and_cache_fp4 anywhere in the tree, and nvfp4_ds_mla_cache is a C++ header, not a registered operator — so those three read absent in every image, including one built from the lead commit, and the obligation as written could never discharge.

The capability behind them is also arch-gated upstream: nvfp4_ds_mla_cache_kernels.cu is listed in FP4_SM100_SRCS alone, guarded by -DENABLE_NVFP4_SM100=1, while the SM12x block (12.0f, which family-matches 12.1) carries the NVFP4 quantisation, GEMM and KV-cache kernels but not that one. The build's own configure output confirms it by execution: -- CUDA target architectures: 12.1, -- Building SM12x NVFP4 for archs: 12.0f, -- Not building SM10x/11x NVFP4/MXFP4 as no compatible archs were found.

And it is not a degraded path: DeepseekV4FlashInferMLASparseBackend.supports_combination admits, on device major 12, exactly fp8, fp8_e4m3 and fp8_ds_mla, and rejects nvfp4_ds_mla outright — so sm_12x never selects that layout, kernels or no kernels. The capability was therefore renamed (by ruling) from an operator-presence question to the layout question, and this probe answers it by calling the admission rule inside the image for every candidate dtype rather than looking up symbols. loyal-ram-346 verified the finding independently against the same file and re-typed #11016's three rows as KernelProbeSymbolUngrounded, with a frontier naming this module.

Evidence

  • 22 of 22 witnesses PASS (claim_batch --entry dag/test/claim/spark/v41_runtime_image_build_witness_test.dag).
  • Mutation control on the reachability walls: flipping spark_host_answered to accept an unreachable host, and pointing the hostname lookup at the fleet identity instead of the lane's recorded vendor label, turns exactly the two reachability witnesses red and leaves the other sixteen green.
  • Mutation control on the source/execution join: adding nvfp4_ds_mla to the observed admitted layout set and flipping the source's registry fact turns exactly the two join witnesses red and leaves the other fourteen green — so "the readings agree with the source" is a claim that can fail, not a sentence matching itself.
  • Mutation control on the arch list, run twice: with v41_gb10_torch_cuda_arch_list mutated to 12.0, 3 witnesses go red (the subject-architecture pin, the key/tag derivation, the rendered build argv) and the rest stay green. The first mutation run is why the subject-architecture assertion exists at all — it showed the witness whose whole point is "the build targets the architecture the fleet has" could not see its own subject.
  • gunbc compile over the probe entry: no name, type or effect errors. It refuses at rust emission on a pre-existing limitation in extdeps.gunbc (gunbc.WitnessBin.Run's shell stderr channels are not realizable for the rust target) which the closure reaches and which this PR does not touch; the *_wet entries run through the interpreter, as every other fleet entry does.

The build, executed through the modeled route

vllm_runtime_image_build_wet converged and wrote its receipt: local config digest sha256:b8b4ef35b17c2dd10c73f323819996f8928f0e5bd52f8980eedd9c634162461f, 21.8 GB, source 07b75534651a0dd584c6f3be75d8c62fb8426397, tag gunbc-vllm-dsv41-gb10:be277a5fc9425631 at the time of the run. vllm.__version__ inside it reads 0.1.dev1+g07b755346 — a self-report, which is evidence about the artifact and not proof of what was compiled. Nothing was pushed to any registry.

How the build actually ran, stated plainly. The first invocation of the CUDA compile was made by hand, before the modeled route existed, to discover whether the build succeeded at all on sm_121 and with which arguments — about 75 minutes, and the source of the configure-output evidence above. The modeled entry then ran with those layers warm, which is why its build leg returned in minutes rather than hours. That is a warm cache, not a shortcut: the modeled entry rendered its own argv from the declarations, executed every leg over the sealed transport, and read the digest back itself, and re-running it on a cold host would do the same work from scratch. It is recorded here because "the modeled route produced this digest" and "the modeled route paid for every layer in this digest" are different claims and only the first is true.

The digest is the identity; the tag is a function of the key, and the key function moved. Review finding 2 replaced a hand-rolled fold with std.artifact_store artifact_realization_digest, so the same inputs now mint a different key and therefore a different tag. The image on disk still carries the tag the old key produced. Re-tagging under the new key is one cached build invocation, and it will happen on whichever host the route decision names — not on srv5, which this module's own roster now refuses.

The build's own configure output confirms the arch gate by execution: -- CUDA target architectures: 12.1, -- Building SM12x NVFP4 for archs: 12.0f, -- Not building SM10x/11x NVFP4/MXFP4 as no compatible archs were found.

The probe, executed inside that digest on a GB10

docker run --rm --entrypoint python3 --gpus all, interpreter reporting compute capability 12.1. Seven questions were put and seven answers came back: five presences, one absence, one refusal.

The readings are no longer rows in this lane's module. They are rows in gunbc.spark.serving_runtime_capability_probe's single roster — keyed by the digest they were taken in and by the vendor-qualified device — beside every other probed image's, and the candidate row for this image says CandidateProbed, so the sweep's denominator includes it. The architecture answer derives from a full ArchitectureRegistryReading (host, date, instrument, all 383 names) rather than from a second hand-written membership claim.

capability reading
architecture-registered absent — 383 architectures registered, DeepseekV41ForCausalLM not among them
fp4-weight-kernels present — _C.cutlass_scaled_fp4_mm, _C.cutlass_scaled_mm_supports_fp4
fp4-weight-kernels-supported-here refused — the run that produced these rows FOUND the predicate and did not CALL it. The probe now calls it; this digest has not been re-probed, and the host it lives on is off limits to this lane. Recorded as a refusal, never as an absence: a question nobody asked is not evidence against the image
mla-kv-cache-layout-admitted present — admitted fp8, fp8_e4m3, fp8_ds_mla; rejected auto, bfloat16, nvfp4_ds_mla
flashinfer-sparse-mla-sm120-symbols present — all four demands, including _DECODE_DSV4_DISPATCH
csa2-compressor-kernels present
dspark-speculator present

Two prerequisites are outstanding, not one. The absence is the finding, and it is intended rather than a build defect: public vLLM at the lead commit does not register V4.1. The FP4 runtime predicate is the other, and it is a different kind of gap — the run found cutlass_scaled_mm_supports_fp4 and never called it, so its answer for this device is unknown rather than negative. The build obligation in gunbc.spark.serving_runtime_capability_probe states both, because a discharge that named only the registry defect would leave a required capability unasked behind it. It is a registry lookup joined to two source facts, not an inference from either. The class is in the tree at vllm/models/deepseek_v4_1/nvidia/vl_model.py; public main's registry.py maps no name to vllm.models.deepseek_v4_1, while DeepseekV4ForCausalLM maps to vllm.models.deepseek_v4 — and that sibling IS in the image's registry, which is what rules out an empty registry or a probe that never imported one. vLLM's own published deepseekv41-flash-0909 arm64 image was observed to carry the entry — read out of the registry.py in its own site-packages layer, no pull — and the distribution in that layer is stamped g179dd0fa9, an identifier the GitHub API answers No commit found for SHA about. Those are three readings. What produced the published image's bytes is not established by any of them: a setuptools-scm stamp is what a packager wrote, and a failed lookup is a fact about an identifier.

Two transport defects the executed route found

Both were fixed at their seam rather than routed around. docker image inspect --format {{.Id}} cannot cross the portable-word allowlist (braces), and the first version also treated the resulting refusal as "image absent" and rebuilt — the digest is now read with docker images --no-trunc --quiet, whose empty answer distinguishes "no such image" from "the query did not run". And a serving image's entrypoint swallowed the probe's argv (vllm: error: unrecognized arguments: .../v41_capability_probe.py), so the ephemeral run names its interpreter.

A third was found by rendering the generated probe before running it: the architecture capability was emitted through the generic reporter with empty symbol lists, which prints a vacuous =present line ahead of the real verdict. A reader taking the first match would have reported an unregistered architecture as registered — the strongest possible false positive, in the one capability this lane exists to establish. The generator no longer emits it and the reader now calls a contradictory pair UNREAD.

Where a build may run, as a derivation

No host is named in the build module. Source acquisition takes --arg host=<identity> and the two credential-bearing entries take SPARK_CONVERGE_TARGET; both admit it against a roster derived by subtraction: every Spark carrying a router binding, minus the members of the groups in spark_pair_serving_groups (where an engine actually serves), minus anyone llama_cpp_rpc_host_holds_undischarged_reservation answers for. Today that leaves srv9–srv12 and refuses srv5–srv8. The first cut of the subtraction excluded every fabric group rather than the active ones — a FabricGroup is a 400G cage, not a reservation — which left nothing admissible at all, and the witness caught it before anything ran.

Route A runs as a dispatch mode

spark_runtime_image_probe is a step inside the existing dispatch-only fleet-converge job, emitted through gunbc.fleet_converge_workflow and gunbc.ci_spec and regenerated through the generated-artifact gate — never hand-edited. The workflow declares five jobs and still declares five (build, fleet-converge, host-reset-return, dashboard-deploy, rlm-launch-deployment-receipt); the probe appears only as a dispatch option, a step id and an if-condition. It adds no job and no per-push cost. (An earlier revision of this section said six — that count included workflow_dispatch, which is a trigger, not a job. The before/after comparison was unaffected; the number was wrong.)

It runs there because the credential does: docker's socket on a Spark is root-owned, gunbc-automation is in no docker group, and the administrator credential is materialized inside that boundary and nowhere else.

Cold acquisition, executed

vllm_source_acquire_wet --arg host=srv9, over the modeled route as gunbc-automation, exit 0:

host=srv9 endpoint=192.168.1.236 principal=gunbc-automation
root=/home/gunbc-automation/gunbc-vllm-build  clone_url=https://github.com/vllm-project/vllm
source revision=07b75534651a0dd584c6f3be75d8c62fb8426397 already_present=false clean=true

already_present=false is the load-bearing part: this is the first execution of the clone leg in this lane. A side-chat review found it broken by reading — VllmSourceRevision.repository is github.com/vllm-project/vllm, an identity, and git reads it as a relative path (fatal: repository ... does not exist, reproduced) — and the earlier modeled runs never reached it because the exploratory build had already left a tree behind. The run above exercised the clone, the shallow fetch of the pinned commit, the detached checkout, the HEAD readback and the new dirty-tree refusal in one pass, on a host that had none of it.

It also forced out two latent literals of the same class as the build host: the build root sat under the operator's home while every leg authenticates as the managed executor, and the ssh principal was the operator bootstrap login — an account that exists to take a password on first contact and refuses key auth by design, so it only ever worked where a human had already installed a key. Both are now derived from gunbc.spark.managed_access_bootstrap.

The dirty check sees the ignored set, proved by a planted file

git status --porcelain omits ignored files; a docker build context carries everything .dockerignore does not exclude, and at the pin .gitignore has **/generated/** while .dockerignore does not. Green–red–green on srv9:

clean tree                          -> exit 0, clean=true
plant vllm/generated/__init__.py
  git status --porcelain            -> (empty)               <- the defect
  git status --porcelain --ignored  -> !! vllm/generated/
  modeled entry                     -> REFUSED at source-clean
remove it                           -> exit 0, clean=true

Reachability, asked the same way

spark_build_host_reachability_wet walks that derived roster and asks each host one question — its own short hostname — over the same sealed transport. Executed: all four admissible Sparks (srv9–srv12, at 192.168.1.236–.239) refuse the fleet key with Permission denied (publickey,password). Host-key verification passed on all four — strict checking against the materialized anchor got as far as authentication — so the boxes are up, reachable at their modeled endpoints, and presenting enrolled keys; what is missing is authorization for this principal. That is a provisioning fact about four hosts, taken with one command each and nothing installed.

The reading is joined, not merely captured: a Spark answers hostname -s with its vendor label (spark-a3ee), never with its fleet identity (srv5), so the answer is compared against the spark_hostname the lane observations record for that identity — a reading taken earlier against the box's own answer now. A mismatch and an unjoinable host are their own arms, and the entry succeeds only when every admissible host answered, so the run where all four refused the key exits non-zero rather than writing a receipt and returning success.

The outcome type keeps five answers apart that a ping would fuse: answered (carrying the name the host reported, so an endpoint answering as the wrong machine is a fleet-data defect rather than a success), unreachable with its cause, and unresolved when a host has no management-LAN endpoint at all.

An operational fact, recorded because it was a near miss

spark-a3ee is srv5 — the Spark serving pair member — and the brief named the box by its vendor label in one sentence and the pair by its fleet identity in another. The build ran ~75 minutes there and took host free memory to about 1 GiB at its peak, on a unified-memory host whose serving engine shares that pool. The gunbc-spark-pair container read Up 2 days across the whole window and its worker unit stayed active, so nothing restarted — but this should not be repeated, and the manager has ruled no further builds or heavy work on srv5 or srv6.

What surfaced it was the model, not a person: v41_build_host spelled the vendor label, fleet_probe_endpoint_for resolves fleet identities, and the first modeled leg refused with a typed cause before touching anything. The row now names operator_host_srv5 and a witness asserts the build host resolves to an endpoint other than its own name. That resolution helper returns its input when no binding matches rather than refusing — an absorbing fallback upstream of this lane, not fixed here, and named in the witness that compensates for it.

Still open

The readings live in this lane's module with a 🟡 dissolve-on to move to gunbc.spark.serving_runtime_capability_probe's roster when #11016 lands; one image's readings belong beside every other image's. The capability labels and the architecture class name are likewise spelled locally only until #11016 and #11007 land.

Not done and explicitly not inferred: the whole-model KV bytes-per-token derivation. An earlier message from this lane carried 656 bytes; that is Kimi K3's fp8_ds_mla entry stride, not V4.1's, and it is withdrawn — V4.1 passes state_content_bytes=584 with alignment=576 on the page. The roster module carries the per-layer facts and the formula and deliberately stops short of the sum; completing it is a follow-up assigned to this lane, for crisp-crane-661 to consume.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE

Brian Searls and others added 3 commits September 11, 2026 03:31
…and read its capabilities from upstream rather than from prose

The runtime sweep (#11016) found no published GB10 image that registers
DeepseekV41ForCausalLM on sm_121 and left a build obligation. This is that
build, modeled: upstream's own aarch64 release recipe at
07b75534651a0dd584c6f3be75d8c62fb8426397 with one field overridden, an image
tag derived from a content hash over the build inputs, and every leg executed
through the portable-word-sealed fleet ssh route rather than a hand-run script.

- extdeps.vllm.source_build carries upstream's container build recipe at that
  revision, the aarch64 release invocation, and CUDA_SUPPORTED_ARCHS.
- extdeps.vllm.deepseek_v4_1_sm12 carries what the V4.1 SM12 path demands,
  read out of the tree: the FlashInfer SM120 symbols, the registered torch
  operators with their library namespaces, the two arch-gated CMake source
  blocks, and which KV layouts the backend admits per device major.
- gunbc.spark.v41_runtime_image_build converges the source at the revision and
  the image at its key-derived tag.
- gunbc.spark.v41_runtime_image_probe generates its probe from the roster and
  runs it inside the built image; a capability with no VERDICT line reads
  UNREAD, never absent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
…rection

Nine witnesses, all executed: the fleet recipe's single divergence from
upstream, that neither upstream recipe targets 12.1 while upstream still
accepts it, that the build key moves with the arch list and not with
parallelism, the rendered build argv, that the probe script is folded out of
the roster, that the layout block calls the admission rule and asks about the
rejected layout, that a capability with no VERDICT line reads UNREAD, that the
DS-MLA nvfp4 kernels are listed only in the SM100 block, and that the FP4-KV
roster carries the registered operators rather than the three names that do
not exist at this revision.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
…e it

The mutation control showed the arch-list witness could not see its own
subject: with v41_gb10_torch_cuda_arch_list mutated to 12.0, two of nine
witnesses went red and the one whose whole point is "the build targets the
architecture the fleet has" stayed green, because it only asserted that the
fleet list differed from upstream's. It now pins 12.1, grounded in the compute
capability GB10 reports and which the probe re-derives on every run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot gunbai-bot Bot changed the title DSV41-4 runtime build: modeled GB10 (sm_121) vLLM image at 07b75534 carrying DeepseekV41ForCausalLM + required kernels, probed in-image A modeled, content-keyed GB10 sm_121 vLLM build at 07b75534 -- and the two obligation symbols that do not exist Sep 11, 2026
Brian Searls and others added 2 commits September 11, 2026 04:26
Rendering the generated probe before running it caught the strongest possible
false positive: the architecture capability was emitted through the generic
reporter with empty symbol lists, which prints a vacuous `=present` line (a
conjunction over nothing is true) ahead of the real verdict, so a reader taking
the first match would have reported an unregistered architecture as registered
-- in the one capability this whole lane exists to establish.

The generator no longer emits the vacuous line, and the reader now reads both
lines and calls disagreement UNREAD. The wall stays after the producer is
fixed, because it is the producer that can regress.

Ten witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
…y that explains the one absence

The build converged through the modeled route and the probe ran inside its
digest on a GB10 at compute capability 12.1. Five of six capabilities are
present -- the FP4 weight kernels, the admitted KV layouts, CSA2, DSpark, and
all four FlashInfer SM120 demands. The sixth is absent: the image built from
public main at 07b75534 registers 383 architectures and DeepseekV41ForCausalLM
is not among them, although the class is in the tree.

Two transport defects were found by execution and fixed at their seam rather
than worked around: `docker image inspect --format {{.Id}}` cannot cross the
portable-word allowlist (braces), so the digest is read with `docker images
--no-trunc --quiet`, whose empty answer distinguishes "no such image" from "the
query did not run"; and a serving image's entrypoint swallows a probe's argv, so
the ephemeral run names its interpreter.

extdeps.vllm.deepseek_v4_1_flash_recipe carries what the publisher says, as
publisher figures with their derivations: the 511 GB checkpoint breakdown, the
schema-derived 614 GB minimum, the verified-hardware roster that contains no
GB10, the resolved digests of deepseekv41-flash-0909 (the documented tag 404s),
and the two registry entries its arm64 image carries -- read out of its own
registry.py -- from a distribution stamped g179dd0fa9, a commit the public
repository does not have.

Thirteen witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review September 11, 2026 05:05
Brian Searls and others added 2 commits September 11, 2026 05:23
…ct_store's, and our readings leave extdeps

Four findings, all of them shape rather than fact.

1. No host is named in the build module. An earlier revision carried a literal,
   and the literal was a Spark serving pair member -- policy standing in a
   value. The entries take `--arg host=<identity>` and admit it against a
   DERIVED roster: every Spark with a router binding, minus the members of the
   groups that are actually serving, minus anyone holding an undischarged
   llama.cpp RPC peer reservation. The first cut of that subtraction excluded
   every fabric group rather than the active ones, which left nothing
   admissible -- a FabricGroup is a cage, not a reservation -- and the witness
   caught it.

2. The build key is minted by std.artifact_store artifact_realization_digest
   over named realization inputs, replacing a hand-rolled fold that was a
   second spelling of it. The module is renamed generic
   (gunbc.spark.vllm_runtime_image_build) with the V4.1 recipe as one input
   row. Where it does NOT route through std.materialization_provider or
   std.realization, the module says so and why: ArtifactRequest is a closed
   coproduct over three compiler requests, and widening it for a foreign
   toolchain's container build would be a layer inversion.

3. Statements this repository checked -- the 404 on the documented tag, the
   commit the public repository does not have, the config-blob readings, the
   registry.py entries -- move to gunbc.spark.v41_published_image_observation,
   each carrying its instrument and date. extdeps.vllm.deepseek_v4_1_flash_recipe
   keeps what the page publishes.

4. Numbers are typed: ByteSize for the KV figures, Nat for counts and job
   widths, and torch_cuda_arch_list is a List whose membership is membership
   rather than a substring search. The prose formula row is now an annotation.

Fourteen witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
…dent sources

Review 63487, both findings, and they were the same defect seen twice.

The readings were sentences in an `evidence: NonEmptyStr` field -- instrument
output transcribed into prose beside the instrument that produced it (DESIGN
§6) -- and the witness asserted `string_contains` over those same sentences,
which is `measure() == measure()` and cannot go red for any reason that
matters (DESIGN §5). The registry count was the purest case: a number
summarising a list the row did not hold, checkable only against itself.

The rows now carry the outcome in the coproduct the reader already uses and
the measured values in their own typed fields. The count is gone, replaced by
the membership fact that actually decides the lane, with the sibling
architecture recorded beside it so the absence is discriminating rather than
merely negative. The rationale moved to annotations, where §4c puts prose.

The witness joins the in-image reading against an INDEPENDENT source: what
upstream's own files say at the pinned revision, now declared in
extdeps.vllm.source_build -- that no registry entry maps any name to
vllm.models.deepseek_v4_1 while DeepseekV4ForCausalLM maps to
vllm.models.deepseek_v4 -- and what extdeps.vllm.deepseek_v4_1_sm12 reads of
the admission rule. Source and execution are required to agree, in both
directions, at set grain.

Mutation control: flipping either side of the join (adding nvfp4_ds_mla to the
observed admitted set; flipping the source's registry fact) turns exactly the
two join witnesses red and leaves the other fourteen green. 16 of 16 green
unmutated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Both findings from review 63487 are right, and they were the same defect seen twice. Fixed in c7e88cecda, not argued with.

1. Transcribed instrument output. Correct, and the registry count was the purest case: 383 summarised a list the row did not hold, so it could only ever be compared against itself. The evidence: NonEmptyStr sentences are gone. A reading now carries its outcome in V41CapabilityReading — the coproduct the reader already uses — and its measured values in their own typed fields: v41_probed_admitted_kv_layouts, v41_probed_rejected_kv_layouts, v41_probed_architecture_present, and the sibling architecture beside it so the absence is discriminating rather than merely negative. The rationale moved to annotations, which is where §4c puts prose.

On the §6 rule itself: this lane's instrument cannot re-derive on demand — it needs a GB10 and a 21.8 GB image that is not in any registry — so the rows stay a receipt rather than becoming a call. What changed is that the receipt is now checkable, which is the property the rule is protecting.

2. string_contains over prose this PR authored. Correct, and the fix is not a better pattern — it is a different oracle. The witness now joins the in-image reading against an independent source: what upstream's own files say at the pinned revision. extdeps.vllm.source_build gained vllm_07b75534_registry_maps_deepseek_v4_1 and vllm_07b75534_registered_deepseek_v4_architectures, read from registry.py; extdeps.vllm.deepseek_v4_1_sm12 already carried the admission rule read from flashinfer_sparse.py. Two differently-obtained answers to one question are required to agree, in both directions, at set grain:

  • the_in_image_layout_admission_agrees_with_the_source_at_the_pinned_revision
  • the_in_image_registry_and_the_source_registry_agree_that_v41_is_unmapped

Mutation control for exactly that claim, since "it joins two sources" is itself a claim that can be false: adding nvfp4_ds_mla to the observed admitted set and flipping the source's registry fact turns those two witnesses red and leaves the other fourteen green. Unmutated, 16 of 16 pass.

Also in this push, from the manager's review: the build host is no longer a literal (it is --arg host=<identity>, admitted against a roster derived by subtracting serving-group members and RPC-reserved members from the modeled Spark fleet); the build key is minted by std.artifact_store artifact_realization_digest instead of a hand-rolled fold, with a stated §3b divergence for std.materialization_provider and std.realization; readings this repository took moved out of extdeps.vllm.* into gunbc.spark.v41_published_image_observation, each with its instrument and date.

— sent from clever-bat-173

Brian Searls and others added 3 commits September 11, 2026 05:39
…aving them dangling

Several rows in the recipe and observation modules have no reader in this
change. DSV41-2 (#11013) states that it will import these modules rather than
fork vram_minimum_gb or the admitted-layout set, and it cannot import a module
that is not on the tree -- so the trigger is this change landing. Said in the
modules, because an unstated absence of consumers is the §3c red and a named
later consumer with its trigger is not.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
… at all

Admissibility says a host is one this lane MAY use. It says nothing about
whether the fleet key is installed on it or whether anything answers at its
endpoint, and those are different failures with different remedies --
discovering the second in the middle of a build is how an hour gets spent
before the first leg refuses.

spark_build_host_reachability_wet asks the whole admissible roster one
question, the remote host's own short hostname, over the same sealed transport
every other leg uses. Its answer is a join a caller needs rather than a ping:
an endpoint resolved from a fleet identity ought to answer with that identity's
machine, so a reachable box reporting a different name is a fleet-data defect
rather than a reachable host.

Executed: all four admissible Sparks -- srv9 through srv12, at .236 through
.239 -- refuse the fleet key with `Permission denied (publickey,password)`.
The host keys verified (strict checking against the materialized anchor got as
far as authentication), so the boxes are up and enrolled and the key is simply
not authorized for this principal on any of them. That is a provisioning fact
about four hosts, taken with one command each and nothing installed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

All three findings from review 63553 are correct and are fixed in 1f656d6de0. Verified against the code, not taken on report.

1. spark_build_host_reachability_wet did not stop the line. Right, and it is the worst case of it: the run that actually happened had every admissible host refuse the fleet key, and it exited zero with the typed diagnostics written to the receipt and then discarded by the exit path. It now returns ExitSuccess only when every admissible host answered, and the failure reason carries the body naming the ones that did not. spark_host_answered is the predicate, and it is false for all four non-answering arms.

2. reported_hostname was captured and compared to nothing while the annotation claimed the comparison as the point of the probe. The join is now performed — and against the right name, which is the part worth stating: a Spark answers hostname -s with its vendor label (spark-a3ee), never with its fleet identity (srv5), so a join written against the identity would call every host in the fleet a defect. The reading is joined to the spark_hostname that gunbc.spark.fabric_switch_observed's lane observations record for that identity — a lane reading taken earlier against the box's own answer now. SparkHostIdentityMismatch and SparkHostIdentityUnjoinable are their own arms rather than passes.

3. Two self-referential oracles. length(rows) == 7 is deleted; the surrounding fold over instrument-and-date was already doing the work at identity grain, and the count was exactly the change detector §5 describes. v41_flash_vram_minimum_gb == 614 is replaced by a join between two figures the publisher's page states and the relation it states between them: the minimum is the checkpoint total times the schema's 1.2 headroom factor, so the witness now asserts v41_flash_vram_minimum_gb == v41_flash_headroom_gb(total_gb: v41_flash_checkpoint_gb) — 511 × 1.2 = 613.2, rounded up to the published 614. A mis-transcription of either number now disagrees.

Mutation control on the two new walls, since "the join is performed" and "the line stops" are both claims that can be false: flipping spark_host_answered to accept an unreachable host, and pointing the hostname lookup at the fleet identity instead of the lane's label, turns exactly only_a_joined_answer_counts_as_reachable and the_reachability_join_reads_the_vendor_label_and_refuses_the_identity red and leaves the other sixteen green. Unmutated, 18 of 18 pass.

One housekeeping note: the commit on the branch reads wip: review 63553 fixes because session auto-push landed it before I could amend the message, and I would rather leave a poor message than force-push over a head a review may be running against. The trees are identical and this repo squash-merges, so the PR title and body are what land.

— sent from clever-bat-173

…e, and narrowed claims

Five blocking findings, each verified against the code before acting.

COLD ACQUISITION WAS BROKEN AND HAD NEVER RUN. `VllmSourceRevision.repository`
is `github.com/vllm-project/vllm` -- an identity, not a locator -- and git
reads it as a relative path. Reproduced: `git clone --depth 1
github.com/vllm-project/vllm x` in an empty directory answers `fatal:
repository ... does not exist`. The modeled run never reached it because the
tree was already present, which is specification-without-execution exactly.
`vllm_clone_url` derives the https locator from the identity.

PROVENANCE WAS ASSERTED FROM THE REQUEST. `converge_vllm_source` checked HEAD
and not the working tree, so a modified context would be stamped with an
unmodified revision; it now reads `git status --porcelain` back and refuses on
any output. `VllmImageIdentity` filled `built_from` from the requested recipe
for an image merely FOUND under the expected tag; the field is now
`requested_from` beside a `provenance` arm that says BuiltByThisRun or
AdoptedUnderExpectedTag with source equality unestablished. And the key is over
the REQUEST: two of its inputs are mutable registry tags, said in the module
with the trigger that would make it a content identity end to end.

PROBE INTEGRITY. The helpers caught every exception and returned False, so a
broken interpreter manufactured evidence against the image; they now return
found/missing/errored, the absence arm is narrowed to ModuleNotFoundError and
AttributeError, and an errored check suppresses the capability's VERDICT line
so the reader reads UNREAD. The reader parses lines and looks a capability up
by key instead of searching the output -- the reviewer's own counterexample,
`NOT_VERDICT fp4-weight-kernels=present_garbage`, is a witness.

SCOPE. `cutlass_scaled_mm_supports_fp4` is a PREDICATE about this device and
was only being found in the operator table; it is now called with the
capability the interpreter reports, as its own row. The FlashInfer capability
is renamed to `-symbols` because that is what it measures; the scoped question
needs this checkpoint's head count and top-k and is a declared frontier. The
recorded reading for FP4 support is UNREAD -- the run that produced these rows
never asked it -- and absent-versus-unread are now separate rosters.

NARROWED CLAIMS. A setuptools-scm version is a self-report and a failed commit
lookup is a fact about an identifier; together they do not establish which
source produced the bytes. The readings say what was read, source equality
stays unestablished, and "the entire difference" is gone.

23 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Operator-requested side-chat review (ChatGPT, relayed through the manager) raised five blocking findings. All verified against the code first, all fixed in 94285fc3bb. 23 witnesses green.

Cold acquisition was broken and had never executed. VllmSourceRevision.repository is github.com/vllm-project/vllm — an identity, not a locator — and git reads it as a relative path. Reproduced in an empty directory: fatal: repository 'github.com/vllm-project/vllm' does not exist. The modeled run never reached the clone because the source tree was already present from the exploratory build, so nothing caught it. vllm_clone_url derives the https locator from the identity, and a witness asserts the URL carries a scheme while the identity does not.

Provenance was asserted from the request. Three separate fixes: the source convergence now reads git status --porcelain back and refuses on any output, so a dirty context cannot produce an image stamped with a revision it was not built from; VllmImageIdentity.built_from is renamed requested_from and sits beside a provenance arm — BuiltByThisRun versus AdoptedUnderExpectedTag, the latter saying source equality is unestablished — because an image merely found under the derived tag was being returned as though this lane built it; and the two base-image inputs are mutable registry tags, which the module now says, with the trigger that would make the key a content identity end to end.

Probe integrity. The helpers caught every exception and returned False, so a broken interpreter manufactured evidence against the image. They now return found / missing / errored, the absence arm is narrowed to ModuleNotFoundError and AttributeError, and an errored check suppresses that capability's VERDICT line so the reader reads UNREAD. The substring half was already fixed on the head this review read; the reviewer's own counterexample, NOT_VERDICT fp4-weight-kernels=present_garbage, is now a witness and reads UNREAD on both counts.

What that does not change: no recorded reading depends on the arm that was wrong. Every row except the architecture one is a presence, which exception-as-False cannot manufacture, and the architecture row is membership in a list the same run printed in full (383 names), not an exception-prone lookup.

Symbol existence was promoted into support. cutlass_scaled_mm_supports_fp4 is a predicate about this device and was only being found in the operator table; it is now called, with the capability the interpreter itself reports, as its own capability row — and the recorded reading for it is UNREAD, because the run that produced these rows never asked it. The FlashInfer capability is renamed flashinfer-sparse-mla-sm120-symbols, since symbol inventory is what it measures; the scoped (num_q_heads, top_k) question needs this checkpoint's padded head count and SWA specialization width, which this lane does not have modeled, so it is a declared frontier naming what closes it. Absent and unread are now separate rosters, because an unasked question was reading as a capability nobody has.

Published-image claims narrowed. A setuptools-scm version is what the packager stamped and a failed commit lookup is a fact about an identifier; together they do not establish which source produced the bytes. Both readings now state what was read, bound to the layer and the API that read it, and source equality stays unestablished. "The entire difference" is gone — two registry files differing in two entries is not a diff of two images.

Still unexercised, stated rather than implied: the review asks to exercise cold acquisition and I have only exercised the argument — the failing and succeeding clone forms, locally. Running the fixed path means a shallow clone into a fresh directory on a Spark, which is a different thing from the image pull currently on hold; it is asked and pending. Until it runs, the clone leg is correct by reading and not by execution.

— sent from clever-bat-173

Brian Searls and others added 2 commits September 11, 2026 07:34
…oor caught

The clone leg has now RUN. vllm_source_acquire_wet on srv9, over the modeled
route as gunbc-automation: root /home/gunbc-automation/gunbc-vllm-build,
clone_url https://github.com/vllm-project/vllm, already_present=false,
revision 07b75534651a0dd584c6f3be75d8c62fb8426397, clean=true, exit 0. That is
the first execution of the path the side-chat review found broken, and it
exercises the clone, the shallow fetch, the checkout, the HEAD readback and the
new dirty-tree check in one run.

It also needed the build root to stop being a literal under the OPERATOR's
home, since every leg authenticates as the managed executor: a path belonging
to one account written into work performed by another is a permission error at
the far side that reads as a broken build. The root is derived from
spark_managed_principal_home, and the probe's script path with it.

Three annotation placements refused at the floor and not in the local witness
run: two blocks appended at end-of-file with no declaration following them, and
one sitting inside a declaration body. §4c models annotations at module-item
grain only; all three now precede the declaration they describe.

23 witnesses green, including the build argv asserting the DERIVED Dockerfile
path and that no operator home appears in it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
… not an absence, and three claims come back in line

Three findings, verified before acting.

THE DIRTY CHECK COULD NOT SEE HALF THE CONTEXT. `git status --porcelain` omits
ignored files; a docker build context contains everything .dockerignore does
not exclude, and those are different sets. Measured at the pin: .gitignore
carries `**/generated/**` and .dockerignore does not. Executed control on srv9,
green-red-green -- a planted vllm/generated/__init__.py is INVISIBLE to the
plain status, shows as `!! vllm/generated/` under --ignored, and the modeled
entry now refuses at source-clean naming it; removing it returns exit 0 and
clean=true. (The reviewer's example file does not exist at this revision; the
mechanism they described does, which is what the control establishes.)

A NESTED IMPORT FAILURE WAS READING AS AN ABSENCE. A module that EXISTS raises
ModuleNotFoundError when its own import of an unrelated dependency fails, so
catching the type and reporting MISSING turned "this image lacks a dependency
of the thing I asked about" into "this image lacks the thing I asked about" --
an absence manufactured by the instrument, at a finer grain than the arm that
was already corrected once. `ModuleNotFoundError.name` says which module was
not found: MISSING only when that name is the target or an ancestor of it,
ERRORED otherwise, which suppresses the verdict and reads UNREAD.

THREE CLAIMS OUTRAN THEIR READINGS. A witness named for source provenance now
says what it checks -- the image registers the architecture and its stamped
identifier is not a public commit. The readings annotation said the class "is
unreachable"; it now separates the registry LOOKUP from the two SOURCE rows the
witness joins it to, and says none of the five presences is a statement that a
kernel is correct or exercised. And the verified-hardware note claimed the
published image "compiles for sm_121" from its TORCH_CUDA_ARCH_LIST -- which is
what a build was TOLD to target, recorded in a config, while upstream's build
prints `Not building ...` and exits zero when a block finds no compatible arch.
Requested and compiled are different facts; only a probe inside the image
settles the second, and this lane has not run one there.

Also in this push: the two GB figures are std.measure Gigabyte rather than bare
Nats named `_gb`, with the published minimum rendered from the Measure instead
of forked as a second literal; and the published-image witness joins typed
lookup outcomes instead of grepping prose this change authored.

24 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Two review rounds landed together — the cursor/auto dashboard review (review 63642) and an operator-requested side-chat, three findings each side. All verified against the code first; all fixed in b7282116a6. 24 witnesses green.

The dirty check could not see half the build context

git status --porcelain omits ignored files. A docker build context contains everything .dockerignore does not exclude — and those are different sets. Measured at the pin: .gitignore carries **/generated/**, .dockerignore does not. So a file under any generated/ directory is invisible to the check and shipped to the daemon.

Executed control on srv9, green–red–green:

clean tree                      -> exit 0, clean=true
plant vllm/generated/__init__.py
  git status --porcelain        -> (empty)          <- the defect, reproduced
  git status --porcelain --ignored -> !! vllm/generated/
  modeled entry                 -> source REFUSED step=source-clean ... !! vllm/generated/
remove it                       -> exit 0, clean=true

The reviewer's specific example file does not exist at this revision; the mechanism they described does, and the control above is what establishes it.

A nested import failure was reading as an absence

A module that exists raises ModuleNotFoundError when its own import of an unrelated dependency fails, so catching the type and reporting MISSING turned "this image lacks a dependency of the thing I asked about" into "this image lacks the thing I asked about" — an absence manufactured by the instrument, at a finer grain than the arm corrected in the previous round. ModuleNotFoundError.name carries which module was not found: MISSING only when that name is the target or one of its ancestors, ERRORED otherwise, which suppresses the verdict line so the reading is UNREAD.

Three claims outran their readings

  • The witness named for source provenance now says what it checks: the image registers the architecture, and its stamped identifier is not a public commit.
  • The readings annotation said the class "is unreachable". It now separates the registry lookup from the two source rows the witness joins it to, and says plainly that none of the five presences is a statement that a kernel is correct, fast, or exercised.
  • The verified-hardware note claimed the published image "compiles for sm_121" from its TORCH_CUDA_ARCH_LIST. That is what a build was told to target, recorded in a config — and upstream's own build prints Not building ... and exits zero when an architecture block finds no compatible arch. Requested and compiled are different facts; only a probe inside the image settles the second, and this lane has not run one there.

From review 63642

Both findings correct. The two GB figures are std.measure Gigabyte rather than bare Nats named _gb, and the published minimum is now rendered from the Measure instead of forked as a second "614" literal that could drift. And the published-image witness joins typed lookup outcomes (PublicCommitAbsent, RegistryTagAbsent, and the stamped identifier as a field of the distribution name) instead of grepping prose this change authored — the same change-detector the capability receipts retired a round earlier, which is exactly how the reviewer framed it.

— sent from clever-bat-173

gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
…lookup rows.

The published candidate now takes v41_published_distribution_name and PublicCommitAbsent instead of concatenating observation prose. Bare _gb recipe names are gone on that head.

Co-authored-by: Cursor <cursoragent@cursor.com>
…actured build key and two stale claims go

FIVE FINDINGS ACROSS TWO ROUNDS, one push.

`--untracked-files=all`, because `--ignored` was only half. `status` honours
`status.showUntrackedFiles`, so a repository configured to `no` hides an
ordinary untracked file that docker ships anyway -- reproduced in an isolated
repository, where `--porcelain --ignored` returned EMPTY for exactly such a
file. Naming the mode makes the answer a property of the command rather than of
whatever configuration a host carries.

THE STAGED-FILE PROBE ROUTE IS DELETED, not annotated as gone while surviving.
An earlier note claimed "everything that existed only to get it there" was
gone; the script path, its mode, the bind mount, the ephemeral-run builder, the
file convergence and the key-route entry were all still declared and still
reached, so two mechanisms answered "run this probe inside this image". §3
calls a surviving X an attractor and the remedy delete-first. What remains is
the privileged route, which is the only one that can reach docker on a Spark.

ADOPTION NO LONGER MANUFACTURES A BUILD REQUEST. A pull-only operation was
arriving with a recipe and a build key attached, and the receipt printed that
fallback key beside a published digest. AdoptedUnderExpectedTag made the claim
weak, which was true and beside the point -- the defect was inventing a build
request where there was none. The probe outcome carries a reference and the
digest the daemon reported; vllm_adopted_image_identity is gone.

THE PYTHON PROGRAM CARRIES A DISSOLVE-ON naming what would retire it:
extdeps.languages.python is a TARGET MODEL the emitter consumes to translate
declarations this repository owns, and this content is reflection over symbols
we deliberately do not own, so there is nothing in .dag to emit from. It
dissolves when a modeled foreign-reflection surface exists.

TWO CLAIMS CORRECTED. The witness comment no longer concludes the published
image is built from a revision the public repository lacks -- a version stamp
and a failed lookup cannot establish that. The PR body no longer says no sudo
appears anywhere, which the privileged route makes false.

ROUTE A IS A DISPATCH MODE. spark_runtime_image_probe is a step inside the
existing dispatch-only fleet job, emitted through gunbc.fleet_converge_workflow
and gunbc.ci_spec and regenerated -- never hand-edited. Job count is unchanged
at six, so it adds no standing claim on a runner. The emitted step materializes
the Spark administrator credential from Secret Manager inside itself and all
eight hosts have a case arm, srv9 included.

AND THE DISPATCH MENU STOPS LYING ABOUT THE ROSTER. Its host description read
"srv5..srv11" while the roster it describes carries srv5 through srv12, so a
dispatcher would have believed srv12 illegal while resolution accepted it. The
description is now joined from the roster.

24 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Five findings across two rounds — an operator-requested side-chat and the dashboard review (review 63676) — fixed in 62ed29fa84. 24 witnesses green. Each verified against the code before acting.

--untracked-files=all, because --ignored was only half. git status honours status.showUntrackedFiles. Reproduced in an isolated repository at no: --porcelain --ignored returns empty for a plain untracked file that docker ships anyway; --untracked-files=all shows it. Naming the mode makes the answer a property of the command rather than of whatever configuration a host happens to carry — which is exactly why it cannot be left to one.

The staged-file probe route is deleted, not annotated as gone. The reviewer was right that the note claimed "everything that existed only to get it there" was gone while v41_probe_script_path, _mode, _mounts, _command, converge_v41_probe_script, v41_probe_image and the key-route entry all survived and were reached — two mechanisms answering "run this probe inside this image". §3 names a surviving X an attractor and the remedy delete-first. Only the privileged route remains, which is the only one that can reach docker on a Spark at all.

Adoption no longer manufactures a build request. A pull-only operation was arriving with v41_gb10_recipe()'s recipe and build key attached, and the receipt printed that fallback key beside a published digest. AdoptedUnderExpectedTag made the claim weak, which was true and beside the point: the defect was inventing a build request where there was none. V41ProbeRead now carries a reference and the digest the daemon reported; vllm_adopted_image_identity is gone.

The generated Python program carries a 🟡 dissolve-on naming what would retire it. extdeps.languages.python is a target model — keywords, container templates, method spellings — that the compiler's generic emitter consumes to translate declarations this repository owns. The probe's content is reflection over a foreign runtime's import table and operator registry, symbols we deliberately do not own, so there is nothing in .dag to emit from; routing it through that emitter today would mean first minting declarations for exactly the names whose foreignness is the point. It dissolves when a modeled foreign-reflection surface exists. The interim shape has precedent in gunbc.instruments.emit_host_fixtures, which carries Python, Go and TypeScript program text as declared strings for the same reason.

Two claims corrected. The witness comment no longer concludes the published image "is built from a revision the public repository does not have" — a setuptools-scm stamp is a self-report and a failed lookup is a fact about an identifier. And the PR body no longer says "no sudo appears anywhere", which the privileged route makes false.

Route A is a dispatch mode, verified against the emitted file

spark_runtime_image_probe, emitted through gunbc.fleet_converge_workflow and gunbc.ci_spec and regenerated through the generated-artifact gate — no hand-edited YAML. Job count unchanged at six; the probe appears only as a dispatch option, a step id and an if-condition, so it adds no job and no per-push cost. The emitted step materializes the Spark administrator credential from Secret Manager inside itself, and the target→secret case covers all eight hosts, srv9 included.

And the dispatch menu stopped lying about its roster: the host description read srv5..srv11 while the administrator roster — what spark_converge_target_selection actually resolves against — carries srv12. A dispatcher would have believed srv12 illegal while resolution accepted it. The description is now joined from the roster rather than the number corrected.

— sent from clever-bat-173

gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
… not a compiled-kernel fact

Side-chat finding on #11013: TORCH_CUDA_ARCH_LIST records requested targets; kernel presence
is established only by #11022's in-image probe. Also: the image was built (route B) and not adopted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D2AF1pri3WJkug5AtCYLGF
…nd the header stops claiming they do not need it

TWO FINDINGS, AND THEY WERE THE SAME CONTRADICTION SEEN FROM TWO SIDES.

This PR carried two incompatible answers to one question about the same fleet.
The probe module recorded, as its measured finding, that docker's socket on a
Spark is root-owned and that gunbc-automation is in no docker group on any of
them. The build module's header asserted, as a measured fact, that no sudo
appears in it because the build reaches docker through the operator's docker
group membership. Both halves of that were wrong together: the legs
authenticate as the MANAGED EXECUTOR rather than the operator, and that account
cannot reach the daemon -- so converge_vllm_image's `docker images` and `docker
build` legs could not have run at all.

They did run, once, and that is the part worth recording rather than smoothing
over: srv5 carries a hand-installed key for the human briansrls AND that account
in the docker group, which no modeled route produces. The fallback image exists
because of provisioning drift standing in for a mechanism nobody had.

So the docker legs now bind to gunbc.spark.model_snapshot_materialize
spark_remote_run -- one route to that daemon, the same one the probe uses --
while the git legs keep the key session, which needs no root. The header says
that, and says what it used to say and why it was wrong.

THE BUILD ENTRY MOVES WITH ITS LEGS. Needing the administrator credential means
needing the fleet-converge boundary, so `--arg host=` is gone and the entry
reads SPARK_CONVERGE_TARGET like the probe. It carries a dissolve-on for what is
NOT settled: a cold build took about 75 minutes and the spark step timeout is
60, so whether a build fits in that boundary is a job-level decision this lane
does not get to make.

AND EVERY ENTRY NOW NAMES ITS INVOCATION. Three wet entries have no in-tree
caller, which is the shape of an actuator only if the invocation is stated:
the source acquisition and the reachability probe are operator-invoked through
the CLI and have both been executed that way against srv9; the build entry's
dispatch is owed and is recorded as owed.

24 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Two rounds again — an operator-requested side-chat on 62ed29fa84 and review 63726 — and their findings turned out to be the same contradiction seen from two sides. Fixed in c2ed5b408c. 24 witnesses green.

The PR carried two incompatible answers to one question about the same fleet

The probe module recorded, as its measured finding, that docker's socket on a Spark is root-owned and gunbc-automation is in no docker group on any of them. The build module's header asserted, as a measured fact, that no sudo appears in it because the build reaches docker through the operator's docker group membership. Both halves of that were wrong together: the legs authenticate as the managed executor, not the operator, and that account cannot reach the daemon — so converge_vllm_image's docker images and docker build legs could not have run at all.

They did run, once. srv5 carries a hand-installed key for the human briansrls and that account in the docker group — provisioning drift no modeled route produces, standing in for a mechanism nobody had. The fallback image exists because of it, and that is now recorded in the module rather than smoothed over.

So the docker legs bind to gunbc.spark.model_snapshot_materialize spark_remote_run — one route to that daemon, the same one the probe uses — while the git legs keep the key session, which needs no root. It is a transport swap, so I took that arm of the ruling rather than declaring it unresolved.

The build entry moved with its legs. Needing the administrator credential means needing the fleet-converge boundary, so --arg host= is gone and it reads SPARK_CONVERGE_TARGET like the probe. What is not settled is carried as a 🟡 dissolve-on beside it: a cold build took ~75 minutes and gunbc_ci_spark_serving_step_timeout_minutes is 60, so whether a build fits inside that boundary is a job-level decision this lane does not get to make.

Every entry names its invocation

Three *_wet entries have no in-tree caller. That is the shape of an actuator, but only if the invocation is stated — otherwise it is dangling. vllm_source_acquire_wet and spark_build_host_reachability_wet are operator-invoked through the ordinary CLI and have both been executed that way against srv9, receipts in the lane's record; they take the fleet key from an in-run agent and need no credential an authoring session cannot hold. The build entry's dispatch is owed, and is recorded as owed.

A count I got wrong

I wrote that fleet-converge declares six jobs. It declares five — build, fleet-converge, host-reset-return, dashboard-deploy, rlm-launch-deployment-receipt. My count included workflow_dispatch, which is a trigger. The before/after comparison was unaffected and the conclusion holds — the probe adds no job — but the number was wrong and the PR body is corrected.

Provenance text

The module introduction no longer says a digest "is provenance: it says which inputs produced these bytes" — a digest is an identity for bytes, and even with the recipe beside it does not establish what the daemon compiled, which is why the identity record carries provenance as its own field. The readings annotation now says the published image's two registry entries were observed in that image's own layer, not that they explain where it came from. The PR body drops "wiring held outside public main" and the description of the deleted --arg host= probe route.

— sent from clever-bat-173

gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
… decorative publisher-fit witness.

Consumption of those stacked files belongs on clever-bat-173; this PR should not keep a second authority over them.

Co-authored-by: Cursor <cursoragent@cursor.com>
…be's target the way the build's is, and stop calling a version stamp provenance

THE ACQUISITION ENTRY WAS DELETED BY A REGION REPLACEMENT AND ITS NOTE KEPT
ADVERTISING IT. vllm_source_acquire_wet and its receipt helpers went out with
the build-entry rewrite while the §3c invocation block still named the CLI
command, so the one invocation a reader was told to use did not resolve. That
is the same defect this lane criticised twice in other people's text -- an
annotation describing a mechanism that is not there -- and history executing it
once establishes nothing about its availability now. Restored.

ENROLMENT IS NOT ADMISSIBILITY, and the probe entry had stopped at the first.
The administrator roster answers "does this Spark have a credential", which
srv5 and srv6 do -- and they are the serving pair. A dispatch naming one would
have pulled 9.6 GB and started a container on a serving host, which is the thing
that was explicitly ruled out. The probe now applies the same subtraction the
build does, so a rostered host that is serving or reserved refuses there too.

A VERSION STAMP IS A SELF-REPORT. The readings annotation said the version
string means "the image identifies its own source"; it means the packager
stamped that identifier, which is evidence about the artifact and not proof of
what was compiled -- the same distinction extdeps.vllm.server already draws for
a server's version prefix. The paragraph describing the deleted --arg host=
probe route is gone, and the PR body's "reports its own provenance" with it.

AND THE FIT STATEMENT IS AN ANNOTATION RATHER THAN A ROW. v41_flash_fit_statement
was a String declaration nothing read, and its decidable content is already
carried decidably next door -- verified hardware in one row, the minimum as a
Measure in another. What remained was the publisher's caveat, which §4c puts in
an annotation, placed beside the number a reader is most likely to mistake for
a measurement.

24 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Side-chat on c2ed5b408c plus the manager's ruling and the v41_flash_fit_statement question — one push, 70bd602fa7. 24 witnesses green.

The acquisition entry was deleted and its own note kept advertising it. vllm_source_acquire_wet and its receipt helpers went out with the build-entry rewrite while the §3c invocation block still named the CLI command — so the one invocation a reader was told to use did not resolve. That is the same defect this lane has criticised twice in other text, an annotation describing a mechanism that is not there, and the reviewer is right that history executing it once establishes nothing about its availability now. Restored.

Enrolment is not admissibility, and the probe entry had stopped at the first. The administrator roster answers "does this Spark have a credential" — srv5 and srv6 do, and they are the serving pair. A dispatch naming one would have pulled 9.6 GB and started a container on a serving host, which is exactly what was ruled out. v41_published_image_probe_ci_wet now applies the same subtraction the build does, so a rostered host that is serving or reserved refuses there too, and the body's admission claim is true rather than aspirational.

A version stamp is a self-report. The readings annotation said the version string means "the image identifies its own source". It means the packager stamped that identifier — evidence about the artifact, not proof of what was compiled, which is the distinction extdeps.vllm.server already draws for a server's version prefix. The paragraph describing the deleted --arg host= probe route is gone, and the PR body's "reports its own provenance" with it.

v41_flash_fit_statement is now an annotation rather than a row. It was a String declaration nothing read, and its decidable content is already carried decidably next door — which hardware the publisher verified is one row, the minimum is a Measure in another. What remained was the publisher's caveat ("measure before assuming"), which §4c puts in an annotation; it now sits beside the number a reader is most likely to mistake for a measured floor.

— sent from clever-bat-173

gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
…lookup rows.

The published candidate now takes v41_published_distribution_name and PublicCommitAbsent instead of concatenating observation prose. Bare _gb recipe names are gone on that head.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
… not a compiled-kernel fact

Side-chat finding on #11013: TORCH_CUDA_ARCH_LIST records requested targets; kernel presence
is established only by #11022's in-image probe. Also: the image was built (route B) and not adopted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D2AF1pri3WJkug5AtCYLGF
gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
… decorative publisher-fit witness.

Consumption of those stacked files belongs on clever-bat-173; this PR should not keep a second authority over them.

Co-authored-by: Cursor <cursoragent@cursor.com>
… thread count typed, and the last prose row folded

Four local fixes, all correct as found.

THE ANNOTATION WAS DESCRIBING THE WRONG DECLARATION. Inserting the probe step
function between the pair-serving block and its function left that block leading
MINE, so it read as if the probe applies serving units workers-before-heads.
Attachment is the whole semantics of the channel (§4c). The function moved below
the one the block describes; the emitted YAML is unchanged, because step ORDER
lives in the steps list and that did not move.

A TRANSCRIBED MEASUREMENT IS GONE. The parallelism annotation carried the build
host's core count, its free memory, and upstream's figure for a different
machine -- three numbers copied into prose with no producer named, which rot the
moment any of the three changes with nobody touching this file. What is citeable
is upstream's own aarch64 release row, which is already a declaration; the fleet
rows are a DEPARTURE from it, chosen low because a Spark is not a dedicated
builder. Where a reader wants the host facts, the annotation names the
instrument that would take them rather than quoting an old one.

nvcc_threads COUNTS HARDWARE THREADS and now carries std.measure's
HardwareThreadCount, the unit extdeps.ci_runner already carries for published
runner vcpus. The bare Nat stays on VllmContainerBuildRecipe, where the field IS
upstream's ARG at the cited-spec boundary; the conversion happens once, at the
call. max_jobs is left a Nat: it is a concurrency degree, not a thread count.

AND THE LAST PROSE ROW FOLLOWS THE FIRST. v41_flash_documented_install_note was
a String nothing read -- the identical defect this module deleted one
declaration earlier for the fit statement, which is how a class gets fixed at
one instance and left standing at the next. Its decidable content is that the
image is not one install option among several but the only one the publisher
offers, which is why a reference that does not resolve is a hard stop.

24 witnesses green; generated artifacts regenerated with no drift.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

review 63753 — four findings, all correct as found, fixed in f1b8c80769. 24 witnesses green, generated artifacts regenerated with no drift.

The annotation was describing the wrong declaration. Inserting fleet_converge_spark_runtime_image_probe_step between the pair-serving block and its function left that block leading mine — so it read as if the probe applies serving units workers-before-heads. Attachment is the whole semantics of the channel. The function moved below the one the block describes; the emitted YAML is byte-unchanged, because step order lives in the steps list and that did not move.

A transcribed measurement is gone. The parallelism annotation carried the build host's core count, its free memory, and upstream's figure for a different machine — three numbers copied into prose with no producer named, which rot the moment any of the three changes with nobody touching the file. What is citeable is upstream's own aarch64 release row, already a declaration; the fleet rows are a departure from it, chosen low because a Spark is not a dedicated builder. Where a reader wants the host facts, the annotation now names the instrument that would take them (spark_build_host_reachability_wet, which reaches an admissible host over the modeled route) rather than quoting an old reading.

nvcc_threads carries HardwareThreadCount. You're right about the boundary: the bare Nat stays on VllmContainerBuildRecipe, where the field is upstream's ARG at the cited-spec edge, and the conversion happens once at the call that builds the recipe. max_jobs is left a Nat — a concurrency degree, not a thread count — which matches your own note.

And the last prose row follows the first. v41_flash_documented_install_note was a String nothing read — the identical defect this module deleted one declaration earlier for v41_flash_fit_statement. That is how a class gets fixed at one instance and left standing at the next, and the observation is the useful part of the finding. Its decidable content — the image is not one install option among several but the only one the publisher offers — is now an annotation on the documented-image row, where it explains why a reference that does not resolve is a hard stop for a consumer rather than an inconvenience.

Noted, with thanks, on the two you looked at and did not flag: the 🟡 dissolve-on on the Python carrier and the §3c frontier block were both written to that standard deliberately, and it is useful to know they read that way from outside.

— sent from clever-bat-173

gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
Observation already matched; fit-statement and install-note rows are #11022's, not this PR's.

Co-authored-by: Cursor <cursoragent@cursor.com>
…commit left it wrapped

review 63774: the witness passed v41_build_nvcc_threads -- a HardwareThreadCount,
which is Measure { count } -- into vllm_recipe_targeting's `nvcc_threads: Nat`.
The production call site already unwrapped it; the witness did not, so typing
the policy row in the previous commit was carried through in one place and not
the other. Fixed the way production does it, through hardware_thread_count_value.

WHAT THE REVIEW GOT WRONG, AND IT MATTERS MORE THAN THE FIX. It says the witness
"cannot execute at all in this state". It executed and passed: 24 of 24 green on
the wrapped tree, the arm in question included. So the mismatch was not caught.

A discriminating control says the tolerance is not specific to Measure: with
`max_jobs: "one" as NonEmptyStr` planted in the sibling arm -- a String where a
Nat is declared, which no reading of the types admits -- the same runner returned
24 of 24 green again. Whether the full compiler refuses what the witness runner
admits is a separate question and is being asked; either way, a green witness is
weaker evidence about ARGUMENT TYPES than this lane has been treating it as, and
that is worth more than the one-line fix that prompted it.

24 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

review 63774 — the typing defect is real and is fixed in d6a65b6763: the witness passed v41_build_nvcc_threads (a HardwareThreadCount, i.e. Measure { count }) into vllm_recipe_targeting's nvcc_threads: Nat. The production call site already unwrapped it; typing the policy row in the previous commit was carried through in one place and not the other. It now unwraps the way production does.

The consequence clause is wrong, and checking it turned up something worth more than the fix. The review says the witness "cannot execute at all in this state". It executed and passed — 24 of 24 green on the wrapped tree, the arm in question included. So nothing refused the mismatch.

I ran a discriminating control to find out whether that tolerance was something about Measure specifically. Planting max_jobs: "one" as NonEmptyStr in the sibling arm — a String at a Nat formal, which no reading of the types admits — the witness runner returned 24 of 24 green again, and gunbc compile over the same entry produced zero DeclaredTypeNotInhabited diagnostics and refused only at rust emission on the pre-existing extdeps.gunbc WitnessBin.Run shell-channel limitation, which is unrelated and present with or without the plant.

This is not a new class and I am not filing one. It is gunbc.recurring_failure_mode.absence_classifier_default_bucket — "a value of an unrelated constructor ACCEPTED at a declared position with no diagnostic in either direction", rung below the ladder, ceiling 3, already carrying an enrolled ExpectAssertionFalse RED at test.claim.declared_type_inhabitance_direct_call_witness.w_a_branded_refinement_at_an_unrelated_product_formal_still_refuses.

What my specimen adds is grain: that row's enrolled evidence is a branded where-refinement at a product formal, and this shows the hole is not confined to refinement chains — a plain NonEmptyStr at a Nat formal is accepted too, by the witness runner and by the full compiler. Whether that widens the row is its owner's call; I am handing over the specimen rather than minting a second row for one cause (§2).

What it means for this PR, stated so I am not overclaiming elsewhere: every "N witnesses green" in this thread is evidence about the assertions, which do execute and do go red when mutated — the mutation controls in this PR are real. It is not evidence that argument types at call sites are checked, because at that seam nothing is checking. I have not relied on witness green for a typing claim anywhere in the PR body, and this note is the record that I cannot.

— sent from clever-bat-173

…tead of counting the rows it ships with

review 63793: the_built_image_has_one_measured_absence_and_one_unasked_question
compared this change's recorded readings to this change's expectations about
them. Both sides were the same diff's rows, so the only way it went red was an
author editing one -- the change detector §5 names, and moving it from prose to
typed rows changed the grain, not the self-reference. The reviewer offered two
arms, join it or drop it; neither quite fits, because there IS no second source
for "the recorded run never asked this question".

What is worth checking is the code rather than the data: that absent and unread
stay disjoint at all, since folding them would let a question nobody put read as
a capability nobody has. So the folds now take a roster, and the witness builds
three readings -- one of each outcome -- and asserts the two buckets separate
them. The recorded roster is no longer asserted about; its content is already
joined against an independent source by the two agreement witnesses, which can
go red on either side.

Mutation control: making the unread fold also collect Absent -- exactly the
conflation the arm exists to prevent -- turns that witness red and leaves the
other twenty-one green. 22 of 22 green unmutated.

v41_reading_for went with the deleted witness; it had no other consumer. The
thin wrappers over the recorded roster stay, with the consumer already named for
the receipt itself, and no witness asserts their values.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

review 63793 — correct, and fixed in 154714b950. 22 witnesses green (two fewer, deliberately: one deleted, one rewritten).

The count witness compared this change's recorded readings to this change's expectations about them. Both sides were the same diff's rows, so the only way it went red was an author editing one — the change detector §5 names. You're right that moving it from prose to typed rows changed the grain and not the self-reference; that is the same defect twice and I did not see it the second time.

I took neither arm you offered, because neither quite fits. Joining it needs a second source, and there is none for "the recorded run never asked this question" — that is a fact about which questions a past run put, and nothing else in the tree independently knows it. Dropping it outright loses something real: that absent and unread stay disjoint, which is the property that keeps a question nobody put from reading as a capability nobody has.

So the check moved from the data to the code. The folds now take a roster; the witness builds three readings — one present, one absent, one unread — and asserts the two buckets separate them. The recorded roster is no longer asserted about at all; its content is already joined against an independent source by the two agreement witnesses, which can go red on either side, exactly as you noted.

Mutation control, since "this one can actually fail" is itself a claim: making the unread fold also collect Absent — precisely the conflation the arm exists to prevent — turns that witness red and leaves the other twenty-one green.

v41_reading_for went with the deleted witness; it had no other consumer. The thin wrappers over the recorded roster stay, with the consumer already named for the receipt itself (gunbc.spark.serving_runtime_capability_probe's roster when #11016 lands), and no witness asserts their values.

— sent from clever-bat-173

Brian Searls and others added 6 commits September 11, 2026 13:12
…ted entry

The eight-line block after `v41_probe_body` described `v41_runtime_image_probe_wet(host)`:
tag-based convergence and a `--arg host=` roster admission. That entry is gone; the
surviving `v41_published_image_probe_ci_wet` pulls a digest under SPARK_CONVERGE_TARGET
and carries its own accurate annotation. So the block was both stale in content and,
with nothing between it and the readings section header, misattached under §4c.

22 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
#11016 merged, so the capability vocabulary, the receipt rows and the compute-capability
shape this lane spelled while it was in flight are a second authority for facts that now
have a home. Uprooted rather than bridged (DESIGN §3), and each deleted piece fixed
forward into the landed model rather than restored to its old binding:

- gunbc.spark.serving_runtime_capability_probe gains the two questions this lane found
  that its five did not ask: Fp4WeightSupportedHere (the predicate CALLED, not the symbol
  looked up) and FlashInferSparseMlaSm120Symbols (the second arm of the major-12 KV
  branch). Both are required by both profiles, which tightens the obligation -- images
  probed before the questions existed now read UNPROBED for them, which is the right
  answer to a question nobody put.
- MlaKvCacheLayoutAdmitted's ProbeSymbolAwaitingRoster frontier has fired:
  extdeps.vllm.deepseek_v4_1_sm12 lands in this PR, so the symbol is grounded IN that
  roster's value. Its witness flips from "carries a frontier" to "is grounded in the
  roster's own declaration" -- a join an author cannot satisfy by editing that file.
- this lane's seven executed readings move into that module's ONE roster, keyed by the
  digest they were taken in and the vendor-qualified device they were taken on, beside
  every other probed image's. The six presences and the one refusal are unchanged; the
  architecture row now DERIVES from a reading, because the run's full 383-name registry
  output was recovered and is recorded in gunbc.spark.runtime_architecture_registry_reading
  with its host, date and instrument -- so it satisfies the same wall every other row does.
- deleted: the seven capability labels, V41RecordedReading/v41_recorded,
  v41_image_capability_readings, v41_reading_is_present, the local compute-capability
  pair, the probed digest/version rows, this lane's spelling of the architecture class
  (now extdeps.deepseek.deepseek_v4_1_flash's), and the two dangling wrappers
  v41_image_absent_capabilities / v41_image_unread_capabilities, whose annotation
  deferred to a trigger that had already fired.
- kept, retargeted, and now CONSUMED: the absent-vs-unread partition folds read a live
  run's parsed readings and their answer is printed in the probe receipt, so the
  distinction is exercised by execution rather than asserted about rows.

What stays in this module is what the capability vocabulary does not ask: the sibling
architecture the same registry did answer for (the discriminator that rules out an empty
registry), and the layout sets the backend returned, both joined in witnesses against
extdeps.vllm.deepseek_v4_1_sm12's independent reading of the same rule.

22/22 witnesses green on this lane's file; 20/20 on #11016's, over the merged tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
… is a probed candidate

The capability rows and a full registry reading for the source-built digest landed in the
last commit, but v41_sm121_runtime_candidates still described that image as a BUILD
obligation nobody had taken. v41_images_with_prerequisites walks CANDIDATES, skipping
CandidateNotProbed, so the one image this lane actually probed sat outside the sweep it
was built to enter -- a roster unified at the row layer and still forked at the candidate
layer, which is the same defect one level up.

- the row is CandidateProbed at the frozen reference the registry reading carries, and its
  discovered_via says what it was (an obligation), what happened (the obligation was taken
  and the image probed), and where the obligation's own discharge is read.
- the reciprocal wall lands with it: every image subject with capability rows must resolve
  to a CandidateProbed candidate. The existing wall stops a candidate claiming a reading it
  does not have; this one stops a reading being invisible to the sweep, which is the
  direction that just failed. An identity join from the rows to the candidates, so a new
  probed subject with no candidate row goes red rather than going unnoticed.

21/21 witnesses green on the capability authority's file.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
…uisites

Prose only; no declaration changed. Every sentence that carried a count of capabilities or
candidates was stale the moment this PR added two questions and a probed image, and a
sentence stating a size goes stale again on the next expansion -- so each one is reworded
from the shape it is describing: "the candidates this roster carries", "the capabilities
this profile requires", "the kernel questions", "the questions that were put to it".

- the sweep's denominator sentence, the SGLang candidate's header and its four recorded
  refusal reasons, the profile note, and the CapabilityProbeSymbol header. That last one
  also said one capability was awaiting its roster; none is today, so it now says what the
  frontier arm is FOR -- a capability that arrives ahead of the upstream roster that names
  its symbols -- and why deleting it would make the next one land as a spelling of ours.
- the SGLang header gains the distinction the two new capabilities create: a question the
  vocabulary gained after a run was never asked of that image, so it is UNRECORDED rather
  than refused. A run cannot have refused a question that did not exist when it happened.
- the witness file's matching framing, and one test renamed off the count it carried.

And one correction rather than a rewording: the build obligation said the built image
answered present to every kernel question and absent to the registry one, which reads as a
single unmet prerequisite. There are two. The FP4 runtime predicate stands at
KernelProbeRefused -- the run FOUND cutlass_scaled_mm_supports_fp4 and never CALLED it -- so
its answer for this device is unknown rather than negative, and discharge needs the re-probe
as well as an image whose registry answers for the architecture. Naming only the absence
would leave a required capability unasked behind a discharge that cited a different defect.

21/21 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
…capability

review 63843 is right and the trigger had already fired inside this branch. The 🟡 above
neither_upstream_recipe_targets_gb10_and_upstream_still_accepts_it said the compute
capability would be joined to gunbc.spark.serving_runtime_capability_probe
gb10_observed_compute_capability "when #11016 lands" -- it landed, this same file already
imports that symbol and consumes it two witnesses down, and the hand-spelled "12.1" was
still standing beside the authority in two witnesses. A trigger that has fired tells a
reader nothing about which of §4b(2)'s three states the class is in.

So the join is taken rather than the trigger restated:

- extdeps.vllm.source_build gains vllm_torch_cuda_arch_entry, which renders a
  GpuComputeCapability as a TORCH_CUDA_ARCH_LIST entry -- upstream's spelling of the same
  fact extdeps.gpu.types already renders as sm_major_minor, so it reuses that module's
  label OUTCOME rather than minting a second one, and refuses for a vendor whose toolchain
  has no such list instead of rendering a number the compiler would not understand.
- both arch witnesses now ask about the RENDERED observation. v41_gb10_torch_cuda_arch_list
  stays a literal on purpose -- what a build is told to target is policy, and a recipe that
  derived its target from the last device seen would silently re-target -- but the literal
  is now checked against an independently sourced measurement instead of against itself,
  and cannot be made green by editing one string in two places.

22/22 witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Fixed at d065607d93ea — review 63843's finding held, and the trigger it named had already fired inside this branch.

The 🟡 above neither_upstream_recipe_targets_gb10_and_upstream_still_accepts_it deferred the compute-capability join to #11016 landing. It landed, this same file already imports gb10_observed_compute_capability and consumes it two witnesses down, and the hand-spelled "12.1" was still standing beside the authority — in that witness and in one more the review did not name (the_fleet_recipe_diverges_from_upstream_only_in_the_arch_list_and_parallelism, line 79). Both are joined now.

  • extdeps.vllm.source_build gains vllm_torch_cuda_arch_entry, rendering a GpuComputeCapability as a TORCH_CUDA_ARCH_LIST entry. It reuses extdeps.gpu.types' label outcome rather than minting a second one — same question, a different toolchain's spelling of the fact that module already renders as sm_major_minor — and refuses for a vendor whose toolchain has no such list instead of rendering a number the compiler would not understand.
  • v41_gb10_torch_cuda_arch_list stays a literal deliberately: what a build is told to target is policy, and a recipe deriving its target from the last device seen would silently re-target on the next reading. What changed is that the literal is now checked against an independently sourced measurement rather than against itself — it cannot be made green by editing one string in two places.

22/22 witnesses green locally.

— sent from clever-bat-173

Brian Searls and others added 2 commits September 11, 2026 15:36
… wrong thing

Every witness in v41_runtime_image_build_witness_test.dag is a pure fold over declarations
-- generated script text, argv construction, hostname classification, the capability
partition, recorded readings joined against upstream's source rows. None opens a file, asks
a host, or reaches outside its resolved closure; the one thing in this lane that touches a
live tree is the probe, which is a wet entry in gunbc.spark.v41_runtime_image_probe and not
a witness. The file said none of that, and v2.std.live_tree records that the selection
consumer reads an undeclared entry as ReadsLiveTree -- so silence here asserted something
false about this file.

The row is author-vouched and says so: v2.std.live_tree is explicit that nothing checks a
stamp today (the falsifier cadence that would have died with the 2026-08-15 floor cut), so
the annotation states that rather than implying the declaration is verified. No gate is
widened by it; the required floor's home-prefix decline is unchanged and is an operator
ruling, gunbc.rung_drop required_gate_bankruptcy.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
review 63881 is right, and the sharpest part of it is that this file condemns the defect
four lines above the place it commits it: the annotation on v41_flash_checkpoint says "a
scalar named `_gb` is a unit living in an identifier, which is the place a conversion goes
wrong silently", and the row below it was `v41_flash_headroom_factor_tenths: Nat = 12` --
the unit in the identifier, the scale open-coded beside it as `* factor + 9) / 10`.

std.measure owns this concept: Percent = Measure<Dimensionless, One, Nat>, already imported
by this module for Gigabyte. So the publisher's 1.2 is percent(count: 120), and the scale the
ceiling division undoes is percent_unity_hundred_count() -- extdeps.units.dimensionless'
authority for what "per cent" means -- rather than a literal 10 chosen to match a name. The
ceiling term is written against that scale too, so it stays correct if the factor is ever
restated at a different precision.

The oracle over it is unchanged and is what makes this checkable rather than plausible:
the_published_image_observation witness asserts that the page's stated 614 EQUALS
v41_flash_headroom(total: v41_flash_checkpoint), two independently sourced figures from the
publisher's own page. A wrong conversion (12 rather than 120) cannot satisfy it.

22/22 witnesses green on claim_batch sha256 7c7359ccaf9d62d7c92990bc3501940784377abf38e88926e4106cff597828c2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4MBC3Vb8do5fAXAysiXLE
@gunbai-bot

gunbai-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Fixed at 7cab404505e3 — review 63881's finding held, and its sharpest point is that this file condemns the defect four lines above the place it commits it. The annotation on v41_flash_checkpoint says "a scalar named _gb is a unit living in an identifier, which is the place a conversion goes wrong silently", and the next row was v41_flash_headroom_factor_tenths: Nat = 12 with the scale open-coded beside it.

Percent = Measure<Dimensionless, One, Nat> is the carrier, and this module already imported std.measure for Gigabyte. So the publisher's 1.2 is percent(count: 120), and the scale the ceiling division undoes is percent_unity_hundred_count() — extdeps.units.dimensionless' authority for what "per cent" means — rather than a literal 10 chosen to match an identifier. The ceiling term is written against that same scale, so it survives the factor being restated at a different precision.

The oracle over it is unchanged and is what makes this checkable rather than merely plausible: the witness asserts the page's stated 614 equals v41_flash_headroom(total: v41_flash_checkpoint) — two independently sourced figures from the publisher's own page. A wrong conversion (12 rather than 120) cannot satisfy it.

22/22 witnesses green, on claim_batch sha256 7c7359ccaf9d62d7c92990bc3501940784377abf38e88926e4106cff597828c2, built from this branch.

— sent from clever-bat-173

@gunbai-bot
gunbai-bot Bot merged commit 44a0467 into main Sep 11, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/clever-bat-173 branch September 11, 2026 16:52
gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
Co-authored-by: Cursor <cursoragent@cursor.com>

#11022 is on main; take main's side for deepseek_v4_1_flash_recipe.dag.
gunbai-bot Bot pushed a commit that referenced this pull request Sep 11, 2026
…nt frontier row.

Co-authored-by: Cursor <cursoragent@cursor.com>

#11022 made extdeps.vllm.deepseek_v4_1_sm12 importable; a hand-pinned KvFp8DsMlaLayout plus transcribed admit prose was a second authority for that module's rows.
gunbai-bot Bot added a commit that referenced this pull request Sep 12, 2026
…erived topology (#11013)

* Add V4.1 native serving candidates with fleet-derived topology.

Native-quality and no-redundancy are hard constraints over facts (published weights; whole-fleet covering), and the V4.1 field is the cartesian of that artifact with divisor topologies rather than a second authored list.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Align V4.1 selection with the operator constraints.

No-redundancy is replica_count == 1, not a covering-partition prune: the field is every shape the fleet snapshot admits, and TP width is left to weight-fit. Native-quality and no-redundancy are declared constraint authorities; Engram is an unestablished placement standing that does not discount the fit check.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Carry V4.1 runtime profiles in the selection domain.

Pin Hub file size as an external footprint (not serving memory), record Engram as zero pool gain on unified GB10 memory, and join artifact × topology × declared vLLM profiles instead of one fleet-image parameter set.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Cite DSV41-0 payload total_size as the V4.1 external footprint.

Use metadata.total_size 510286023000 (partitioned backbone/Engram/vision/MTP) rather than tree-file bytes, and record that Engram layers 1 and 14 do not grow the GB10 pool.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Cite V4.1 payload as shard-header bytes, distinct from tree file size.

DSV41-0 verified both quantities at the same pin; keep FootprintReportedExternally on the tensor payload.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Rework V4.1 selection against the blocking brief.

No-redundancy is replica_count == 1 with tp2x1/tp4x1 in the admitted field; V4.1 profiles use the extdeps window, FP4 KV and DSpark instead of V4 Flash parameters; footprint bytes come from the cited payload; selection_policy is a distinct authority.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Derive GLM and DeepSeek candidate fields from the same cartesian.

Delete the hand-authored glm_* and deepseek_tp* rows so artifact × topology is one generator, matching the V4.1 field.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Stop inheriting V4 Flash parameters and delete covering topologies.

V4.1 profiles use the extdeps window, FP4 KV and DSpark without reading serving_parameters_current; GLM/DeepSeek domains join the admitted fleet shapes; the divisor-cover generator is gone.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Derive subject constraint cells from the input's constraint set.

Dispositions join native-quality and no-redundancy identities instead of one hardcoded authority; the no-redundancy axis is funded only on the V4.1 set.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Set GB10 V4.1 KV layout to fp8_ds_mla; leave bytes-per-token unestablished.

vLLM 07b75534 on SM12 does not admit NVFP4 DS-MLA. The card's 890 B/token does not apply; DSV41-4 owns that figure. Higher-precision KV is a capacity fact, not a native-quality miss.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Cite GB10 V4.1 KV as an SM12 frontier until clever-bat-173 lands.

The profile already used KvFp8DsMlaLayout; name extdeps.vllm.deepseek_v4_1_sm12 and supports_combination instead of copying the engine admit set.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Name DSV41-4 recipe/sm12 as frontiers; do not transcribe publisher fit or KV bytes.

GB10 V4.1 stays fp8_ds_mla with dtype set; auto is a launch refusal. Weight-fit still underivable from a Spark reading. Bytes stay unestablished until indexer, SWA, and the allocator report land.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Drop the eight-indexer KV figure; keep bytes unestablished until DSV41-4's declaration lands.

Indexer K caches are kv-source ∩ index-source, not eight. SWA is per-sequence, not a per-token term. Do not mint a dashboard rate; the allocator report still decides.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fund KV-bytes only on the V4.1 axis roster; drop the permanently green Engram axis.

GLM/V4 Flash no longer get a fabricated unread-axis obligation. Engram stays standing (zero pool gain on unified memory) without a funded reading that cannot go red.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Carry the unestablished TP-width standing as a DissolutionCondition, not a status String.

DESIGN §4c: the DSV41-1 width observation is a dissolution trigger, not commentary in NonEmptyStr.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Exclude definite hard-constraint failures before requesting unread axes, and give V4.1 candidates a complete identity.

scan_feasibility was asking for performance evidence on candidates already known-forbidden, which blocked the no-redundancy exclusion rule. Candidate identity now includes the full profile, snapshot keys include constraint bounds, and the adopted published 0909 image is in the field (digest stays a DSV41-4 frontier).

Co-authored-by: Cursor <cursoragent@cursor.com>

* Carry the funded-axis roster on the serving decision input instead of inferring it from the constraint-authority ref.

The selector was dispatching v4.1 vs base axes by authority identity, so a witness could fund no-redundancy under the wrong authority and refuse as unfunded. Layer lists keep upstream arity; witnesses now check constructors rather than dissolution wording; footprint and host pool stay ByteSize.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Stop pinning the published 0909 image to the public-source fallback git revision.

That image reports vllm-0.1.dev20904+g179dd0fa9 with unknown provenance; 07b75534 is route B. Source revision is now unestablished and cited to clever-bat-173; the digest stays a frontier on their module.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Pin the published V4.1 Spark image to gunbc.spark.v41_published_image_observation's arm64 repository@digest.

The recipe documents a tag that does not resolve; the digest is a fleet reading, so this selector imports v41_published_arm64_reference rather than authoring one. Source revision stays unestablished from that module's distribution and public-standing observations.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Re-sync stacked #11022 observation and recipe to b728211; cite typed lookup rows.

The published candidate now takes v41_published_distribution_name and PublicCommitAbsent instead of concatenating observation prose. Bare _gb recipe names are gone on that head.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Include axis goal in the serving decision key, and stop treating the unread Spark image as an established git pin.

A HigherIsBetter/LowerIsBetter flip on no-redundancy changed feasibility without changing identity; spark_runtime was Established from a placeholder string. Bound-only and goal-only witnesses isolate those mutations.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Give the stacked V4.1 recipe figures an executing consumer, and drop the false this-PR frontier.

The publisher-fit rows are schema headroom, not a Spark floor; selection no longer claims a future import as the trigger.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Name the GB10 fallback image's arch list as a requested build target, not a compiled-kernel fact

Side-chat finding on #11013: TORCH_CUDA_ARCH_LIST records requested targets; kernel presence
is established only by #11022's in-image probe. Also: the image was built (route B) and not adopted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D2AF1pri3WJkug5AtCYLGF

* Give the published-image observation rows an executing consumer, and drop the copy-pasted recipe frontier.

The pin is already used by selection; this witness reads the unused digests, observation fold, and registry fold so §3c is per declaration.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Declare serving_deployment_subject and restore the imports the selection spine still spells.

The floor refused a citation to a missing subject name, and seven NewUnresolvedness rows after std.interval and v2.std.optional were dropped while OrderedClosedInterval, Present, and Absent stayed in use.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Revert edits to #11022's recipe and observation modules, and drop the decorative publisher-fit witness.

Consumption of those stacked files belongs on clever-bat-173; this PR should not keep a second authority over them.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Put the V4.1 deferred KV-layout, TP-width, and bytes-per-token facts on std.roster_frontier.

The three unread DissolutionCondition rows are the same concept the recipe module already enrolls as FrontierRow; a witness now folds the roster.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Drop rebase conflict markers from the V4.1 Hub module.

The Hub pin is #11007's, already on main; recipe parser flags live in extdeps.vllm.recipe_deepseek_v4_1_flash, not inside a conflict body.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Carry #11022's recipe module at f1b8c80, not a stale stacked copy.

Observation already matched; fit-statement and install-note rows are #11022's, not this PR's.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Name engram_standing as a declared later consumer on the selection frontier.

The type and dispatch were facts with no executing route; a fourth FrontierRow states the weight-fit trigger instead of pretending an existence witness is consumption.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Derive GB10 V4.1 KV layout from the sm12 admit wire, and drop the spent frontier row.

Co-authored-by: Cursor <cursoragent@cursor.com>

#11022 made extdeps.vllm.deepseek_v4_1_sm12 importable; a hand-pinned KvFp8DsMlaLayout plus transcribed admit prose was a second authority for that module's rows.

* Refuse a failed sm12 KV-layout join instead of fabricating Auto.

The previous miss arms inhabited KvAutoLayout and baked it into every V4.1 profile; §5 requires Absent, not a stand-in the selection path never re-checks.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Flatten V4.1 profiles with binary concat.

The one-arg concat left a list of lists, so profile field reads were type errors at eval.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Keep the V4.1 field complete when sm12 KV admit is missing.

A miss is AxisGap/NeedsEvidence naming v41_sm12_admitted_kv_cache_dtypes, not a dropped profile and not Auto.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Carry a named sm12 KV-layout obligation through select_serving_deployment.

An empty admit roster stays a complete field and answers NeedsEvidence citing v41_sm12_kv_layout / supports_combination, not an unestablished field.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Preserve the sm12 KV join as named field standing before profile projection.

Unadmitted and unmatched wires keep the cartesian field complete and unestablish it with the v41_sm12_kv_layout / supports_combination obligation, never Auto and never an empty profile list.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Plant an unadmitted SM12 wire and an admitted no-match wire in the same red.

Auto is present locally and refused by supports_combination; the admit roster's unmatched spelling (fp8_e4m3) has no KvLayoutPolicy. Both must keep the named join standing.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Route live select_serving_deployment through the sm12 admit fold.

It is select_serving_deployment_at_sm12_admit with v41_sm12_admitted_kv_cache_dtypes, not a parallel path. The planted unadmitted and admitted-no-match reds stay.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Stop fabricating fp8_ds_mla on a failed sm12 wire match.

V4.1 profiles consume Sm12KvLayoutStanding: join failure keeps three profile standings without filling KV. Delete the permanently green ax_sm12_kv_admitted path. Plants feed the same wire the profiles are built from.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Delete unused domain_over and the optional sm12 layout fork.

Weight-fit scale, ceiling, and comparison consume std.measure instead of unwrapping ByteSize into a second Nat formula.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Put failed profile standings in the domain identity.

Ready combinations alone collide when every V4.1 profile is JoinFailed. The domain key now renders each standing (runtime, wire, obligation) so distinct SM12 failures are distinct snapshots.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Delete the unused constraint-identity alias and subtract measures at std.measure.

assessment_constraint_identities was a nickname with only a witness caller. Slack is measure_sub (Nat-floored) rather than a second count difference.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Floor measure_sub with a Nat zero, not an Int literal.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Carry weight treatment in field identity and drop the Bool infeasibility predicate.

Combination keys include the treatment digest so a requantised clone is a different snapshot. Admitted topologies enumerate replicas as host_count/tp. Feasibility folds Worse constraints as a list, not a coproduct-to-Bool helper.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Refuse measure_sub underflow and derive the live V4.1 field from the sm12 constructors.

Underflow is MeasureSubtrahendExceedsMinuend, matching v2.std.nat nat_sub, not a fabricated zero. Live domain, field, and decision input are v4_1_*_from_sm12 on the extdeps wire.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Key the V4.1 GB10 lead runtime by its observed image digest, not commentary.

runtime_revision_key was hashing a paragraph of build history and probe notes. The identity is gunbc_vllm_dsv41_gb10_registry_reading.image_reference; probe receipts stay in serving_runtime_capability_probe.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Consume vllm_deepseek_v4_1_sm12_revision instead of restating the SM12 pin.

The GB10 lead git and the published-arm64 obligation now read full_revision from that extdeps row. The witness compares against the same field.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Locate hard-constraint exclusions and restore covering topologies for GLM and V4 Flash.

scan_feasibility keeps each (candidate, constraint, axis) instead of counting them away. GLM and DeepSeek V4 use covering partitions again; the unfiltered fleet cartesian stays V4.1-only.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Install the emitted std.measure mirror for MeasureSubtraction.

required-ci stage0-mirrors refused generated surface drift: the seed copy lacked serde, Rc wrapping, and the coproduct field accessor the emitter writes.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Enforce the published arm64 digest as a V4.1 hard constraint before Pareto.

Diagnostic alternative runtimes stay in the field. Unauthorized images are definite infeasibilities on ax_authorized_runtime. Matching that digest does not establish vLLM source.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Join the V4.1 runtime constraint to the published arm64 digest identity.

RuntimeRevision.image is still a pin, so the compare goes through v41_published_arm64_reference(), the unique rendering of v41_published_arm64_digest. Matching that digest does not establish source.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Keep the V4.1 runtime join on the unique digest rendering, and isolate the no-redundancy goal flip.

RuntimeRevision.image has no digest slot, so the hard constraint still equals v41_published_arm64_reference(). The tp4x2 goal-flip fixture is not that image, so it cannot carry the authorized-runtime constraint.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant