Skip to content

v0.7.0

Latest

Choose a tag to compare

@arcbox-labs arcbox-labs released this 15 Aug 17:07
4261eff

0.7.0 (2026-08-15)

⚠ BREAKING CHANGES

MachineService.Start returns when the machine is usable, not when its agent
first answers
(#645, #646)

A machine's own init starts after the agent does, and reconfigures the network
from scratch — so Start used to return into a window where the interface had
just been flushed, and an operation issued there failed with ENETUNREACH.
Start now waits for that init to settle.

The call therefore costs what the guest's boot costs:

image before after
alpine / openrc ~0.5s ~2.2s
ubuntu / systemd ~0.5s ~14s

If you impose your own timeout on Start, raise it above ~15s — and keep
it.
The 60s readiness budget is checked between probes, so it bounds the retry
loop rather than any one probe: a guest that accepts the connection and then
stalls mid-answer holds the call open past it. Nothing else changes — same
request, same response, same errors.

Where an image ships an init we do not recognize (neither systemd nor openrc),
the boot-completion hook cannot be installed. Start then falls back to the
previous behaviour rather than waiting out a signal that will never arrive, and
the window above is still reachable on those images.

Bug Fixes

  • net: container routing no longer breaks after an idle guest goes quiet. The
    route was resolved by looking the guest up in the host bridge's forwarding
    table, and that entry ages out after ~20 minutes of silence — which was read
    as "the bridge is gone" and tore down a healthy route (#643) (7ef3d00)
  • net: inline fast-path flows retransmit from the sender side, so a dropped
    segment recovers instead of stalling the connection (#489) (8cb164b)
  • migration: a migration can be reattached to after its progress stream
    breaks. Repeating the request replays the run's latest progress or its final
    result instead of starting duplicate work (#575) (466d6a8)

Performance Improvements

  • net: fewer guest interrupts under multi-flow load — the RX coalescing
    window now adapts to the observed frame rate (#491) (3b1a473)

Internal

No user-visible effect; listed for traceability.

  • balloon: retire the idle-descent debt — the path never ran on macOS, where
    no backend returns ballooned memory to the host (CORE-45) (#642) (f172cae)
  • ci: make the crates.io publish survive the registry's own rate limit (#640) (f35114a)