drop stale pull_policy never from node compose
115 unmodified linesExpand all11611711811912012112212312412512012112212312412512612712812953 unmodified lines115 unmodified linesExpand allan Action use the client's own `execute_and_poll`; from CI, capture theupdate id and poll `read/GetUpdate` until `status: Complete`, which is whatthe workflow does.
**Compose is not guaranteed to pull.** Some services carry`pull_policy: never` from before images came from a registry, so`compose up` skips the pull and then dies with a bare "No such image" thatnames no cause. The Action pulls explicitly on each host first, so aregistry or credential problem surfaces as a registry error on the hostthat has it, before anything is torn down.**The Action pulls before it deploys.** Compose would now do this itself— the `pull_policy: never` lines that made it skip the fetch and then dieon a bare "No such image" were removed on 2026-09-02. The explicit pullstays because it is the better failure mode: a registry or credentialproblem surfaces as a registry error, on the host that has it, beforeanything is torn down.
**Komodo's reported service image is rendered, not observed.** When itrenders without the stack's env file the tag interpolates to nothing andcomes back as `:0`, so a healthy service reads as a failed deploy.53 unmodified lines225 unmodified linesExpand all22622722822923023123223323423523023123223323423523623723894 unmodified lines225 unmodified linesExpand all })
// Pull explicitly, on the host, before deploying. // // Compose cannot be relied on to fetch these: some services carry // `pull_policy: never` from before images came from a registry, so // `compose up` skips the pull and then dies with a bare // "No such image" that names no cause. Pulling here means a registry or // credential problem surfaces as a registry error, on the host that has // the problem, before anything is torn down. // Compose would now do this itself — the `pull_policy: never` lines that // used to make it skip the fetch and then die on a bare "No such image" // have been removed. This stays because it is still the better failure // mode: a registry or credential problem surfaces as a registry error, // on the host that has the problem, before anything is torn down. const wanted = [ ...new Set( (stack.info?.services ?? []) .map((s) => s.image)94 unmodified lines