mirror of
https://github.com/multica-ai/multica.git
synced 2026-08-05 17:40:11 +02:00
Addresses the fourth review round on #6168. The Makefile passed only values to the preflight, so the script inferred "the env file does not set this" from an empty string. An explicit empty assignment is a different input from an absent one: make lets `BACKEND_PORT=` in the env file override `BACKEND_PORT=9000` from the environment, and the variable then drops out of the alias chain instead of setting a port. With .env holding PORT=8080 and BACKEND_PORT=, invoked as `BACKEND_PORT=9000 make selfhost`, the stack published 8080 and the health check probed 8080 — correct — while the preflight announced the backend host port resolves to 9000 from BACKEND_PORT (environment) Set but unused: PORT=8080 (.env) naming the ignored value as the winner and the winning value as unused. A report that contradicts the startup is worse than no report. FRONTEND_PORT= had the matching hole: it shadowed the environment, Compose fell back to 3000, and the preflight said nothing. The Makefile now captures ENV_FILE_<VAR>_IS_SET from $(origin) alongside the value, for all five port variables via one $(foreach) instead of hand-written lines. The preflight treats a variable the file defines as taking the file's value even when empty, so it shadows the environment, and an empty value never wins — resolution continues down the chain and falls back to 8080. Inputs the winner shadows are still listed, including ones shadowed by an empty assignment. The frontend check mirrors this and now names the port that actually resolved. Recipe-level tests cover an empty alias over a shell value, every link of the chain emptied at once, and the frontend equivalent — each asserting the reported winner, the Compose published port and the probed port all agree. Against the previous implementation the first case fails with `reported: 9000 / actual: 8080`. Co-authored-by: multica-agent <github@multica.ai>