Skip to content

feat(samples): three-Spark ring DeepSeek-V4.1-Flash EXL3 TP3 samples and the multi-node guide section - #1816

Merged
Defilan merged 6 commits into
defilantech:mainfrom
Defilan:feat/three-sparks-ring-samples
Sep 14, 2026
Merged

Defilan merged 6 commits into
defilantech:mainfrom
Defilan:feat/three-sparks-ring-samples

Conversation

@Defilan

@Defilan Defilan commented Sep 13, 2026 •

Copy link
Copy Markdown
Member

What

Samples and a guide section for running DeepSeek-V4.1-Flash EXL3 3.5bpw at tensor-parallel 3 across three DGX Sparks cabled in a ring (no switch), on the llmkube-vllm-cuda-gb10-dsv41-exl3 runtime image:

  • config/samples/inferenceservice_multinode_vllm_three_sparks_ring.yaml: the InferenceService exactly as it is serving on the lab ring today (multiNode fabric block with the management IP as the bootstrap plane and all four ConnectX ports as the data plane, NCCL_IB_SUBNET_AWARE_ROUTING=1, the measured memory knobs).
  • config/samples/model_dsv41_flash_exl3.yaml: the Model (the 54 files from an S3-compatible store; every member needs all of them locally, including the two 101 GB Engram tables).
  • config/samples/jobs/dsv41-tp3-config.yaml and config/samples/jobs/drop-page-cache.yaml: the two checkpoint-side Jobs a TP3 boot needs (the 64 to 72 head padding in config.json, and a page-cache drop before the group boots).
  • docs/site/guides/multi-node-inference.md: a "Three-Spark ring" section explaining why fabric.address and ibHCA are two different planes on a ring, the one NCCL variable that makes a P0 to P1 ring work, and the measured numbers.
  • scripts/validate-samples.py: Job added to the standard kinds so the samples validate.

Why

The multi-node field docs describe a switched fabric. On a cabled ring no fabric address is reachable from every member, and NCCL's default NIC pairing (by channel index on both ends) cannot satisfy an odd cycle, so a group dies with ncclSystemError during channel setup. Both facts were found the hard way and are now written down next to a working example. The samples give a reproducible three-Spark deployment for the largest open model that fits three 128 GB Sparks.

Refs #1423, Refs #1752 (both stay open; the CRD-level follow-up is a separate sub-project).

How

The InferenceService is the lab's measured configuration copied verbatim (node names and management IPs are one lab's, the header says so), trimmed to the built image's contract, with DSpark k=5 speculative decoding and a 131,072-token context. Measured 2026-09-13 on the ring with the built image: three-rank NCCL all-reduce 23.2 GB/s bus bandwidth; prefill 1,094 to 1,334 tok/s from 3.4k to 49.8k prompt tokens; decode 26.5 tok/s single-stream without speculation, 31 to 35 with DSpark k=5 on prose and 65 on code; 82.5 GiB per Spark with the drafter (79.5 without). Design decisions worth noting: gpuMemoryUtilization: 0.78 is the floor that leaves a KV pool at TP3 (0.72 is negative); MAX_JOBS=1 bounds any first-serve JIT to one nvcc; the guide tells readers to turn swap off on the members, because a swapping Spark pages kubelet out instead of OOM-killing the worker.

Merge order: after defilantech/llmkube-runtimes PR #41, which publishes the :stable tag the sample references; draft until then.

Assisted-by: Claude Code (drafted the sample manifests from the measured InferenceService, the guide section, and this PR text; verified with make validate-samples, server-side dry-runs against the lab cluster, and the ring boot the numbers come from).

Checklist

  • Tests added/updated (sample validation covers the new manifests; no Go code changed)
  • make test passes locally (not affected: no Go changes; make validate-samples reports 34/34 valid)
  • make lint passes locally (no Go changes)
  • Commit messages follow conventional commits
  • All commits are signed off (git commit -s) per DCO
  • AI assistance (if any) is disclosed above, per CONTRIBUTING.md
  • Documentation updated (if user-facing change)

…EXL3 TP3 InferenceService, its Model, and the two checkpoint-side Jobs

Signed-off-by: Christopher Maher <chris@mahercode.io>
…ane, subnet-aware NCCL routing, and the measured numbers

Signed-off-by: Christopher Maher <chris@mahercode.io>
@codecov

codecov Bot commented Sep 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…a 131k context

Signed-off-by: Christopher Maher <chris@mahercode.io>
… ring section

Signed-off-by: Christopher Maher <chris@mahercode.io>
…make the ring sample's comments self-contained

Signed-off-by: Christopher Maher <chris@mahercode.io>
…es, name the ports, and warn about the playbook's leg subnets

Signed-off-by: Christopher Maher <chris@mahercode.io>
@Defilan
Defilan marked this pull request as ready for review September 14, 2026 00:01
@Defilan
Defilan merged commit 6cb8389 into defilantech:main Sep 14, 2026
9 checks passed
@github-actions github-actions Bot mentioned this pull request Sep 14, 2026
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Sep 15, 2026
…25 ➔ 0.9.27) (#2111)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/defilantech/charts/llmkube](https://github.com/defilantech/LLMKube) | patch | `0.9.25` → `0.9.27` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/567) for more information.

---

### Release Notes

<details>
<summary>defilantech/LLMKube (ghcr.io/defilantech/charts/llmkube)</summary>

### [`v0.9.27`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0927-2026-09-14)

[Compare Source](defilantech/LLMKube@v0.9.26...v0.9.27)

##### Bug Fixes

- **deps:** bump google.golang.org/grpc to the CVE-2026-84445 fix ([#&#8203;1823](defilantech/LLMKube#1823)) ([cff58b5](defilantech/LLMKube@cff58b5))

### [`v0.9.26`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0926-2026-09-14)

[Compare Source](defilantech/LLMKube@v0.9.25...v0.9.26)

##### Features

- **controller:** metric-gated idle probe for the generic runtime ([#&#8203;1802](defilantech/LLMKube#1802)) ([750be58](defilantech/LLMKube@750be58))
- **controller:** ModelPool reclaim policy returns the slot to spec.default after idle ([#&#8203;1796](defilantech/LLMKube#1796)) ([9fd13cd](defilantech/LLMKube@9fd13cd))
- **foreman:** expose node label on FleetNode metrics for fleet joins ([#&#8203;1785](defilantech/LLMKube#1785)) ([5db0f7c](defilantech/LLMKube@5db0f7c))
- **foreman:** serve Agents from Anthropic-native endpoints ([#&#8203;1811](defilantech/LLMKube#1811)) ([a2e2b2e](defilantech/LLMKube@a2e2b2e))
- **inferenceservice:** add resources.memoryLimit to decouple ceiling from reservation ([#&#8203;1764](defilantech/LLMKube#1764)) ([53e5090](defilantech/LLMKube@53e5090))
- **model:** resume interrupted single-file downloads via a content-keyed partial ([#&#8203;1765](defilantech/LLMKube#1765)) ([#&#8203;1807](defilantech/LLMKube#1807)) ([e3384f4](defilantech/LLMKube@e3384f4))
- **router:** mount /v1/embeddings and /v1/rerank on the proxy ([#&#8203;1819](defilantech/LLMKube#1819)) ([3af89e9](defilantech/LLMKube@3af89e9))
- **router:** opt-in endpoint-level backends for per-request balancing ([#&#8203;1820](defilantech/LLMKube#1820)) ([d9349e2](defilantech/LLMKube@d9349e2))
- **router:** poolActivation IfIdle serves the warm member when the incumbent is busy ([#&#8203;1787](defilantech/LLMKube#1787)) ([d211a53](defilantech/LLMKube@d211a53))
- **samples:** three-Spark ring DeepSeek-V4.1-Flash EXL3 TP3 samples and the multi-node guide section ([#&#8203;1816](defilantech/LLMKube#1816)) ([6cb8389](defilantech/LLMKube@6cb8389))

##### Bug Fixes

- **agent:** resolve hf:// model sources on the metal path ([#&#8203;1759](defilantech/LLMKube#1759)) ([#&#8203;1789](defilantech/LLMKube#1789)) ([0d4879c](defilantech/LLMKube@0d4879c))
- **controller:** hold a multiNode group while a member is staging ([#&#8203;1757](defilantech/LLMKube#1757)) ([#&#8203;1806](defilantech/LLMKube#1806)) ([116ba95](defilantech/LLMKube@116ba95))
- **controller:** probe multiNode worker rendezvous, fix readyMembers ([#&#8203;1781](defilantech/LLMKube#1781)) ([#&#8203;1782](defilantech/LLMKube#1782)) ([97acb8e](defilantech/LLMKube@97acb8e))
- **controller:** re-resolve a Model when spec.source changes ([#&#8203;1767](defilantech/LLMKube#1767)) ([#&#8203;1805](defilantech/LLMKube#1805)) ([9149419](defilantech/LLMKube@9149419))
- **foreman-chart:** name the FleetNode in the stale-heartbeat alert ([#&#8203;1779](defilantech/LLMKube#1779)) ([#&#8203;1783](defilantech/LLMKube#1783)) ([d4138d2](defilantech/LLMKube@d4138d2))
- **foreman:** anchor coder rail diffs to the resolved upstream base SHA ([#&#8203;1803](defilantech/LLMKube#1803)) ([08ce692](defilantech/LLMKube@08ce692))
- **foreman:** clear a FleetNode reservation whose AgenticTask was deleted ([#&#8203;1791](defilantech/LLMKube#1791)) ([#&#8203;1804](defilantech/LLMKube#1804)) ([0cc53c4](defilantech/LLMKube@0cc53c4))
- **foreman:** drain tasks before agent exit ([#&#8203;1799](defilantech/LLMKube#1799)) ([9b22e73](defilantech/LLMKube@9b22e73))
- **foreman:** omit issue references from the reviewer prompt when the payload carries none ([#&#8203;1761](defilantech/LLMKube#1761)) ([#&#8203;1808](defilantech/LLMKube#1808)) ([36e0e0b](defilantech/LLMKube@36e0e0b))
- **foreman:** reap orphaned in-cluster FleetNodes when agent pods disappear ([#&#8203;1778](defilantech/LLMKube#1778)) ([#&#8203;1792](defilantech/LLMKube#1792)) ([9fbee34](defilantech/LLMKube@9fbee34))
- **foreman:** reject unverified reviewer GO ([#&#8203;1801](defilantech/LLMKube#1801)) ([27910ed](defilantech/LLMKube@27910ed))
- **foreman:** tell a spin from a real max-turns burn ([#&#8203;1814](defilantech/LLMKube#1814)) ([3e93fe4](defilantech/LLMKube@3e93fe4))
- **foreman:** use the coder's PR description when the PR opens on review GO ([#&#8203;1768](defilantech/LLMKube#1768)) ([#&#8203;1776](defilantech/LLMKube#1776)) ([bff8344](defilantech/LLMKube@bff8344))
- **grafana:** separate decode throughput axis ([#&#8203;1815](defilantech/LLMKube#1815)) ([bf77989](defilantech/LLMKube@bf77989))
- **model:** re-resolve a Model whose spec changed when no cache key exists ([#&#8203;1818](defilantech/LLMKube#1818)) ([81be593](defilantech/LLMKube@81be593))
- **rollout:** do not defer a scale-from-zero rollout as PodsBusy ([#&#8203;1794](defilantech/LLMKube#1794)) ([062332f](defilantech/LLMKube@062332f))
- **router:** return 503 + Retry-After when every IfIdle backend skips busy ([#&#8203;1797](defilantech/LLMKube#1797)) ([396177d](defilantech/LLMKube@396177d))

##### Documentation

- **labs:** reference build for GLM-5.3-Flash EXL3 on two DGX Sparks ([#&#8203;1784](defilantech/LLMKube#1784)) ([cbdbb25](defilantech/LLMKube@cbdbb25))

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Paris)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC44My4xIiwidXBkYXRlZEluVmVyIjoiNDQuODMuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUvY29udGFpbmVyIiwidHlwZS9wYXRjaCJdfQ==-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/2111
hbjydev pushed a commit to hbjydev/phoebe that referenced this pull request Sep 20, 2026
…2 → 0.9.29) (#667)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/defilantech/charts/llmkube](https://github.com/defilantech/LLMKube) | patch | `0.9.2` → `0.9.29` |

---

### Release Notes

<details>
<summary>defilantech/LLMKube (ghcr.io/defilantech/charts/llmkube)</summary>

### [`v0.9.29`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0929-2026-09-16)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.28...v0.9.29)

##### Bug Fixes

- **controller:** keep generated args when a non-CLI runtime overrides command ([#&#8203;1843](https://github.com/defilantech/LLMKube/issues/1843)) ([c262265](https://github.com/defilantech/LLMKube/commit/c262265a88a82549565d42788e33f8d38fe55c0c))

### [`v0.9.28`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0928-2026-09-16)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.27...v0.9.28)

##### Features

- **runtime:** honor spec.args verbatim when spec.command is overridden ([#&#8203;1829](https://github.com/defilantech/LLMKube/issues/1829)) ([f2fcc09](https://github.com/defilantech/LLMKube/commit/f2fcc09a33aa52d26cd75e43d8537dfc388523c0))

##### Bug Fixes

- **foreman:** let the coder resolve a rebase conflict instead of failing loud ([#&#8203;1840](https://github.com/defilantech/LLMKube/issues/1840)) ([8dfd531](https://github.com/defilantech/LLMKube/commit/8dfd531f2f4a9ed9971cad15e0333f596ee3c34a))
- **router:** bound pool swaps and stop stale deactivate racing a new activation ([#&#8203;1838](https://github.com/defilantech/LLMKube/issues/1838)) ([a598ec7](https://github.com/defilantech/LLMKube/commit/a598ec7740641fe4c74fefa5fad6051a795179c1))
- **router:** rewrite model to served name on IfIdle fall-through ([#&#8203;1836](https://github.com/defilantech/LLMKube/issues/1836)) ([8276b50](https://github.com/defilantech/LLMKube/commit/8276b509aa6d6f9ee9c78d7a3b0db54e82558f48))

##### Documentation

- **labs:** Qwen3.8-Flash-Next with MTP on one Strix Halo ([#&#8203;1832](https://github.com/defilantech/LLMKube/issues/1832)) ([3acb00d](https://github.com/defilantech/LLMKube/commit/3acb00ddc05a30945b92acbfe67d6cccd469e02c))

### [`v0.9.27`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0927-2026-09-14)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.26...v0.9.27)

##### Bug Fixes

- **deps:** bump google.golang.org/grpc to the CVE-2026-84445 fix ([#&#8203;1823](https://github.com/defilantech/LLMKube/issues/1823)) ([cff58b5](https://github.com/defilantech/LLMKube/commit/cff58b532de2dabfbd9362abd1c98dc844b02c85))

### [`v0.9.26`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0926-2026-09-14)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.25...v0.9.26)

##### Features

- **controller:** metric-gated idle probe for the generic runtime ([#&#8203;1802](https://github.com/defilantech/LLMKube/issues/1802)) ([750be58](https://github.com/defilantech/LLMKube/commit/750be58dfa5542ec34a74c82e2fa10d9441ea8a9))
- **controller:** ModelPool reclaim policy returns the slot to spec.default after idle ([#&#8203;1796](https://github.com/defilantech/LLMKube/issues/1796)) ([9fd13cd](https://github.com/defilantech/LLMKube/commit/9fd13cd8e16ead745b1fee1a303ca5f442ac029b))
- **foreman:** expose node label on FleetNode metrics for fleet joins ([#&#8203;1785](https://github.com/defilantech/LLMKube/issues/1785)) ([5db0f7c](https://github.com/defilantech/LLMKube/commit/5db0f7c2e0a4309aaa15372c6c71e8c61a99e3dd))
- **foreman:** serve Agents from Anthropic-native endpoints ([#&#8203;1811](https://github.com/defilantech/LLMKube/issues/1811)) ([a2e2b2e](https://github.com/defilantech/LLMKube/commit/a2e2b2ea9b6976c34cbaf219de3d3aa2fd94cf54))
- **inferenceservice:** add resources.memoryLimit to decouple ceiling from reservation ([#&#8203;1764](https://github.com/defilantech/LLMKube/issues/1764)) ([53e5090](https://github.com/defilantech/LLMKube/commit/53e5090f6a097c380f6106e469ea740041ec66e7))
- **model:** resume interrupted single-file downloads via a content-keyed partial ([#&#8203;1765](https://github.com/defilantech/LLMKube/issues/1765)) ([#&#8203;1807](https://github.com/defilantech/LLMKube/issues/1807)) ([e3384f4](https://github.com/defilantech/LLMKube/commit/e3384f46f1e7ede48d275133c6eacecc92554ddd))
- **router:** mount /v1/embeddings and /v1/rerank on the proxy ([#&#8203;1819](https://github.com/defilantech/LLMKube/issues/1819)) ([3af89e9](https://github.com/defilantech/LLMKube/commit/3af89e9cb8e56bd20cea39197d9fa325f59f47b0))
- **router:** opt-in endpoint-level backends for per-request balancing ([#&#8203;1820](https://github.com/defilantech/LLMKube/issues/1820)) ([d9349e2](https://github.com/defilantech/LLMKube/commit/d9349e28b7aa9cb94d86625065f30d979404c9b6))
- **router:** poolActivation IfIdle serves the warm member when the incumbent is busy ([#&#8203;1787](https://github.com/defilantech/LLMKube/issues/1787)) ([d211a53](https://github.com/defilantech/LLMKube/commit/d211a53c4a00c0a44f832397b91095870ea546d8))
- **samples:** three-Spark ring DeepSeek-V4.1-Flash EXL3 TP3 samples and the multi-node guide section ([#&#8203;1816](https://github.com/defilantech/LLMKube/issues/1816)) ([6cb8389](https://github.com/defilantech/LLMKube/commit/6cb8389861b26f9649fd9f3ae7deaae9f92b8eac))

##### Bug Fixes

- **agent:** resolve hf:// model sources on the metal path ([#&#8203;1759](https://github.com/defilantech/LLMKube/issues/1759)) ([#&#8203;1789](https://github.com/defilantech/LLMKube/issues/1789)) ([0d4879c](https://github.com/defilantech/LLMKube/commit/0d4879c503bf936cd1b2ac3778d86af758de5e4b))
- **controller:** hold a multiNode group while a member is staging ([#&#8203;1757](https://github.com/defilantech/LLMKube/issues/1757)) ([#&#8203;1806](https://github.com/defilantech/LLMKube/issues/1806)) ([116ba95](https://github.com/defilantech/LLMKube/commit/116ba95cb293b6681f1532a7b7f615b95fbd1dc3))
- **controller:** probe multiNode worker rendezvous, fix readyMembers ([#&#8203;1781](https://github.com/defilantech/LLMKube/issues/1781)) ([#&#8203;1782](https://github.com/defilantech/LLMKube/issues/1782)) ([97acb8e](https://github.com/defilantech/LLMKube/commit/97acb8eac270af9eac442eac36be2f8e840781a7))
- **controller:** re-resolve a Model when spec.source changes ([#&#8203;1767](https://github.com/defilantech/LLMKube/issues/1767)) ([#&#8203;1805](https://github.com/defilantech/LLMKube/issues/1805)) ([9149419](https://github.com/defilantech/LLMKube/commit/9149419575e2ac2231fd2dfe09500198bf265434))
- **foreman-chart:** name the FleetNode in the stale-heartbeat alert ([#&#8203;1779](https://github.com/defilantech/LLMKube/issues/1779)) ([#&#8203;1783](https://github.com/defilantech/LLMKube/issues/1783)) ([d4138d2](https://github.com/defilantech/LLMKube/commit/d4138d2c64fe49fa7b29206939b37c0cd72b98f8))
- **foreman:** anchor coder rail diffs to the resolved upstream base SHA ([#&#8203;1803](https://github.com/defilantech/LLMKube/issues/1803)) ([08ce692](https://github.com/defilantech/LLMKube/commit/08ce6927cc6214ff379255ffde436260dcf0d719))
- **foreman:** clear a FleetNode reservation whose AgenticTask was deleted ([#&#8203;1791](https://github.com/defilantech/LLMKube/issues/1791)) ([#&#8203;1804](https://github.com/defilantech/LLMKube/issues/1804)) ([0cc53c4](https://github.com/defilantech/LLMKube/commit/0cc53c4ae414060d3f11aff3d3738d90b42e99b0))
- **foreman:** drain tasks before agent exit ([#&#8203;1799](https://github.com/defilantech/LLMKube/issues/1799)) ([9b22e73](https://github.com/defilantech/LLMKube/commit/9b22e7364c4476c62fb8ec210dad44056a27ecff))
- **foreman:** omit issue references from the reviewer prompt when the payload carries none ([#&#8203;1761](https://github.com/defilantech/LLMKube/issues/1761)) ([#&#8203;1808](https://github.com/defilantech/LLMKube/issues/1808)) ([36e0e0b](https://github.com/defilantech/LLMKube/commit/36e0e0bb2a49793bab62f42b3d2415c66fcf637b))
- **foreman:** reap orphaned in-cluster FleetNodes when agent pods disappear ([#&#8203;1778](https://github.com/defilantech/LLMKube/issues/1778)) ([#&#8203;1792](https://github.com/defilantech/LLMKube/issues/1792)) ([9fbee34](https://github.com/defilantech/LLMKube/commit/9fbee34cdaf28237c831175f9eac2479ce8f24d5))
- **foreman:** reject unverified reviewer GO ([#&#8203;1801](https://github.com/defilantech/LLMKube/issues/1801)) ([27910ed](https://github.com/defilantech/LLMKube/commit/27910ed9e09ea7b014f2180af03a4d3e8cfccc3c))
- **foreman:** tell a spin from a real max-turns burn ([#&#8203;1814](https://github.com/defilantech/LLMKube/issues/1814)) ([3e93fe4](https://github.com/defilantech/LLMKube/commit/3e93fe4e3ec0666240a67ca4e647027d0e982794))
- **foreman:** use the coder's PR description when the PR opens on review GO ([#&#8203;1768](https://github.com/defilantech/LLMKube/issues/1768)) ([#&#8203;1776](https://github.com/defilantech/LLMKube/issues/1776)) ([bff8344](https://github.com/defilantech/LLMKube/commit/bff8344c766ec35f5e019cb46f652b82e5ff365c))
- **grafana:** separate decode throughput axis ([#&#8203;1815](https://github.com/defilantech/LLMKube/issues/1815)) ([bf77989](https://github.com/defilantech/LLMKube/commit/bf77989c94542b7e4ba0e75f211dd489f3c04d9b))
- **model:** re-resolve a Model whose spec changed when no cache key exists ([#&#8203;1818](https://github.com/defilantech/LLMKube/issues/1818)) ([81be593](https://github.com/defilantech/LLMKube/commit/81be593387ef3697926b06a3f5c3398d34edab38))
- **rollout:** do not defer a scale-from-zero rollout as PodsBusy ([#&#8203;1794](https://github.com/defilantech/LLMKube/issues/1794)) ([062332f](https://github.com/defilantech/LLMKube/commit/062332f67712459936551e16cc0a4221c64411c1))
- **router:** return 503 + Retry-After when every IfIdle backend skips busy ([#&#8203;1797](https://github.com/defilantech/LLMKube/issues/1797)) ([396177d](https://github.com/defilantech/LLMKube/commit/396177d7ac8791d7dd9c5c1980af110a61e4bc75))

##### Documentation

- **labs:** reference build for GLM-5.3-Flash EXL3 on two DGX Sparks ([#&#8203;1784](https://github.com/defilantech/LLMKube/issues/1784)) ([cbdbb25](https://github.com/defilantech/LLMKube/commit/cbdbb2539ee08d5f84cd415385aa22ed877d8a1c))

### [`v0.9.25`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0925-2026-09-05)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.24...v0.9.25)

##### Features

- **foreman:** diff-coverage gate for added lines no test executes ([#&#8203;1728](https://github.com/defilantech/LLMKube/issues/1728)) ([9666346](https://github.com/defilantech/LLMKube/commit/96663461f18c9a15cc56ed004fcf53eac4bde2a7))
- **foreman:** enforce reviewer execution runs via a no-test-run rail ([#&#8203;1747](https://github.com/defilantech/LLMKube/issues/1747)) ([152811a](https://github.com/defilantech/LLMKube/commit/152811a5b050494bb6e107464d030d8f41b35f0f))
- **foreman:** live turn stream so a coder run can be watched as it happens ([#&#8203;1717](https://github.com/defilantech/LLMKube/issues/1717)) ([34b9564](https://github.com/defilantech/LLMKube/commit/34b9564d93e27ca09c48d85ec0a9d7df0efa44ac))
- **foreman:** report missing planned children in Dispatched condition ([#&#8203;1743](https://github.com/defilantech/LLMKube/issues/1743)) ([e9ce0ff](https://github.com/defilantech/LLMKube/commit/e9ce0ffd7ad9e9802582e0d4fc1f3a3b14d82fc2))
- **modelrouter:** AgentGateway data plane beside Proxy and Gateway ([#&#8203;1711](https://github.com/defilantech/LLMKube/issues/1711)) ([af497b6](https://github.com/defilantech/LLMKube/commit/af497b675196b8e795bc9c4e7d810aa27f20fc5c))
- **model:** send a Hugging Face token on operator-driven downloads ([#&#8203;1750](https://github.com/defilantech/LLMKube/issues/1750)) ([#&#8203;1758](https://github.com/defilantech/LLMKube/issues/1758)) ([5ef4fa0](https://github.com/defilantech/LLMKube/commit/5ef4fa03f8c65998d1ed5b3841fd86c849b8b02e))
- multi-node inference groups (spec.multiNode) for vLLM ([#&#8203;1746](https://github.com/defilantech/LLMKube/issues/1746)) ([b56c080](https://github.com/defilantech/LLMKube/commit/b56c08058084ba00876eb001096abdadd80e34a2))
- **observability:** pin the llama.cpp metric contract ([#&#8203;1186](https://github.com/defilantech/LLMKube/issues/1186)) ([#&#8203;1754](https://github.com/defilantech/LLMKube/issues/1754)) ([da6dda9](https://github.com/defilantech/LLMKube/commit/da6dda9dabbc96edd7401bc221be57b08af25185))

##### Bug Fixes

- **agent:** sign s3:// model fetches on the metal path ([#&#8203;1709](https://github.com/defilantech/LLMKube/issues/1709)) ([3f30570](https://github.com/defilantech/LLMKube/commit/3f305703d6a5027e57efd9fedf19ab7c7ac9dc35))
- **agent:** skip comment-only hunks in the per-hunk mutation pass ([#&#8203;1742](https://github.com/defilantech/LLMKube/issues/1742)) ([82c0ffd](https://github.com/defilantech/LLMKube/commit/82c0ffd60bdcdc570b862dc748197ea177adebde))
- **controller:** bound inference container memory with a limit, and validate the quantity at admission ([#&#8203;1726](https://github.com/defilantech/LLMKube/issues/1726)) ([e4a3669](https://github.com/defilantech/LLMKube/commit/e4a3669afe3fcc4be46c9d4de8368a62216432bc))
- **controller:** make zero-findings scope-overlap demotion inert ([#&#8203;1737](https://github.com/defilantech/LLMKube/issues/1737)) ([8a44529](https://github.com/defilantech/LLMKube/commit/8a445297be8ac7f43bf306750a7fd3b0ca5ec080))
- **foreman:** bound the dependency wait when TimeoutSeconds is unset ([#&#8203;1736](https://github.com/defilantech/LLMKube/issues/1736)) ([db98633](https://github.com/defilantech/LLMKube/commit/db986338a9c468e908f2e6f6a2a670d34804bc7d))
- **foreman:** clear Dispatched condition on terminal Workloads ([#&#8203;1741](https://github.com/defilantech/LLMKube/issues/1741)) ([9786684](https://github.com/defilantech/LLMKube/commit/9786684f612dc645cf9e797ab64fbdfc1e327f03))
- **foreman:** pass upstreamURL to the coder post-push envtest gate ([#&#8203;1732](https://github.com/defilantech/LLMKube/issues/1732)) ([8d47306](https://github.com/defilantech/LLMKube/commit/8d47306b5ea98021c11c5a5b2ca2885f38fd70ae))
- **foreman:** preserve the workspace when the agent loop ends unsuccessfully ([#&#8203;1716](https://github.com/defilantech/LLMKube/issues/1716)) ([d17a7dd](https://github.com/defilantech/LLMKube/commit/d17a7dd8bbd9a1f52f0974c702cc544bb6d1e46f))
- **foreman:** report gate Job DeadlineExceeded as GATE-ERROR and make the gate deadline settable ([#&#8203;1748](https://github.com/defilantech/LLMKube/issues/1748)) ([#&#8203;1751](https://github.com/defilantech/LLMKube/issues/1751)) ([ef69b4c](https://github.com/defilantech/LLMKube/commit/ef69b4c09f08f648d21590d6367cce75c746e3aa))
- **foreman:** report rejected submissions on max-turns INCOMPLETE ([#&#8203;1714](https://github.com/defilantech/LLMKube/issues/1714)) ([e4f88e9](https://github.com/defilantech/LLMKube/commit/e4f88e9885ffe9152b3d6647c9c62aed5571e155))
- **foreman:** report the packages the diff-coverage gate could not measure ([#&#8203;1734](https://github.com/defilantech/LLMKube/issues/1734)) ([15ba740](https://github.com/defilantech/LLMKube/commit/15ba7408b3f3b4f4c9e138c42acba565209565b9))
- **foreman:** validate resolvedBy before ALREADY-RESOLVED skips verification ([#&#8203;1730](https://github.com/defilantech/LLMKube/issues/1730)) ([2b35d71](https://github.com/defilantech/LLMKube/commit/2b35d71454058abe91cdf5a22c5a42e6890ebceb))

##### Documentation

- **labs:** link the build page absolutely so the site prerender resolves it ([#&#8203;1756](https://github.com/defilantech/LLMKube/issues/1756)) ([5543aa9](https://github.com/defilantech/LLMKube/commit/5543aa986fd6e0522d6d3c64cd15d426972a3d3b))
- **labs:** reference build for DeepSeek V4 Flash Vision on two DGX Sparks ([#&#8203;1755](https://github.com/defilantech/LLMKube/issues/1755)) ([e80fd7d](https://github.com/defilantech/LLMKube/commit/e80fd7da01b5b69a9ce5bec41c99781f44376b9c))

### [`v0.9.24`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0924-2026-08-29)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.23...v0.9.24)

##### Features

- **foreman:** make draft PR creation configurable per Agent ([#&#8203;1707](https://github.com/defilantech/LLMKube/issues/1707)) ([b8c040c](https://github.com/defilantech/LLMKube/commit/b8c040c55f971663f7850bf38b30b05efa5b3131))

### [`v0.9.23`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0923-2026-08-28)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.22...v0.9.23)

##### Features

- **foreman:** per-hunk mutation coverage for envtest packages ([#&#8203;1705](https://github.com/defilantech/LLMKube/issues/1705)) ([45a5bce](https://github.com/defilantech/LLMKube/commit/45a5bce2e489ab60bda618b0a594a07b84d19892))
- **foreman:** publish Job-mode supervision capacity to FleetNode status ([#&#8203;1700](https://github.com/defilantech/LLMKube/issues/1700)) ([c8078bb](https://github.com/defilantech/LLMKube/commit/c8078bb8bccbc0931b299ff0d2675b34a7d8c81b))
- **githubpr:** open Foreman PRs as drafts and keep the reviewer's body ([#&#8203;1703](https://github.com/defilantech/LLMKube/issues/1703)) ([4cb10b9](https://github.com/defilantech/LLMKube/commit/4cb10b9e66c7c5074eae6a2d53141bc293e29e9d))

##### Bug Fixes

- **foreman:** bound and surface a missing-dependency wait ([#&#8203;1698](https://github.com/defilantech/LLMKube/issues/1698)) ([badfe7b](https://github.com/defilantech/LLMKube/commit/badfe7bed4582df365c6707254b0fb2d66bf1407))
- **foreman:** refresh the PR body after a fix cycle ([#&#8203;1704](https://github.com/defilantech/LLMKube/issues/1704)) ([a6bf02a](https://github.com/defilantech/LLMKube/commit/a6bf02add610f872f1fd01cd2006419751cd9e9a))

##### Documentation

- **spark:** correct the containerd config path that bricks a node ([#&#8203;1702](https://github.com/defilantech/LLMKube/issues/1702)) ([3be2bbb](https://github.com/defilantech/LLMKube/commit/3be2bbb7799b1d3f982ae373df8ee94b52f45d2f))

### [`v0.9.22`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0922-2026-08-28)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.21...v0.9.22)

##### Features

- **chart:** alert when an engine is up but not serving ([#&#8203;1624](https://github.com/defilantech/LLMKube/issues/1624)) ([35142e5](https://github.com/defilantech/LLMKube/commit/35142e5367a57a47a5fdd577c3484699dd1411d4))

##### Bug Fixes

- **docker:** upgrade base packages so the foreman-agent image passes Trivy ([#&#8203;1696](https://github.com/defilantech/LLMKube/issues/1696)) ([7a0dba5](https://github.com/defilantech/LLMKube/commit/7a0dba562689a03be6f335b5057c03387ca19b6f))

### [`v0.9.21`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0921-2026-08-28)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.20...v0.9.21)

##### Features

- **chart:** expose foreman-agent rollout strategy and grace period per pool ([#&#8203;1647](https://github.com/defilantech/LLMKube/issues/1647)) ([f26150c](https://github.com/defilantech/LLMKube/commit/f26150cd8a4baf8102f86df04775c92e44196fac))
- **cli:** llmkube foreman run, the unattended orchestration loop ([#&#8203;1653](https://github.com/defilantech/LLMKube/issues/1653)) ([c4b0a64](https://github.com/defilantech/LLMKube/commit/c4b0a648ab7b6c5bee6804f35c7bc75267198c01))
- **foreman:** add a rollup bucket for cross-stage contradictions ([#&#8203;1690](https://github.com/defilantech/LLMKube/issues/1690)) ([cf9f794](https://github.com/defilantech/LLMKube/commit/cf9f7942ae051aa2e66620495c448e32f6cd540a))
- **foreman:** block dependents of a contradicting dependency ([#&#8203;1695](https://github.com/defilantech/LLMKube/issues/1695)) ([9be57c2](https://github.com/defilantech/LLMKube/commit/9be57c2ff55a6f16e30d43f840c7c41c36925d7f))
- **foreman:** record claim and facts alongside cross-stage contradictions ([#&#8203;1682](https://github.com/defilantech/LLMKube/issues/1682)) ([0a35fc4](https://github.com/defilantech/LLMKube/commit/0a35fc4996e8b36f1e21c3709dc339e369319fbb))
- **foreman:** require per-clause coverage of an issue's stated behaviour ([#&#8203;1671](https://github.com/defilantech/LLMKube/issues/1671)) ([7c6368e](https://github.com/defilantech/LLMKube/commit/7c6368e3037f2e220db670412d686833e4e503d8))
- **foreman:** wire the coder stage into cross-stage contradictions (Rule 1) ([#&#8203;1680](https://github.com/defilantech/LLMKube/issues/1680)) ([c166662](https://github.com/defilantech/LLMKube/commit/c166662def70f3137e66214da83d51760d4a7682))
- **foreman:** wire the cross-stage contradiction detector into the reviewer path ([#&#8203;1675](https://github.com/defilantech/LLMKube/issues/1675)) ([a73f6fa](https://github.com/defilantech/LLMKube/commit/a73f6fabd918a582ca0d3c7c5a18f82032ef3c0c))
- **foreman:** wire the gate stage into cross-stage contradictions (Rule 4) ([#&#8203;1681](https://github.com/defilantech/LLMKube/issues/1681)) ([178ad61](https://github.com/defilantech/LLMKube/commit/178ad616dfe6a3627481db19d4205252b9a5877e))
- **helm:** support cert-manager for the webhook serving cert ([#&#8203;1646](https://github.com/defilantech/LLMKube/issues/1646)) ([fe77c9c](https://github.com/defilantech/LLMKube/commit/fe77c9c47fc71898c54a459039bff9c038460060))

##### Bug Fixes

- **controller:** populate status.acceleration by matching the current llama.cpp log format and reading the log head ([#&#8203;1677](https://github.com/defilantech/LLMKube/issues/1677)) ([3825420](https://github.com/defilantech/LLMKube/commit/38254203c80fd8dc630af6c10b936261e5d72bf8))
- **foreman-agent:** keep claiming in pollOnce until a slot is full ([#&#8203;1665](https://github.com/defilantech/LLMKube/issues/1665)) ([691f464](https://github.com/defilantech/LLMKube/commit/691f46472afdae102bed00d824aad12d1395ec26))
- **foreman:** do not open a fix iteration for an empty demoted NO-GO ([#&#8203;1641](https://github.com/defilantech/LLMKube/issues/1641)) ([4ac7e6b](https://github.com/defilantech/LLMKube/commit/4ac7e6bee39349d493496c7f599228cf104df9c6))
- **foreman:** fill the transcript budget when truncating ([#&#8203;1673](https://github.com/defilantech/LLMKube/issues/1673)) ([76ce407](https://github.com/defilantech/LLMKube/commit/76ce40756e5cf275c884be531a2fd66e16cb366b))
- **foreman:** make the ALREADY-RESOLVED cascade-skip transitive ([#&#8203;1689](https://github.com/defilantech/LLMKube/issues/1689)) ([6f9a10c](https://github.com/defilantech/LLMKube/commit/6f9a10c2f930269330864af4e8e770f896f48efe))
- **foreman:** make verdictClaimed first-writer-wins so demotion provenance survives a second rail ([#&#8203;1683](https://github.com/defilantech/LLMKube/issues/1683)) ([0e01114](https://github.com/defilantech/LLMKube/commit/0e011142b8e7eed0403110738eb570dc47fa5294))
- **foreman:** round-robin Job-mode placement across eligible nodes ([#&#8203;1669](https://github.com/defilantech/LLMKube/issues/1669)) ([e7a6b73](https://github.com/defilantech/LLMKube/commit/e7a6b7375ed173e28113d2116949467648f89d83))
- **foreman:** wire the deleted-reference rail into the coder GO path ([#&#8203;1666](https://github.com/defilantech/LLMKube/issues/1666)) ([fe8057a](https://github.com/defilantech/LLMKube/commit/fe8057adb0cd168af2b304bedfe0b9e0673c7b57))
- **foreman:** wire the pre-flight staleness check into coder dispatch ([#&#8203;1670](https://github.com/defilantech/LLMKube/issues/1670)) ([436a918](https://github.com/defilantech/LLMKube/commit/436a918b1d98aa077b7fedf704c9c183b6602718))
- **foreman:** wire the reviewer diff gate so an ungrounded GO is recorded ([#&#8203;1668](https://github.com/defilantech/LLMKube/issues/1668)) ([a9b048c](https://github.com/defilantech/LLMKube/commit/a9b048c7daf7b7ed15dd353cb18cce458f9e5606))
- **prefetch:** honour InferenceService modelCache.claimName ([#&#8203;1691](https://github.com/defilantech/LLMKube/issues/1691)) ([0201e29](https://github.com/defilantech/LLMKube/commit/0201e292f5828b07e45ef80dca3057effc7de583))
- **test:** make the archival failure-injection tests uid-independent ([#&#8203;1658](https://github.com/defilantech/LLMKube/issues/1658)) ([2acaa15](https://github.com/defilantech/LLMKube/commit/2acaa153454f2d92c24d606c71a5980b6e55f59f))

### [`v0.9.20`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0920-2026-08-24)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.19...v0.9.20)

##### Features

- **foreman:** opt-in archival of task audit records and transcripts ([#&#8203;1655](https://github.com/defilantech/LLMKube/issues/1655)) ([c577133](https://github.com/defilantech/LLMKube/commit/c577133c7f1b5d49ddf4d1f7c936dfd5c72595f0))
- **foreman:** report the Kubernetes node on FleetNode.status, not as identity ([#&#8203;1649](https://github.com/defilantech/LLMKube/issues/1649)) ([7563e8a](https://github.com/defilantech/LLMKube/commit/7563e8a8165c5997a854a21ee31345459b66ceeb))

##### Bug Fixes

- **controller:** carry Model tolerations onto the prefetch Job ([#&#8203;1622](https://github.com/defilantech/LLMKube/issues/1622)) ([d0db838](https://github.com/defilantech/LLMKube/commit/d0db838a6ca442a1adf70b64cc023eb18eb86e48))
- **controller:** clear the controller's own schedulingStatus once a service is Ready ([#&#8203;1633](https://github.com/defilantech/LLMKube/issues/1633)) ([315f34d](https://github.com/defilantech/LLMKube/commit/315f34db6387da888bbcc4d65eabf75b35e44376))
- Empty payload.repo silently defeats the upstream-base fetch: task branches cut from a stale fork HEAD ([#&#8203;1625](https://github.com/defilantech/LLMKube/issues/1625)) ([#&#8203;1626](https://github.com/defilantech/LLMKube/issues/1626)) ([27a015a](https://github.com/defilantech/LLMKube/commit/27a015a279863392bbac33dc06e46fa4a1087d39))
- **foreman:** carry the in-pod result extras on every Job-mode branch ([#&#8203;1657](https://github.com/defilantech/LLMKube/issues/1657)) ([d1ce51c](https://github.com/defilantech/LLMKube/commit/d1ce51c589ab0b3f45d273df29b98483ea1db675))
- **foreman:** free the agent's in-process slot while a Job-mode task runs ([#&#8203;1635](https://github.com/defilantech/LLMKube/issues/1635)) ([0d64fbb](https://github.com/defilantech/LLMKube/commit/0d64fbb5b823ec9c530cdb010a871d4c76707188))
- **foreman:** gate the make-invoked CI checks, and pin them against the workflows ([#&#8203;1642](https://github.com/defilantech/LLMKube/issues/1642)) ([4e7ab7b](https://github.com/defilantech/LLMKube/commit/4e7ab7b74313c6bf9064d8a0d939a8338b0c8f3f))
- **foreman:** make the CustomResourceState config produce usable metrics ([#&#8203;1650](https://github.com/defilantech/LLMKube/issues/1650)) ([1620443](https://github.com/defilantech/LLMKube/commit/1620443af3560926801718b33ddf3592dac1e690))

##### Documentation

- add ROCm host-retune runbook for >64GB on Strix Halo ([#&#8203;1387](https://github.com/defilantech/LLMKube/issues/1387)) ([fff5e59](https://github.com/defilantech/LLMKube/commit/fff5e59cf1735aeaa0b4d932505fdaa23a07bfd5))
- fix guide instructions that fail against the shipped API ([#&#8203;1629](https://github.com/defilantech/LLMKube/issues/1629)) ([fba0bf4](https://github.com/defilantech/LLMKube/commit/fba0bf4d8cdeab13d521f0fa32da8272a2c4a0d1))
- **proposals:** foreman run, an unattended orchestration loop ([#&#8203;1652](https://github.com/defilantech/LLMKube/issues/1652)) ([df57f49](https://github.com/defilantech/LLMKube/commit/df57f490c1f4aa01ccb5dbf6e8dbf238aaee3a18))
- reframe the multi-GPU guide from an Issue [#&#8203;2](https://github.com/defilantech/LLMKube/issues/2) validation plan into a deployment guide ([#&#8203;1631](https://github.com/defilantech/LLMKube/issues/1631)) ([907ac8d](https://github.com/defilantech/LLMKube/commit/907ac8d8ee5bef229562ec5340ecdcb9e0576f0d))
- **runbook:** correct the metal-agent memory-pressure runbook against pkg/agent ([#&#8203;1630](https://github.com/defilantech/LLMKube/issues/1630)) ([f665674](https://github.com/defilantech/LLMKube/commit/f6656741234aa605d3f891598663df142a815171))
- serving one model across two DGX Sparks via llama.cpp RPC ([#&#8203;1620](https://github.com/defilantech/LLMKube/issues/1620)) ([7eaf04b](https://github.com/defilantech/LLMKube/commit/7eaf04b46b2aa5ea4f7939f2751df412128be86b))

### [`v0.9.19`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0919-2026-08-20)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.18...v0.9.19)

##### Features

- **foreman:** content-based test-coverage vouch for feature-named test files ([#&#8203;1614](https://github.com/defilantech/LLMKube/issues/1614)) ([477a599](https://github.com/defilantech/LLMKube/commit/477a599b06f3196438a055ab419a7661846587ba))
- **foreman:** deterministic cross-stage contradiction detection ([#&#8203;1589](https://github.com/defilantech/LLMKube/issues/1589)) ([0bd102a](https://github.com/defilantech/LLMKube/commit/0bd102a95514d33066b016f5edae278d3986257b))
- **foreman:** execution-verification section in the reviewer rubric ([#&#8203;1617](https://github.com/defilantech/LLMKube/issues/1617)) ([03702a0](https://github.com/defilantech/LLMKube/commit/03702a0a54858ad21fcd398adceee4786f9b8564))
- **foreman:** extract behaviour clauses from an issue body ([#&#8203;1590](https://github.com/defilantech/LLMKube/issues/1590)) ([041fab7](https://github.com/defilantech/LLMKube/commit/041fab76c7901589c86f96c586b275c7291d8b7a))
- **foreman:** implement the Agent Validated condition and stamp under-configured runs ([#&#8203;1611](https://github.com/defilantech/LLMKube/issues/1611)) ([61e65a4](https://github.com/defilantech/LLMKube/commit/61e65a4d3435256a3605614fc2ab6cfbe9d9bd3b))
- **foreman:** let GateProfile declare a test-layout convention ([#&#8203;1607](https://github.com/defilantech/LLMKube/issues/1607)) ([16b42ce](https://github.com/defilantech/LLMKube/commit/16b42ce0ffd8f88cb907e0fde79118a8c754ad64))
- **foreman:** MCP call aggregation for the foreman.audit.v1 record ([#&#8203;1591](https://github.com/defilantech/LLMKube/issues/1591)) ([7b8e489](https://github.com/defilantech/LLMKube/commit/7b8e489763490824967a7b9327de020204606b7c))
- **foreman:** rail detecting a GO from a reviewer that never diffed ([#&#8203;1588](https://github.com/defilantech/LLMKube/issues/1588)) ([376fa58](https://github.com/defilantech/LLMKube/commit/376fa5869015d1dbc90998064a6574c63ad6f94a))
- **foreman:** test-layout mapping for parallel test trees ([#&#8203;1592](https://github.com/defilantech/LLMKube/issues/1592)) ([df7f719](https://github.com/defilantech/LLMKube/commit/df7f719b468919da69a68f1f3e7bf3d005d6b708))
- **foreman:** vouch modified test files on their added lines ([#&#8203;1619](https://github.com/defilantech/LLMKube/issues/1619)) ([dd6087b](https://github.com/defilantech/LLMKube/commit/dd6087bb117495b3d3dd6f0d485c10e99ad9d3e0))

##### Bug Fixes

- **chart:** grant the inference operator batch/jobs and pods/log, and stop the RBAC guard covering one operator with the other's grants ([#&#8203;1595](https://github.com/defilantech/LLMKube/issues/1595)) ([bb8d505](https://github.com/defilantech/LLMKube/commit/bb8d5050c663b0538a137bceb06b1238814866e4))
- **controller:** bound the prefetch Job read and stop one Model stalling the rest ([#&#8203;1598](https://github.com/defilantech/LLMKube/issues/1598)) ([82f4e47](https://github.com/defilantech/LLMKube/commit/82f4e47081da1fa85c14879dd6f5037f27dc62f5))
- **foreman:** decide bash writes on the command word, not a substring ([#&#8203;1587](https://github.com/defilantech/LLMKube/issues/1587)) ([9a0aaba](https://github.com/defilantech/LLMKube/commit/9a0aaba99e56148e13905db24c3aa9699a226de7))
- **foreman:** record why a reviewer rail could not run ([#&#8203;1606](https://github.com/defilantech/LLMKube/issues/1606)) ([135ba88](https://github.com/defilantech/LLMKube/commit/135ba88f5bbf36745c68561e67979110a2b052f2))
- **foreman:** skip the NoSystemPrompt floor for deterministic agents ([#&#8203;1615](https://github.com/defilantech/LLMKube/issues/1615)) ([3c99ac0](https://github.com/defilantech/LLMKube/commit/3c99ac04d0bf3770ac7028a996f2db9e7e24adff))

##### Documentation

- **foreman:** document gateProfile.testLayout ([#&#8203;1612](https://github.com/defilantech/LLMKube/issues/1612)) ([4466e6f](https://github.com/defilantech/LLMKube/commit/4466e6fd87d60c991703e603ecac5d4d3125196e))

### [`v0.9.18`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0918-2026-08-18)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.17...v0.9.18)

##### Features

- **controller:** architecture-aware runtime placement ([#&#8203;1544](https://github.com/defilantech/LLMKube/issues/1544)) ([6694d0b](https://github.com/defilantech/LLMKube/commit/6694d0b010e64834e884a81f85412f7082ec9adf))
- **controller:** speculativeDecoding.draftModel for companion-file drafters ([#&#8203;1564](https://github.com/defilantech/LLMKube/issues/1564)) ([a8526a8](https://github.com/defilantech/LLMKube/commit/a8526a848ba018e38bbdbcbca86286a1b79c5b85))
- **controller:** surface actual GPU offload in InferenceService status ([#&#8203;1566](https://github.com/defilantech/LLMKube/issues/1566)) ([a2335c6](https://github.com/defilantech/LLMKube/commit/a2335c60929f62b97d5d63943a04c13b68a319ea))
- draft-model speculative decoding on InferenceService ([#&#8203;1533](https://github.com/defilantech/LLMKube/issues/1533)) ([81881d6](https://github.com/defilantech/LLMKube/commit/81881d6813563bd3210089d6dabb3e642869468b))
- **foreman:** add optional Agent.spec.maxConcurrentTasks to bound in-flight tasks ([#&#8203;1546](https://github.com/defilantech/LLMKube/issues/1546)) ([0afa9c9](https://github.com/defilantech/LLMKube/commit/0afa9c9d6e7e402330ce3fc39aacfe363142ea3d))
- **foreman:** flag issue references removed by a diff ([#&#8203;1574](https://github.com/defilantech/LLMKube/issues/1574)) ([0f2d30d](https://github.com/defilantech/LLMKube/commit/0f2d30d6d40b2c04cb695d2513a1ed03ee2c5718))
- **foreman:** honour the target repository's PR template when opening a PR ([#&#8203;1562](https://github.com/defilantech/LLMKube/issues/1562)) ([5d09e07](https://github.com/defilantech/LLMKube/commit/5d09e078a1bf44866c73c7672cd1e28df5a74ec3))
- **foreman:** mutation-check decision logic (revert the fix, require a test to fail) ([#&#8203;1578](https://github.com/defilantech/LLMKube/issues/1578)) ([07754f1](https://github.com/defilantech/LLMKube/commit/07754f1c9bf9805eeb2f05e6a376a46551e527db))
- **foreman:** operator-emitted task outcome counters ([#&#8203;1563](https://github.com/defilantech/LLMKube/issues/1563)) ([2386ad8](https://github.com/defilantech/LLMKube/commit/2386ad8a80641bbab202e57839b3cab127a30f88))
- **foreman:** pre-flight staleness detection for already-addressed issues ([#&#8203;1577](https://github.com/defilantech/LLMKube/issues/1577)) ([cc9d594](https://github.com/defilantech/LLMKube/commit/cc9d59405454b7845b476413b6375a70c15c4ef6))

##### Bug Fixes

- **controller:** AND the arch requirement into nodeAffinity instead of ORing a new term ([#&#8203;1584](https://github.com/defilantech/LLMKube/issues/1584)) ([4e5e5d4](https://github.com/defilantech/LLMKube/commit/4e5e5d42ea573cb9602f67a1793e0ec74f556ea4))
- **controller:** do not roll over in-flight work when idleness is undetermined ([#&#8203;1543](https://github.com/defilantech/LLMKube/issues/1543)) ([daba4e1](https://github.com/defilantech/LLMKube/commit/daba4e11c1c6b21b2aac5bc473c84de91b908f1a))
- **controller:** expose --dri-render-gid through the chart and stop defaulting it to the video group ([#&#8203;1586](https://github.com/defilantech/LLMKube/issues/1586)) ([66029e7](https://github.com/defilantech/LLMKube/commit/66029e7b959537a8a2d28cef19515b2dfaabb7e1))
- **controller:** inject the DRI render GID into Vulkan pod supplementalGroups ([#&#8203;1569](https://github.com/defilantech/LLMKube/issues/1569)) ([79f8f08](https://github.com/defilantech/LLMKube/commit/79f8f0846c06f72e8873acabb562f12be2ed2bfd))
- **controller:** let draft-mtp accept an optional draftModelRef ([#&#8203;1547](https://github.com/defilantech/LLMKube/issues/1547)) ([98fd3a0](https://github.com/defilantech/LLMKube/commit/98fd3a0f886f9f9a85dd6d156c1071fc68e116f1))
- **controller:** let ModelTransferHealthy recover after a retried download succeeds ([#&#8203;1539](https://github.com/defilantech/LLMKube/issues/1539)) ([978f5ee](https://github.com/defilantech/LLMKube/commit/978f5ee7b7875c3b9ed7c9dbdd3f6ef2fced32b6))
- **deps:** bump the Go toolchain to 1.26.6 for two stdlib advisories ([#&#8203;1534](https://github.com/defilantech/LLMKube/issues/1534)) ([627ca93](https://github.com/defilantech/LLMKube/commit/627ca936dad7db35db8c5419a0d318f8530fe5ee))
- **foreman:** do not let an unavailable diff disable the grounded-finding rail ([#&#8203;1576](https://github.com/defilantech/LLMKube/issues/1576)) ([812186b](https://github.com/defilantech/LLMKube/commit/812186b5fca0a1eec906adaa749b1a34514d0a7d))
- **foreman:** do not reserve a FleetNode for Job-mode AgenticTasks ([#&#8203;1558](https://github.com/defilantech/LLMKube/issues/1558)) ([55a1434](https://github.com/defilantech/LLMKube/commit/55a1434408be54e29b71886a6953498ad24b1bb1))
- **foreman:** honour Workload spec.repo for gate, push and PR, not just clone ([#&#8203;1545](https://github.com/defilantech/LLMKube/issues/1545)) ([d949e3f](https://github.com/defilantech/LLMKube/commit/d949e3f0f82e4d4eb3487eb2c9aab20cd0784ab1))
- **foreman:** let the reviewer author an uncapped PR body via extra.prBody ([#&#8203;1575](https://github.com/defilantech/LLMKube/issues/1575)) ([827cad8](https://github.com/defilantech/LLMKube/commit/827cad8c32ac05552307eb6b866c60686df1e4fd))
- **foreman:** map test files to their modules in scope-overlap, and dedupe issue file refs ([#&#8203;1573](https://github.com/defilantech/LLMKube/issues/1573)) ([fa02f25](https://github.com/defilantech/LLMKube/commit/fa02f25cb04b3091eeea0c066d8ee5457a194c26))
- **foreman:** mount the agent's own gate-cache PVC, and honour an empty name ([#&#8203;1557](https://github.com/defilantech/LLMKube/issues/1557)) ([b09c3ad](https://github.com/defilantech/LLMKube/commit/b09c3ad12677d0dfbc56a2ba83a2bf21592d8ed2))
- **foreman:** remap unsupported emptiness claims to ERROR instead of NO-GO ([#&#8203;1565](https://github.com/defilantech/LLMKube/issues/1565)) ([ba7e3f9](https://github.com/defilantech/LLMKube/commit/ba7e3f9de9aef81fff9dbefc10ce5e5a93b966a9))
- **foreman:** restore the coder grounding rail's MCP prefix after the [#&#8203;1527](https://github.com/defilantech/LLMKube/issues/1527) rename ([#&#8203;1582](https://github.com/defilantech/LLMKube/issues/1582)) ([1b289e6](https://github.com/defilantech/LLMKube/commit/1b289e63cff796749326491bda8c6ac2e45b1078))
- **foreman:** stop Job-mode AgenticTasks orphaning their previous Job on re-dispatch ([#&#8203;1556](https://github.com/defilantech/LLMKube/issues/1556)) ([32d1d65](https://github.com/defilantech/LLMKube/commit/32d1d6524592e58ddf445ba704db54f7f874b1fa))
- namespace MCP tools with \_\_ so names match the OAI pattern ([#&#8203;1527](https://github.com/defilantech/LLMKube/issues/1527)) ([1cd05d7](https://github.com/defilantech/LLMKube/commit/1cd05d7c074ddbe71171558468e78d3652ac2f1f))
- omit the issue reference when a task has no issue number ([#&#8203;1532](https://github.com/defilantech/LLMKube/issues/1532)) ([f881ac3](https://github.com/defilantech/LLMKube/commit/f881ac310cc30c5044bab0470f34931c3d1f2ffc))
- stop discarding a coder's diff when submit\_result omits a message ([#&#8203;1529](https://github.com/defilantech/LLMKube/issues/1529)) ([3cd01ac](https://github.com/defilantech/LLMKube/commit/3cd01ac70f2b0fb3a6634b026248c0032eecb2c9))

##### Documentation

- make spec.files discoverable from spec.source for multi-artifact models ([#&#8203;1540](https://github.com/defilantech/LLMKube/issues/1540)) ([25777da](https://github.com/defilantech/LLMKube/commit/25777da1d00bce365d596fdde39b9eaa4e3da260))

### [`v0.9.17`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0917-2026-08-13)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.16...v0.9.17)

##### Features

- **chart:** foreman.crs.namespace — render the CRS ConfigMap where kube-state-metrics can mount it ([#&#8203;1492](https://github.com/defilantech/LLMKube/issues/1492)) ([5bb8c19](https://github.com/defilantech/LLMKube/commit/5bb8c19c577dce55c502fb2f990b3648bd24a5e9))
- fetch\_pull\_request: include check-run output (title/summary/text) for failed runs ([#&#8203;1481](https://github.com/defilantech/LLMKube/issues/1481)) ([#&#8203;1505](https://github.com/defilantech/LLMKube/issues/1505)) ([e323f32](https://github.com/defilantech/LLMKube/commit/e323f32d18556db91e255ce61123d48b79c077d6))

##### Bug Fixes

- **chart:** heartbeat alert uses time(), not the nonexistent time\_seconds() ([#&#8203;1494](https://github.com/defilantech/LLMKube/issues/1494)) ([bf8c1a0](https://github.com/defilantech/LLMKube/commit/bf8c1a034b0209aad030905e2591941a209d63b5))
- **chart:** scope agent Deployment selectors to their pool ([#&#8203;1524](https://github.com/defilantech/LLMKube/issues/1524)) ([0da2a9e](https://github.com/defilantech/LLMKube/commit/0da2a9ee6f4b4205d6316850c988f4f92cdba1d4))
- detect the scheduler's other wording for an unusable cache volume ([#&#8203;1513](https://github.com/defilantech/LLMKube/issues/1513)) ([64ee9d7](https://github.com/defilantech/LLMKube/commit/64ee9d7788dc8fe4c17b229c461ac3f7ddae1562))
- EnsurePR treats a closed unmerged PR as satisfied — retried work ends with no PR ([#&#8203;1476](https://github.com/defilantech/LLMKube/issues/1476)) ([#&#8203;1507](https://github.com/defilantech/LLMKube/issues/1507)) ([82baff8](https://github.com/defilantech/LLMKube/commit/82baff88362cac188c3b4c68654734eaffa5e9b3))
- extract path refs the extension gate was discarding ([#&#8203;1516](https://github.com/defilantech/LLMKube/issues/1516)) ([7166920](https://github.com/defilantech/LLMKube/commit/71669204cddcff8f0dd05671c5593403c8e02410))
- **foreman:** bound edit-free resets earned from bash-shaped writes ([#&#8203;1521](https://github.com/defilantech/LLMKube/issues/1521)) ([41a2829](https://github.com/defilantech/LLMKube/commit/41a282920345b0a5792d68ce6362d5d739b1f15a))
- **foreman:** bound grep match lines so one minified file cannot end a run ([#&#8203;1488](https://github.com/defilantech/LLMKube/issues/1488)) ([952f8af](https://github.com/defilantech/LLMKube/commit/952f8af1fb2eee2f8918383a40f148c32db82ae0))
- **foreman:** one tool list, so a tool cannot ship unusable again ([#&#8203;1486](https://github.com/defilantech/LLMKube/issues/1486)) ([e77d7cf](https://github.com/defilantech/LLMKube/commit/e77d7cf3435ac485bd4424b2f6c6c0df80585043))
- **foreman:** reviewers review the change, not the base branch (+ cross-project remote guard) ([#&#8203;1490](https://github.com/defilantech/LLMKube/issues/1490)) ([0f3fa83](https://github.com/defilantech/LLMKube/commit/0f3fa83f5ce8bdb89d0deb176844de7dc9346195))
- **foreman:** route all three consumers through the provider seams ([#&#8203;1510](https://github.com/defilantech/LLMKube/issues/1510)) ([79448fc](https://github.com/defilantech/LLMKube/commit/79448fca464c3377fc89685db8850b28b5d82a4d))
- **modelpool:** guard the nil HTTPClient that panics every swap ([#&#8203;1485](https://github.com/defilantech/LLMKube/issues/1485)) ([dc3fa50](https://github.com/defilantech/LLMKube/commit/dc3fa50faa2d5bc8eb38b11e5c6548acffbb86f5))
- name the cause when a model cache PV can never bind ([#&#8203;1511](https://github.com/defilantech/LLMKube/issues/1511)) ([772c99d](https://github.com/defilantech/LLMKube/commit/772c99db80580d2b5a3db56536c600ce21dd70c2))
- normalizeContainers strips operator-owned SecurityContext fields before drift comparison ([#&#8203;1462](https://github.com/defilantech/LLMKube/issues/1462)) ([#&#8203;1506](https://github.com/defilantech/LLMKube/issues/1506)) ([8d291ca](https://github.com/defilantech/LLMKube/commit/8d291ca2ca36fbcb0d06ef587c30dce88b86b96f))
- **operator:** apply nodeSelector and tolerations to non-GPU services ([#&#8203;1504](https://github.com/defilantech/LLMKube/issues/1504)) ([dc3bac3](https://github.com/defilantech/LLMKube/commit/dc3bac3a7476dbe05fae8d90daab30655a880eee))
- populate status.size and status.gguf for s3:// model sources ([#&#8203;1522](https://github.com/defilantech/LLMKube/issues/1522)) ([69a76fd](https://github.com/defilantech/LLMKube/commit/69a76fdd9ff4d10c3e7c563382b12c2bd633bf05))
- **router-proxy:** honour 0 as disable, pin the metrics port in tests, refresh the dashboard catalog ([#&#8203;1519](https://github.com/defilantech/LLMKube/issues/1519)) ([774e0b9](https://github.com/defilantech/LLMKube/commit/774e0b95865668fc422192575c4fc7b19279e90c))
- **router-proxy:** reject colliding listener addresses at startup ([#&#8203;1518](https://github.com/defilantech/LLMKube/issues/1518)) ([fc49a5d](https://github.com/defilantech/LLMKube/commit/fc49a5d2c3c0deed376e5fe62d3ef625f8eb07c3))
- surface the unbindable-cache diagnosis instead of dropping it ([#&#8203;1512](https://github.com/defilantech/LLMKube/issues/1512)) ([03c0f17](https://github.com/defilantech/LLMKube/commit/03c0f179dd507cecb9a707f440ddbf007815904a))

##### Documentation

- **foreman:** refresh model compatibility from what the fleet has proven ([#&#8203;1483](https://github.com/defilantech/LLMKube/issues/1483)) ([8ccdbee](https://github.com/defilantech/LLMKube/commit/8ccdbee27c8cf2cfc1352e62094e5aa3d48ddec6))
- how to recognise a cache volume the provisioner never stamped ([#&#8203;1514](https://github.com/defilantech/LLMKube/issues/1514)) ([12d59c2](https://github.com/defilantech/LLMKube/commit/12d59c2f62629ee636ae83bd6853e378aca5abae))
- **operations:** document ModelPool in the GPU-sharing guide ([#&#8203;1508](https://github.com/defilantech/LLMKube/issues/1508)) ([c2c3a84](https://github.com/defilantech/LLMKube/commit/c2c3a8406434b133e9855b00e17d40793af7cc6a))

### [`v0.9.16`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0916-2026-08-10)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.15...v0.9.16)

##### Features

- **chart:** PodMonitor for router-proxy metrics ([#&#8203;1473](https://github.com/defilantech/LLMKube/issues/1473)) ([fd7c640](https://github.com/defilantech/LLMKube/commit/fd7c6404fe30b2da37170c43ab04e047488a0640))
- **foreman:** advisory two-site parity signal in the coder gate ([#&#8203;1456](https://github.com/defilantech/LLMKube/issues/1456)) ([944f90d](https://github.com/defilantech/LLMKube/commit/944f90d85aafa89a3e5302c38eda025901968a49))
- **foreman:** image input, so a vision-capable coder can see what it rendered ([#&#8203;1471](https://github.com/defilantech/LLMKube/issues/1471)) ([6c122be](https://github.com/defilantech/LLMKube/commit/6c122bea5d77f1ffca975890c9d1ae6faa461321))
- **foreman:** read-only fetch\_pull\_request tool ([#&#8203;1458](https://github.com/defilantech/LLMKube/issues/1458)) ([7f4910b](https://github.com/defilantech/LLMKube/commit/7f4910b83f6dafcfcf5a1b49b04de49f3afe7db7))
- **modelpool:** cross-pod sticky model swapping on a shared GPU slot ([#&#8203;1393](https://github.com/defilantech/LLMKube/issues/1393)) ([ba7777d](https://github.com/defilantech/LLMKube/commit/ba7777d42d1b8e03f3ddea8e8cdf0f11ffd3ae8d))
- **router-proxy:** expose llmkube\_router\_\* metrics on a dedicated listener ([#&#8203;1457](https://github.com/defilantech/LLMKube/issues/1457)) ([ca3730d](https://github.com/defilantech/LLMKube/commit/ca3730d1453edd451a235fec369bb32aa359af2d))

##### Bug Fixes

- **controller:** make the custom CA additive to the system trust store ([#&#8203;1469](https://github.com/defilantech/LLMKube/issues/1469)) ([d490059](https://github.com/defilantech/LLMKube/commit/d490059f8b64113fd70284f43b07373ba52e56ab))
- **controller:** stage files and mmproj from an s3:// object store ([#&#8203;1475](https://github.com/defilantech/LLMKube/issues/1475)) ([769b60d](https://github.com/defilantech/LLMKube/commit/769b60d22dd3772f6d86a0c6ff5a40a007a079a8))
- **dashboard:** AMD dashboard vendor hygiene — remove runtime-agnostic llama.cpp panels, standardize on DS\_PROMETHEUS ([#&#8203;1446](https://github.com/defilantech/LLMKube/issues/1446)) ([c6c0670](https://github.com/defilantech/LLMKube/commit/c6c06706f8df0f12c4c48ea2d2eebe9137a4f63e))
- **dashboard:** retarget amd-gpu-observability off amdgpu\_\*-only queries ([#&#8203;1474](https://github.com/defilantech/LLMKube/issues/1474)) ([a02e8e8](https://github.com/defilantech/LLMKube/commit/a02e8e84ae0f22c914ae5f5793db4879dca46312))

### [`v0.9.15`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0915-2026-08-08)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.14...v0.9.15)

##### Features

- **chart:** expose --ca-cert-configmap as controllerManager.caCertConfigMap ([#&#8203;1440](https://github.com/defilantech/LLMKube/issues/1440)) ([606c7f9](https://github.com/defilantech/LLMKube/commit/606c7f9393a412e9553e93ff3fde862bded1773d))
- **controller:** diagnose CUDA driver/runtime mismatch from crashed pods ([#&#8203;1425](https://github.com/defilantech/LLMKube/issues/1425)) ([06670f9](https://github.com/defilantech/LLMKube/commit/06670f9905664ad9ae0f7f40a04139da9cf9c1cc))
- **controller:** diagnose model-transfer failures from init containers ([#&#8203;1463](https://github.com/defilantech/LLMKube/issues/1463)) ([a092de3](https://github.com/defilantech/LLMKube/commit/a092de318b6cf959af6cec44c194e5272ccb6b88))
- **foreman:** advisory gate for command-string changes tested only by shape ([#&#8203;1421](https://github.com/defilantech/LLMKube/issues/1421)) ([b580e18](https://github.com/defilantech/LLMKube/commit/b580e18803f3ed6d1660c5d81e324290f6b795df))
- **inferenceservice:** add spec.modelCache.persistence for an ephemeral model cache ([#&#8203;1452](https://github.com/defilantech/LLMKube/issues/1452)) ([c4ae7ee](https://github.com/defilantech/LLMKube/commit/c4ae7ee6e5ffd3f7bdd9463891e3f959b57a0f5c))

##### Bug Fixes

- **api:** reject unservable speculativeDecoding type draft at admission ([#&#8203;1455](https://github.com/defilantech/LLMKube/issues/1455)) ([5d3ab73](https://github.com/defilantech/LLMKube/commit/5d3ab73b3396046aedfd0f26a262de807164c534))
- **chart:** default the router-proxy image tag to the chart appVersion ([#&#8203;1431](https://github.com/defilantech/LLMKube/issues/1431)) ([3e07b81](https://github.com/defilantech/LLMKube/commit/3e07b814f07bb954acfb446419d5e9ecbcb2496c))
- **controller:** clean up orphaned .tmp files from interrupted model transfers ([#&#8203;1459](https://github.com/defilantech/LLMKube/issues/1459)) ([2f453d6](https://github.com/defilantech/LLMKube/commit/2f453d621279c787fa3592020901120e93ed36d6))
- **controller:** emit draft-simple for speculativeDecoding type draft ([#&#8203;1417](https://github.com/defilantech/LLMKube/issues/1417)) ([ccccd02](https://github.com/defilantech/LLMKube/commit/ccccd0203f0b0e3a76732f52aeb2b7bbf458a772))
- **controller:** publish model downloads atomically so an interrupted transfer is never cached ([#&#8203;1432](https://github.com/defilantech/LLMKube/issues/1432)) ([206b6c3](https://github.com/defilantech/LLMKube/commit/206b6c3c56d98b03377242ec86f000d9a9315803))
- **controller:** route s3:// model sources to the runtime-resolved path ([#&#8203;1450](https://github.com/defilantech/LLMKube/issues/1450)) ([f054960](https://github.com/defilantech/LLMKube/commit/f0549605b029783fb2095d205a990d69c0bd6a7c))
- **controller:** set TerminationMessagePolicy on generated init containers ([#&#8203;1460](https://github.com/defilantech/LLMKube/issues/1460)) ([bc732b3](https://github.com/defilantech/LLMKube/commit/bc732b3afd5ce931360efd1ce4d625ae61975643))
- **dashboard:** select the latency success series by le!="" so llmkube-slo error-budget panels render for any threshold ([#&#8203;1444](https://github.com/defilantech/LLMKube/issues/1444)) ([d381112](https://github.com/defilantech/LLMKube/commit/d381112c63930d92f305d7bd942b97205266d2be))
- **foreman:** add chart validation to the coder gate, and install helm so it can run ([#&#8203;1442](https://github.com/defilantech/LLMKube/issues/1442)) ([b26c6ae](https://github.com/defilantech/LLMKube/commit/b26c6ae11a26b9e5567524680621ef8e63714a24))
- **foreman:** detect assertion-value churn in the test-dilution gate ([#&#8203;1416](https://github.com/defilantech/LLMKube/issues/1416)) ([b53df14](https://github.com/defilantech/LLMKube/commit/b53df14d95652647c10b0f32e4b7425efb69435c))
- **foreman:** preserve the coder Job name's uniqueness suffix on truncation ([#&#8203;1412](https://github.com/defilantech/LLMKube/issues/1412)) ([929f0a8](https://github.com/defilantech/LLMKube/commit/929f0a8795e8ad3070b3717e130aea9d8a88e4a0))
- ground the PR body summary against the branch diff ([#&#8203;1448](https://github.com/defilantech/LLMKube/issues/1448)) ([6f24527](https://github.com/defilantech/LLMKube/commit/6f2452743f0f30168a3f00de8db25f63d36170e5))
- **metrics:** correct the AMD doc's metric contract and guard prose docs ([#&#8203;1420](https://github.com/defilantech/LLMKube/issues/1420)) ([36631a9](https://github.com/defilantech/LLMKube/commit/36631a914a412caa13bf9a7741028cfdc10c9f74))
- **runtime:** disable the llama.cpp prompt cache for embedding and rerank ([#&#8203;1413](https://github.com/defilantech/LLMKube/issues/1413)) ([407de59](https://github.com/defilantech/LLMKube/commit/407de59a8efa5cef8eb060d83ac5faab37bb4bcc))

##### Documentation

- **b200:** record GB10 partial-proxy reachability and why NVLink/MIG/sm\_100 stay gated ([#&#8203;1422](https://github.com/defilantech/LLMKube/issues/1422)) ([e6ab2e9](https://github.com/defilantech/LLMKube/commit/e6ab2e9d0d8220add604230ffb527ff7b1660a88))
- **chart:** dashboard datasources examples must use the datasource UID, not its display name ([#&#8203;1433](https://github.com/defilantech/LLMKube/issues/1433)) ([a57d499](https://github.com/defilantech/LLMKube/commit/a57d499fcbc3261feccb31148f6fb3796a751db0))

### [`v0.9.14`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0914-2026-08-05)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.13...v0.9.14)

##### Features

- **api:** add mxfp4 quantization and correct Blackwell runtime reality ([#&#8203;1381](https://github.com/defilantech/LLMKube/issues/1381)) ([382af35](https://github.com/defilantech/LLMKube/commit/382af35ffee1d600b6bc05db0fb580607241a4d1))
- **controller:** opt-in Prometheus scrape annotations on inference pods ([#&#8203;1366](https://github.com/defilantech/LLMKube/issues/1366)) ([2e8f8a8](https://github.com/defilantech/LLMKube/commit/2e8f8a8c8c122db46b67ede960152f0d80ff8590))
- **dashboards:** add a llama.cpp runtime dashboard ([#&#8203;1371](https://github.com/defilantech/LLMKube/issues/1371)) ([5fedb88](https://github.com/defilantech/LLMKube/commit/5fedb88e6bbba1e7a4d827c13538a362debeb382))
- **dashboards:** add an operator-health row to llmkube-inference ([#&#8203;1369](https://github.com/defilantech/LLMKube/issues/1369)) ([ee5145b](https://github.com/defilantech/LLMKube/commit/ee5145bc6bb57b7fb2dc686d3fccd09fa15d8ed6))
- **dashboards:** SGLang queue-wait, stage latency, token mix and HiCache L3 panels ([#&#8203;1370](https://github.com/defilantech/LLMKube/issues/1370)) ([d1a57ca](https://github.com/defilantech/LLMKube/commit/d1a57cab65abbeea23dd841da768360e01128e05))
- **observability:** AMD GPU tier — amdgpu-exporter DaemonSet, metric contract, dashboard reconcile ([#&#8203;1354](https://github.com/defilantech/LLMKube/issues/1354)) ([a9e560f](https://github.com/defilantech/LLMKube/commit/a9e560f4fbd989cddf7dff1aa45184652150538e))

##### Bug Fixes

- **chart:** correct stale Blackwell platform floors (R570 is EOL) ([#&#8203;1380](https://github.com/defilantech/LLMKube/issues/1380)) ([445664e](https://github.com/defilantech/LLMKube/commit/445664e907bc8d5e7e0a0b8bb6646706c39f82c6))
- **chart:** make GPU alerts exporter-agnostic instead of DCGM-only ([#&#8203;1372](https://github.com/defilantech/LLMKube/issues/1372)) ([402a686](https://github.com/defilantech/LLMKube/commit/402a6865e3863294d0aa779d58a8a98ddb83e80c))
- **controller:** correct the speculative-decoding draft flag and dedupe --metrics ([#&#8203;1392](https://github.com/defilantech/LLMKube/issues/1392)) ([48d7d49](https://github.com/defilantech/LLMKube/commit/48d7d49a61c74a90b897eb273ab9aaebe21c2365))
- **controller:** skip model-cache PVC for pvc:// sources ([#&#8203;1363](https://github.com/defilantech/LLMKube/issues/1363)) ([9ec0bf9](https://github.com/defilantech/LLMKube/commit/9ec0bf972fcf6f8bf228e40a844ee95f8b996ddb))
- **foreman:** fail loudly when a revision's prior attempt cannot be restored ([#&#8203;1365](https://github.com/defilantech/LLMKube/issues/1365)) ([b9b7685](https://github.com/defilantech/LLMKube/commit/b9b76857e2ef281ad8a6387a74c5f42e2b7eaad1))
- **foreman:** run the coder gate's Go checks with GOTOOLCHAIN=auto ([#&#8203;1389](https://github.com/defilantech/LLMKube/issues/1389)) ([ce828dd](https://github.com/defilantech/LLMKube/commit/ce828dd6baeb2039dc15b2be8afebada48d3e285))
- **router:** apply external.model as modelNameOverride on backendRefs ([#&#8203;1398](https://github.com/defilantech/LLMKube/issues/1398)) ([847b14d](https://github.com/defilantech/LLMKube/commit/847b14d7da7c8fb4cd19aca68dea1af0db047918))
- **router:** compile external backends in the Gateway data plane ([#&#8203;1396](https://github.com/defilantech/LLMKube/issues/1396)) ([5045dd0](https://github.com/defilantech/LLMKube/commit/5045dd033b732544e1fdb4e83f443766fa6453f7))
- **router:** rewrite body.model for external backends via bodyMutation ([#&#8203;1401](https://github.com/defilantech/LLMKube/issues/1401)) ([2fc6992](https://github.com/defilantech/LLMKube/commit/2fc69923e7f4309958302fc76973e0064eb24d18))
- **router:** surface a gateway reconcile failure as a Warning Event ([#&#8203;1400](https://github.com/defilantech/LLMKube/issues/1400)) ([4145a67](https://github.com/defilantech/LLMKube/commit/4145a678e76653555de5b4bc749fcecbb94c4af4))
- **router:** use the non-deprecated events API for the gateway recorder ([#&#8203;1409](https://github.com/defilantech/LLMKube/issues/1409)) ([435dd72](https://github.com/defilantech/LLMKube/commit/435dd7218f6b48b11ae083449e3bf29e4e92c193))
- skip GitHub auth and repo clone for freeform tasks without a repo ([#&#8203;1350](https://github.com/defilantech/LLMKube/issues/1350)) ([c1d0cc1](https://github.com/defilantech/LLMKube/commit/c1d0cc1611c87ee040453e32cf13a6cce800577c))
- stop wasted-turn context ballooning on max\_tokens truncation ([#&#8203;1352](https://github.com/defilantech/LLMKube/issues/1352)) ([eaac3ef](https://github.com/defilantech/LLMKube/commit/eaac3efbe1a8b1b290f7c828cdf8776ebcdf128d))
- **test:** make t.Fatal terminality explicit for staticcheck SA5011 ([#&#8203;1410](https://github.com/defilantech/LLMKube/issues/1410)) ([7cf58c7](https://github.com/defilantech/LLMKube/commit/7cf58c781188d58465caa6d12bc0b487a396127b))

##### Reverts

- remove the inert model-rewrite paths for external backends ([#&#8203;1402](https://github.com/defilantech/LLMKube/issues/1402)) ([422b9ef](https://github.com/defilantech/LLMKube/commit/422b9ef6f679e4bbdb3ab5abefbaeefec14f18ee))

##### Documentation

- add observability maintainer ([#&#8203;1407](https://github.com/defilantech/LLMKube/issues/1407)) ([3fb54e2](https://github.com/defilantech/LLMKube/commit/3fb54e296040de8f323e0a91a83b61be9933d3c1))
- fix autoscaling guide to use a metric llama.cpp actually exports ([#&#8203;1386](https://github.com/defilantech/LLMKube/issues/1386)) ([bc3fca2](https://github.com/defilantech/LLMKube/commit/bc3fca237ff938d91d0b6bf046f43838d2ebe29d))

### [`v0.9.13`](https://github.com/defilantech/LLMKube/blob/HEAD/CHANGELOG.md#0913-2026-07-29)

[Compare Source](https://github.com/defilantech/LLMKube/compare/v0.9.12...v0.9.13)

##### Features

- **chart:** template Grafana dashboards, publishing runtime ones only while their runtime serves ([#&#8203;1267](https://github.com/defilantech/LLMKube/issues/1267)) ([c2d56b7](https://github.com/defilantech/LLMKube/commit/c2d56b7d31746726e5dc79e2f4ce5f94b6452560))
- **foreman:** test-dilution advisory for the coder gate ([#&#8203;1332](https://github.com/defilantech/LLMKube/issues/1332)) ([#&#8203;1337](https://github.com/defilantech/LLMKube/issues/1337)) ([43a30fc](https://github.com/defilantech/LLMKube/commit/43a30fc68f7d1729c131ae4e7e4ba8cbb662dd1b))

##### Bug Fixes

- **controller:** append TGI extraArgs once, not four times ([#&#8203;1306](https://github.com/defilantech/LLMKube/issues/1306)) ([6d675f2](https://github.com/defilantech/LLMKube/commit/6d675f23f758da6eb6168e1786b5ff07598cbdac))
- **controller:** Available goes False when no replicas are ready ([#&#8203;1304](https://github.com/defilantech/LLMKube/issues/1304)) ([f3bd243](https://github.com/defilantech/LLMKube/commit/f3bd2435f3d43e84ad7cb455df04ee6f89000038))
- **controller:** charge GPUQuota by the resolved GPU count, closing the Model-declared-count bypass ([#&#8203;1324](https://github.com/defilantech/LLMKube/issues/1324)) ([e052229](https://github.com/defilantech/LLMKube/commit/e0522294a8ec499ca10d49f4bb89bebb74ab69fa))
- **controller:** cpu-offload verify advisory, parallelism validation, and a sample that actually runs ([#&#8203;1321](https://github.com/defilantech/LLMKube/issues/1321)) ([9740dad](https://github.com/defilantech/LLMKube/commit/9740dade9e6f5fcaf790ec5c8349f6452ffba260))
- **controller:** gate HPA scale-up by GPUQuota via maxReplicas accounting ([#&#8203;1311](https://github.com/defilantech/LLMKube/issues/1311)) ([#&#8203;1334](https://github.com/defilantech/LLMKube/issues/1334)) ([dcefc45](https://github.com/defilantech/LLMKube/commit/dcefc450049812531e8203334a3dd8939902f25c))
- **controller:** recognise huggingface.co URL sources as HF repos, not single-file downloads ([#&#8203;1322](https://github.com/defilantech/LLMKube/issues/1322)) ([#&#8203;1325](https://github.com/defilantech/LLMKube/issues/1325)) ([36fc79f](https://github.com/defilantech/LLMKube/commit/36fc79f14e40cb9671d2ae8e71cd3012f6c3ffd8))
- **controller:** revalidate model cache via HEAD + Content-Length, atomic download ([#&#8203;1309](https://github.com/defilantech/LLMKube/issues/1309)) ([#&#8203;1326](https://github.com/defilantech/LLMKube/issues/1326)) ([3e86988](https://github.com/defilantech/LLMKube/commit/3e86988d951e825e25d73343c0e4c2f9e16b499a))
- **foreman:** accept multi-segment repo slugs (GitLab subgroups, nested Forgejo orgs) ([#&#8203;1299](https://github.com/defilantech/LLMKube/issues/1299)) ([#&#8203;1341](https://github.com/defilantech/LLMKube/issues/1341)) ([1b7c47a](https://github.com/defilantech/LLMKube/commit/1b7c47ae63828bea4ab93038dcf65785c2a1a346))
- **foreman:** auto-apply gofmt in the coder gate instead of failing the coder ([#&#8203;1327](https://github.com/defilantech/LLMKube/issues/1327)) ([#&#8203;1333](https://github.com/defilantech/LLMKube/issues/1333)) ([954c67b](https://github.com/defilantech/LLMKube/commit/954c67bd56764436727036e00446fe4969b0e8ec))
- **foreman:** do not downgrade a mixed footprint whose classes are all self-GO ([#&#8203;1342](https://github.com/defilantech/LLMKube/issues/1342)) ([#&#8203;1344](https://github.com/defilantech/LLMKube/issues/1344)) ([d7c6569](https://github.com/defilantech/LLMKube/commit/d7c656968064c5c9c3c6390c720f9e60a746a073))
- **foreman:** make coder self-gate diff-aware, skip Go tier on non-Go diffs ([#&#8203;1292](https://github.com/defilantech/LLMKube/issues/1292)) ([#&#8203;1336](https://github.com/defilantech/LLMKube/issues/1336)) ([9f4acef](https://github.com/defilantech/LLMKube/commit/9f4acef6a39742894f0ba434d48c3e116b02bc50))
- **foreman:** ParseRepo delegates to the shared codehost slug validator ([#&#8203;1343](https://github.com/defilantech/LLMKube/issues/1343)) ([#&#8203;1345](https://github.com/defilantech/LLMKube/issues/1345)) ([ae2dfc2](https://github.com/defilantech/LLMKube/commit/ae2dfc2ed7f2d130a12d9e6364f5e7ed03f70f11))
- **foreman:** record IsError on MCP transport failures ([#&#8203;1330](https://github.com/defilantech/LLMKube/issues/1330)) ([#&#8203;1335](https://github.com/defilantech/LLMKube/issues/1335)) ([c42f873](https://github.com/defilantech/LLMKube/commit/c42f87316e667c80753401089ad20a00f1150214))
- **foreman:** split git committer identity from author for human DCO sign-off ([#&#8203;1323](https://github.com/defilantech/LLMKube/issues/1323)) ([44ef09f](https://github.com/defilantech/LLMKube/commit/44ef09fddeaa5d89200ad145f4d2c592dcdb2f10))
- **foreman:** test-presence accepts behavioral coverage of unexported helpers ([#&#8203;1329](https://github.com/defilantech/LLMKube/issues/1329)) ([#&#8203;1340](https://github.com/defilantech/LLMKube/issues/1340)) ([f1aea17](https://github.com/defilantech/LLMKube/commit/f1aea178e3d05487f4dee5e42202b8ce555cb448))

##### Documentation

- **api:** correct MemoryLimitGiB doc, it is quota-accounting only with no runtime enforcement ([#&#8203;1312](https://github.com/defilantech/LLMKube/issues/1312)) ([#&#8203;1339](https://github.com/defilantech/LLMKube/issues/1339)) ([90e6ca3](https://github.com/defilantech/LLMKube/commit/90e6ca38228f89e6818db8bb0b5312409ed8637a))
- **api:** stop the GPU-memory fields implying enforcement that does not exist…
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