Skip to content

followup: hardcoded docker-compose.apple.yml references diverge from macOS overlay path #325

@yasinBursali

Description

@yasinBursali

Context

The runtime compose resolver (dream-server/scripts/resolve-compose-stack.sh) is being updated so that on Darwin hosts it selects installers/macos/docker-compose.macos.yml instead of docker-compose.apple.yml. This matches what the macOS installer writes into .compose-flags — the macOS-specific overlay sets llama-server replicas: 0 (native Metal), adds the llama-server-ready sidecar, and routes dashboard-api via host.docker.internal.

After that fix lands, four other call sites still hardcode docker-compose.apple.yml. They are pre-existing — not regressions introduced by the resolver fix — but they represent the same class of macOS/Linux overlay divergence and should be tracked.

Files

Runtime code path (highest risk):

  • dream-server/scripts/bootstrap-upgrade.sh:275 — fallback branch in dream update / model hot-swap, fires when .compose-flags is missing or unreadable on the install dir. On a stale macOS install (or after manual deletion of .compose-flags), this branch will select the Linux-style overlay and break the same way the resolver did.

Declarative / catalog entries (lower risk — describe repo contents):

  • dream-server/scripts/classify-hardware.sh:80 — tier-to-overlays lookup table, still emits docker-compose.apple.yml for the apple key.
  • dream-server/manifest.json:58 — project manifest lists docker-compose.apple.yml among the shipped files. Does not select it at runtime, but divergent if installers/macos/docker-compose.macos.yml is the authoritative macOS overlay.
  • dream-server/config/hardware-classes.json:121,136 — two entries set "compose_overlays": ["docker-compose.base.yml", "docker-compose.apple.yml"] for Apple-Silicon hardware classes.

Why these weren't folded into the resolver PR

  • bootstrap-upgrade.sh is simultaneously being modified in another open PR (bootstrap-upgrade hardening — filename arg, docker-group detection, JSON body escaping). Touching :275 in two PRs at once would cause an avoidable merge collision.
  • The catalog/declarative references are the harder question: they describe what the repo contains rather than what is selected at runtime. Changing them has downstream effects on classification and packaging code and needs its own verification pass.

Recommended approach

  1. Land the resolver fix first.
  2. In a follow-up PR, update bootstrap-upgrade.sh:275 (coordinate with whatever bootstrap-upgrade PR is currently in flight so the two land in sequence).
  3. In a separate (or same) follow-up, decide the structural question: does DreamServer keep two apple compose overlays (one for Docker-only testing, one for real macOS installs), or does it consolidate to a single overlay and let the installer vs runtime path converge? If consolidation, update classify-hardware.sh, manifest.json, and hardware-classes.json accordingly and delete the now-dead file.

Verification steps for the follow-up

  • Static: rg 'docker-compose\.apple\.yml' dream-server/ should either return zero real (non-test, non-comment) hits on the macOS runtime path, or only references to a consolidated overlay.
  • Runtime: on a macOS host, rm -f .compose-flags && dream update must not pull the Linux-style docker-compose.apple.yml — it should fall through either to the resolver (fixed) or to a corrected fallback.

Impact

  • macOS (Apple Silicon): affected — stale-cache or fallback code paths still diverge until this follow-up lands.
  • Linux (NVIDIA/AMD): unaffected — docker-compose.apple.yml remains a legitimate file for CI runs with --gpu-backend apple.
  • Windows/WSL2: unaffected — inherits Linux behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions