Skip to content

[bitlane] Sync with upstream main 2026-10-21 (13 patches kept, 1 dropped: merged upstream) - #7

Draft
reyanshsolis wants to merge 198 commits into
bitlane/release-expfrom
bitlane/sync-20261021
Draft

reyanshsolis wants to merge 198 commits into
bitlane/release-expfrom
bitlane/sync-20261021

Conversation

@reyanshsolis

Copy link
Copy Markdown

Rebases our patch stack from bitlane/release-dev (1305335, on upstream e68efc6) onto current upstream main d7ada3a (185 upstream commits newer).

Do not merge while release 0.32.0.4 is being cut: a merge to bitlane/release-dev triggers the build and a ~1 h dev e2e.

Patch Status Why
Match DeepSeek-V4.1 encoder to the 1017 reference encoding (vllm-project#62199) dropped merged upstream as ddefe40 (in upstream/main)
Keep prefill-bearing batches out of FULL cudagraphs (vllm-project#62535) kept, clean upstream PR still open
Seed the -1 sentinel in the DSv4.1 prefill sparse index workspace (vllm-project#60613) kept, clean open
Keep a full uniform-decode batch reachable by FULL graphs (vllm-project#62040) kept, clean open
Include draft models in DeepGEMM warmup (vllm-project#60995) kept, clean open
Reject an empty conversation in every renderer (vllm-project#62218) kept, clean open
DeepSeek-V4.1: continue_final_message keeps the last assistant turn open (wo_eos) kept, clean ours; proposed upstream separately
Apply client stop strings only after reasoning ends (vllm-project#62095) kept, clean open
CI (hygiene gate, build, release, e2e, version marker, PR report, builder note) ×6 kept, clean Bitlane-only

Conflicts: none. Checks run (no GPU): .bitlane/check-stack.py hygiene gate PASS, .bitlane/test_check_stack.py and test_workflows.py pass, py_compile of all 20 touched Python files. The engine tests in the patches (tests/tokenizers_/test_deepseek_v41.py etc.) need a full vLLM build; they run in this fork's CI image build + dev e2e after merge.

Commits carry -x cherry-pick lines naming the release-dev commit each one came from.

iboiko-habana and others added 30 commits October 19, 2026 13:04
Signed-off-by: Iryna Boiko <iboiko@habana.ai>
Signed-off-by: Iryna Boiko <iryna.boiko@intel.com>
Co-authored-by: Kunshang Ji <kunshang.ji@intel.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: Li, Tianmu <tianmu.li@intel.com>
…llm-project#61836)

Signed-off-by: wentian-byte <2990624738@qq.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Co-authored-by: Wentao Ye <44945378+yewentao256@users.noreply.github.com>
Signed-off-by: Li, Tianmu <tianmu.li@intel.com>
Co-authored-by: Codex <noreply@openai.com>
…n Responses output parsing (vllm-project#58385)

Signed-off-by: Luu Bao Long <longbaoluu68@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Isotr0py <Isotr0py@outlook.com>
Co-authored-by: Xun Sun <UNIDY2002@outlook.com>
Co-authored-by: Isotr0py <Isotr0py@outlook.com>
…llm-project#60792)

Signed-off-by: ahmed xijiaat <52128022+xijiaat@users.noreply.github.com>
Signed-off-by: Robert Shaw <robertgshaw2@gmail.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Robert Shaw <robertgshaw2@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…vllm-project#62375)

Signed-off-by: Chaojun Zhang <chaojun.zhang@intel.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…th (vllm-project#61965)

Signed-off-by: Harshal Adhav <harshal.adhav@amd.com>
… attention and mamba layers (vllm-project#61726)

Signed-off-by: Jun Kang Chow <junkangchow@gmail.com>
Signed-off-by: tjtanaa <tunjian.tan@embeddedllm.com>
Co-authored-by: vllmellm <vllm.ellm@embeddedllm.com>
Co-authored-by: Hongxia Yang <hongxia.yang@amd.com>
Co-authored-by: TJian <tunjian.tan@embeddedllm.com>
…1488)

Signed-off-by: aoshen02 <aoshen@inferact.ai>
Signed-off-by: fh3 <a@b>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: fh3 <a@b>
Co-authored-by: Kevin H. Luu <khluu000@gmail.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Co-authored-by: Nick Hill <nickhill123@gmail.com>
…m-project#62205)

Signed-off-by: surajm20061998 <surajm20061998@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…epSeek-V4.1-Flash (vllm-project#62183)

Signed-off-by: wangyicong <wangyicong@bytedance.com>
Co-authored-by: OpenAI Codex <noreply@openai.com>
Co-authored-by: Lucas Wilkinson <LucasWilkinson@users.noreply.github.com>
…draft-model speculative decoding (vllm-project#53987)

Signed-off-by: eecspan <yudongpyd@163.com>
Signed-off-by: yudong <yudong@minimax.com>
Co-authored-by: yudong <yudong@minimax.com>
…#60118)

Signed-off-by: Juntian Liu <Juntianl777@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oject#55537)

Signed-off-by: jackLei0901 <42642542+jackLei0901@users.noreply.github.com>
… (thinking_token_budget + spec decode emits token 0) (vllm-project#58231)

Signed-off-by: Gilad Zamoscinski <gilad.z@taboola.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: tomeras91 <57313761+tomeras91@users.noreply.github.com>
vllm-project#60553)

Signed-off-by: Tianyu Guo <guoty@inferact.ai>
Co-authored-by: vllm-agent <claw@inferact.ai>
…er (vllm-project#61943)

Signed-off-by: whx-sjtu <56632993+whx-sjtu@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…uard (vllm-project#60816)

Signed-off-by: Mikko Tukiainen <Mikko.Tukiainen@amd.com>
… on hybrid models (vllm-project#61192)

Signed-off-by: SCcagg5 <sccagg5@gmail.com>
Co-authored-by: Chauncey <chaunceyjiang@gmail.com>
Signed-off-by: Jee Jee Li <jeejeelee@inferact.ai>
Signed-off-by: Jared Wen <jaredwen@inferact.ai>
Signed-off-by: Dakai An <dakaian108@gmail.com>
Co-authored-by: chensiyu <chensiyu@stepfun.com>
Co-authored-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: Isotr0py <mozf@inferact.ai>
Co-authored-by: Jared Wen <jaredwen@inferact.ai>
Co-authored-by: Perkz Zheng <67892460+PerkzZheng@users.noreply.github.com>
Co-authored-by: Dakai An <dakaian108@gmail.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Dakai An <77474977+andakai@users.noreply.github.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: Andreas Karatzas <akaratza@amd.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…e beam search (vllm-project#62253)

Signed-off-by: Yuan Li <dskwelmcy@163.com>
Co-authored-by: Hermes Agent <hermes@nousresearch.com>
Co-authored-by: Hermes Agent <noreply@nousresearch.com>
…fusion (vllm-project#61345)

Signed-off-by: Yanfei Wang <yanfei.wang@amd.com>
Co-authored-by: Shanshan Shen <467638484@qq.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…unction (vllm-project#62206)

Signed-off-by: Jared Wen <jaredwen@inferact.ai>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…l-call text that streaming returns (vllm-project#56270)

Signed-off-by: Artem Perevedentsev <aperevedents@nvidia.com>
Co-authored-by: Artem Perevedentsev <aperevedents@nvidia.com>
…-project#60994)

Signed-off-by: bzsuni <bingzhe.sun@daocloud.io>
Co-authored-by: vllm-agent <claw@inferact.ai>
chaojun-zhang and others added 29 commits October 21, 2026 16:19
Signed-off-by: Chaojun Zhang <chaojun.zhang@intel.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…oject#61354)

Signed-off-by: Lai, Yejing <yejing.lai@intel.com>
Co-authored-by: Kunshang Ji <kunshang.ji@intel.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: aoshen02 <281812371+aoshen02@users.noreply.github.com>
Co-authored-by: aoshen02 <281812371+aoshen02@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…t only request templates (vllm-project#62374)

Signed-off-by: ly989264 <ly989264@163.com>
Signed-off-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…lm-project#62712)

Signed-off-by: Micah Williamson <micah.williamson@amd.com>
Signed-off-by: <>
Signed-off-by: Fangzhou Ai <31551580+Fangzhou-Ai@users.noreply.github.com>
Co-authored-by: Fangzhou Ai <31551580+Fangzhou-Ai@users.noreply.github.com>
…Triton, opt-in) (vllm-project#57832)

Signed-off-by: Peyman Razaghi <prazaghi@amd.com>
Co-authored-by: Cursor Grok 4.6 <noreply@cursor.com>
Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
Co-authored-by: Cursor Agent <agent@cursor.com>
Co-authored-by: Douglas Lehr <91553416+dllehr-amd@users.noreply.github.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: lcskrishna <lollachaitanya@gmail.com>
Signed-off-by: Tej Kiran <kiran.tej@amd.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Tej Kiran <kiran.tej@amd.com>
Co-authored-by: avininjamay8 <avpaul@amd.com>
Co-authored-by: Avinash Paul <Avinash.Paul@amd.com>
Co-authored-by: Shanshan Shen <467638484@qq.com>
…der (vllm-project#62706)

Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com>
Co-authored-by: Cyrus Leung <tlleungac@connect.ust.hk>
…llm-project#52780)

Signed-off-by: Roi Garnett <rgarnett@nvidia.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Co-authored-by: tomeras91 <57313761+tomeras91@users.noreply.github.com>
…roject#62741)

Signed-off-by: Woosuk Kwon <woosuk@inferact.ai>
Signed-off-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
…entions (vllm-project#62721)

Signed-off-by: Bugen Zhao <i@bugenzhao.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: aoshen02 <281812371+aoshen02@users.noreply.github.com>
Co-authored-by: aoshen02 <281812371+aoshen02@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: linitra24 <renshuang.zhou@daocloud.io>
Signed-off-by: khluu <khluu000@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oject#62869)

Signed-off-by: Stefan Koncarevic <stefan.koncarevic@amd.com>
…roject#62535)

What: upstream PR vllm-project#62535 (open, head 111bf7f) on base e68efc6. A batch with prefill tokens
passes allow_full=False through dispatch_cg_and_sync_dp to CudaGraphManager.dispatch, which then
skips FULL candidates. Python only (vllm/v1/worker/gpu/cudagraph_utils.py, dp_utils.py,
model_runner.py); applied clean.
Why: DSpark output corruption (vllm-project#62417): a short prefill was padded into an unconstrained FULL
graph captured on a decode-shaped batch; the logits of its last position came out flat and every
generated token was garbage. Chosen over vllm-project#59986 (attention builders to UNIFORM_BATCH): 8 lines,
local to dispatch.
DP check (our DEP files): the prefill rank now asks for PIECEWISE or NONE; the DP sync takes the
minimum mode over ranks. NONE makes all ranks eager. PIECEWISE exists only when the mixed mode is
PIECEWISE, and then no FULL graph is unconstrained in query length, so the synced re-dispatch
(max_query_len=None) cannot land in FULL either. No DP change needed.
Upstream: vllm-project#62535

(cherry picked from commit 8461147)
…kspace (vllm-project#60613)

What: upstream PR vllm-project#60613 (open, head a54f4d5) on base e68efc6. combine_topk_swa_indices
fills the caller's workspace with -1 before the kernel writes each row's valid prefix (the out=None
path already allocates with -1). One line, Python only
(vllm/models/deepseek_v41/common/ops/cache_utils.py); applied clean. Port of vllm-project#55299 (deepseek_v4).
Why: the kernel stores only topk_len + swa_len entries per row, so FLASHMLA_MEGA_ATTN_DSV41
prefill (our backend) read stale indices from earlier batches in the shared workspace and
produced NaN (first 127 tokens; rows after a bounded-replay start).
Upstream: vllm-project#60613

(cherry picked from commit be7da5b)
…llm-project#62040)

What: upstream PR vllm-project#62040 (open, head 9ae4c35) on base e68efc6. With one decode query length,
a capture size rounded up to that length is clamped to max_num_reqs * decode_query_len, so the
full batch gets a FULL graph. Python only (vllm/v1/worker/gpu/cudagraph_utils.py) plus its unit
test; applied clean.
Why: the DSpark draft decodes k tokens per request but its capture sizes follow the target's
k + 1; rounding up can step over max_num_seqs * k, the full-batch graph is skipped and every
full-batch draft step runs eagerly (PR: +4.4% decode tok/s at DEP4, GB200, vendor). Our B300 files
(128 seqs, k5: full draft batch 640 tokens) are above the 512 capture cap, so it matters for the
768-cap A/B (N06 -arms), not the cap-512 files.
Upstream: vllm-project#62040

(cherry picked from commit 35305fe)
What: upstream PR vllm-project#60995 (open, head e70e480) on base e68efc6. kernel_warmup runs
deep_gemm_warmup on worker.get_draft_model() too, with the target's max_num_batched_tokens.
Python only (vllm/model_executor/warmup/kernel_warmup.py, 3 lines) plus its unit test; applied
clean (the PR's base predates vllm-project#55671, no overlap with its hunk).
Why: the DSpark draft's DeepGEMM GEMMs were not warmed and JIT-compiled on the first requests
(hot-path stall after every engine start; vllm-project#60929). Cost: a longer cold start (draft shapes only).
Upstream: vllm-project#60995

(cherry picked from commit 454a71f)
…t#62218)

What: upstream PR vllm-project#62218 (open, head 1e1840d) on base e68efc6. BaseRenderer.render_chat and
render_chat_async raise VLLMValidationError (HTTP 400) when a conversation has no messages.
Python only (vllm/renderers/base.py) plus its unit test; applied clean (squashed; the PR branch
has a merge of main).
Why: the HF tokenizer refuses an empty conversation, but renderers with their own encoder
(tokenizer-mode deepseek_v41, our B300 files) rendered `messages: []` to a bare BOS prompt and
answered 200 with a generated reply. The API contract wants a 400.
Upstream: vllm-project#62218

(cherry picked from commit 4ef7202)
…ant turn open (wo_eos)

What: when continue_final_message is set and the last message is from the assistant, the V4.1
tokenizer marks it wo_eos, so the encoder renders it without <|end▁of▁sentence|>. Python only
(vllm/tokenizers/deepseek_v41.py, 4 lines) plus a unit test (chat and thinking mode; a final user
message is unchanged).
Why: the tokenizer ignored continue_final_message: a prefill request (assistant prefix to continue)
ended with EOS, so the model was asked to continue after a closed turn. DeepSeek's reference
encoding/encoding.py (DeepSeek-V4.1-Flash-1017@1bae0e10) renders the continued message with
wo_eos. Found by the K2 encoder byte-diff (bitlane evidence/P3-proxy/k2-encoding: prefill_off,
prefill_on). Upstream vllm-project#57882 covered this among other generation controls and was closed unmerged
(2026-10-10); no open upstream PR fixes it for the Python V4.1 tokenizer.
Bitlane-only: upstream encoder ignores continue_final_message; reference encoding.py@1bae0e10 uses wo_eos

(cherry picked from commit 8c0acab)
…motion

What: our pipeline, on bitlane/release-dev only (no upstream file changed):
- .bitlane/check-stack.py: hygiene gate for BASE..HEAD (subject "[bitlane] ", an "Upstream: <vllm PR>" or
  "Bitlane-only: <reason>" line, overlay-only files unless "Binary-change: yes", no merges, upstream PR state);
  .bitlane/test_check_stack.py its self-check on a synthetic repo.
- .github/workflows/bitlane-sync.yml: daily merge-upstream of main, rebase onto the newest upstream main commit
  with a nightly image and green buildkite/ci, gate, build, then release-dev moves (force-with-lease); else an issue.
- .github/workflows/bitlane-build.yml: gate, then the image on the bitlane builder host over OIDC + SSM
  (.bitlane/builder.sh), CPU unit tests of the touched test files (.bitlane/cpu-skip: GPU-only ones), status
  bitlane/image = the digest.
- .github/workflows/bitlane-release.yml: a push to bitlane/release-prod needs a fast-forward to a release-dev commit
  with statuses bitlane/image and bitlane/qualified; copies that image (same digest) to the release repository,
  tags bitlane/release-<series>.<N> and writes the GitHub release.
Why: keep the stack rebased on upstream main with every commit justified, and make every image and release from
one reproducible path. Design: bitlane docs/research/vllm-fork-ci.md.
Bitlane-only: bitlane CI and release tooling

(cherry picked from commit c64a887)
…roject#62095)

What: upstream PR vllm-project#62095 (draft, head d5b4e80, author robertgshaw2-redhat) on base e68efc6.
A ReasoningEndFinder in the detokenizer locates the end of reasoning in the output token ids with
the request's own --reasoning-parser; while reasoning is open, client stop strings stay dormant,
and afterwards check_stop_strings gets a search_start at the first content character. It arms only
when the chat serving layer already resolved reasoning_ended=False (the signal structured outputs
uses), so thinking-off requests, servers without a reasoning parser, /v1/completions, /v1/responses
and offline LLM keep today's behaviour. Python only (vllm/v1/engine/{detokenizer,output_processor,
async_llm,llm_engine}.py) plus its unit test; applied clean on our stack.
Why: a client stop string matched inside the reasoning segment, so generation ended before
</think>: the reasoning parser found no content and the customer got finish_reason "stop" with
empty content and no answer. Measured on our hardware 2026-10-20: the conformance check
stop_in_reasoning (qualify/conformance.py, stop ["10"], thinking on) failed identically on both
DP4 nodes n18 and n19 with image bl0321, Qwen3.5-2B, data-parallel-size 4, reasoning-parser qwen3:
"finish stop, content '', '10' in reasoning: False". The stop conformance check (same prompt,
thinking off) passed before and after: stop strings still apply to content.
Tests: tests/detokenizer/test_stop_string_while_stop_model_terminates.py, 3 new cases (8 with
parameters) in the bl0322 image on CPU: 43 passed with the patch, 8 failed / 35 passed with the
finder disabled. tests/detokenizer and tests/v1/engine/test_output_processor.py show the same
pre-existing failures with and without the patch (gated HF repos, no GPU).
Upstream: vllm-project#62095

(cherry picked from commit 765579d)
…stage reports a commit status

What: our pipeline only (no upstream file changed).
- bitlane-build.yml: on a push to bitlane/release-dev, after the image, job e2e runs bitlane
  control/e2e.sh on our dev environment (never prod) with that image, on the builder over SSM
  (.bitlane/e2e.sh -> node/fork-ci.sh e2e); timeout 170 min, concurrency group bitlane-dev-e2e,
  OIDC session 3 h (the build job too: a build may wait 2.5 h, the default session is 1 h).
  A rebased candidate from bitlane-sync gets its image only.
- bitlane-release.yml: after the release copy (no rebuild: a rebuild is another digest than the
  one qualified), job e2e runs the release image on dev with its production run files (-bl<N>);
  PASS sets bitlane/promotable. A re-run of an existing release runs the e2e again.
- Statuses: the first step of each run posts pending for every context it will set
  (bitlane/image and bitlane/e2e on release-dev; bitlane/release and bitlane/promotable on
  release-prod); one report job (if: always(), needs every job, statuses: write only, no AWS)
  posts the final state of each: success, failure, or error with "NOT RUN: <reason>" when the
  e2e did not run (no dev GPU node, a stage before it failed, cancelled). Never success for a
  run that did not happen. bitlane/image keeps the digest as its description (the release
  guard reads it); the per-step status write is gone.
- .bitlane/test_workflows.py (stdlib, run by the gate): every workflow that sets statuses
  posts pending first, has a report job with if: always() that needs every job, and writes
  final states only there; a self-check on a synthetic workflow keeps it from going blind.
Why: the commit page must always say pending, success or failure; before this a hygiene-gate
failure posted no status at all and nothing showed during a 30 min build. The user asked for
an automatic end-to-end test of every release-dev and release-prod image (2026-10-20). Design:
bitlane docs/research/dev-prod-environments.md.
Bitlane-only: bitlane CI and release tooling

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX
(cherry picked from commit 45e653c)
The image's BITLANE_COMMIT and BITLANE_CHANNEL (set by bitlane's control/build-engine.sh) are printed before
anything else: "bitlane dev release version 0.32.0.3 <commit>". A node's journal then proves which fork commit
it runs, end to end from a merge to bitlane/release-dev through fork CI to a node.

Bitlane-only: build identification for our overlay images; upstream has no such build variables.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX
(cherry picked from commit 832984c)
…every commit they bring

Merging PR #3 with the default button put a merge commit on release-dev, and the gate failed every build after
it: no later PR could remove that commit. A 'Merge pull request #N from callgideon/...' commit is now a note;
the PR's own commits are checked one by one as before, and bitlane-sync's daily rebase drops the merge.

Bitlane-only: bitlane CI hygiene gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX
(cherry picked from commit 1aa9b4d)
…hen its key is set

The report job edits a single comment on the commit's PR on every run: hygiene gate, image build, the image
digest, the end-to-end result on dev, and the run link. It posts as the mumbo-bot GitHub App (app 5295930) when
the fork has secret MUMBO_BOT_KEY, else as github-actions[bot]. No new action: the JWT is signed with openssl.

Bitlane-only: bitlane CI reporting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX
(cherry picked from commit 2dc423c)
…r ssh

A trivial change to prove merge -> gate -> image -> dev e2e on the off-AWS H200s (bitlane evidence/offaws-pipeline).

Bitlane-only: CI documentation, no engine change
(cherry picked from commit 5abb127)
@reyanshsolis
reyanshsolis changed the base branch from bitlane/release-dev to bitlane/release-exp October 21, 2026 11:38
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.