v0.2.0
Alpha release completing Hearth's first integrated Ascend hardware-validation cycle and hardening
the scale-to-zero control plane based on those results. Atlas 300I Duo is verified through the
multi-replica 0→1→2→0 lifecycle, while Ascend 910B3 is verified through the complete
single-device 0→1→0 lifecycle. Hearth remains v1alpha1 and is not production-ready.
Added
- A shared Ascend hardware-validation guide covering required images, validation levels, evidence,
and separate 910B, Atlas 300I Duo, and Atlas 300I Pro result sets. - Full physical 910B3 evidence for device-plugin scheduling, single-device
0→1→0, cold and warm
inference, reject mode, bounded-queue backpressure, metrics, drain, self-heal, Helm upgrade, and
reboot recovery. - Full Atlas 300I Duo hardware evidence for the integrated
0→1→2→0lifecycle, inference,
backpressure, reject mode, drain, cache persistence, self-heal, Helm upgrade, and reboot recovery. - Validation bounds for accelerator counts, scaling values, runtime ports, and termination grace
periods.
Changed
- Prometheus Operator resources and RBAC are decoupled from core reconciliation. Hearth now exposes
stable metrics discovery labels while optionalServiceMonitorand Grafana assets live under
examples/observability/. - Runtime metric fields are optional metadata for external observability; backend adapters and
autoscaling no longer carry an unused runtime-metrics dependency. InferenceRuntimefamily and vendor enums now match the built-in implementations: vLLM on
NVIDIA or Ascend. Manager RBAC is reduced to the CRD operations used by the passive runtime and
service reconcilers.- Ascend device profiles use equal priority, so clusters with multiple installed profiles must pin
the intended hardware runtime instead of silently preferring 910B. - Runtime and service examples now live in independently deployable, vendor/device-specific
examples/directories, with concise filenames that leave the device model to the directory. - Prewarm Jobs inherit the runtime's node selector, tolerations, scheduler, and Volcano queue so
node-local model data is prepared where the backend can run. LLMServiceresources are reconciled when a matchingInferenceRuntimechanges.- The Ascend 910B runtime now invokes
vllm serveexplicitly and uses MindCluster's standard
accelerator=huawei-Ascend910node label. A dedicated hardware-validation service example uses a
60-second drain, the shortest tested value that completed a live 910B3 stream without aborting. - Ascend 310P examples invoke
vllm serveexplicitly and pin FP16 for the validated 310P3 path.
Fixed
- Keep retrying unchanged reconciliation failures, reject ambiguous equal-priority runtime
selections, and reject Volcano queue names unless the Volcano scheduler is selected. - Apply
scaleDownStabilizationto both KEDA's zero cooldown and HPA scale-down behavior, with
validation for the HPA's one-hour limit. - Build multi-platform images on the build host architecture and fail the
docker-buildxtarget
when the image build fails. - Embed the release tag in operator and gateway images built by the release workflow.
- Publish the release chart only after both release images build successfully.
- Align Helm manager pod security and termination settings with the Kustomize deployment.
- Pin Kind and KEDA in E2E workflows, install Helm explicitly, and fail CI on uncommitted module or
generated-file changes. - Make repeated Podman scale-to-zero E2E runs replace and clean their temporary image archives.
- Reject unsupported
BakedImagecache requests instead of silently rendering them as uncached. - Reject invalid PVC claim names and model paths that could escape the mounted model volume.
- Prevent accelerator-free prewarm Pods from autoloading PyTorch vendor backends and requiring host
driver libraries. - Report the committed SSE
200for keepalive activation timeouts and avoid classifying canceled
clients as activation timeouts in gateway metrics.
🙏 Thanks to everyone who contributed to this release — the merged PRs and first-time
contributors are credited under What's Changed and New Contributors below.
What's Changed
🔧 Other Changes
- docs(crd): flag unimplemented fields by @ded-furby in #40
New Contributors
- @ded-furby made their first contribution in #40
Full Changelog: v0.1.0...v0.2.0