Severity: high | Category: infra | Phase: P0.16
Problem
Verified: pm2 start ecosystem.production.config.js is referenced twice but the file does not exist (only ecosystem.staging.config.js), so a fresh production host aborts under set -e. The production job also exports PATH="$HOME/.cargo/bin:$PATH" with an unescaped $HOME (expands on the runner, not the host) pointing at the wrong dir, while the installer targets ~/.local/bin — so uv is not found on a clean host.
Evidence
.github/workflows/deploy.yml:546 and :494
Acceptance criteria
- A real
ecosystem.production.config.js exists (or the job points at a parameterized/staging config).
- The uv PATH export matches staging:
export PATH="\$HOME/.local/bin:\$PATH".
- The production deploy path is dry-run/smoke-tested before the first tagged release.
Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).
Severity: high | Category: infra | Phase: P0.16
Problem
Verified:
pm2 start ecosystem.production.config.jsis referenced twice but the file does not exist (onlyecosystem.staging.config.js), so a fresh production host aborts underset -e. The production job also exportsPATH="$HOME/.cargo/bin:$PATH"with an unescaped$HOME(expands on the runner, not the host) pointing at the wrong dir, while the installer targets~/.local/bin— souvis not found on a clean host.Evidence
.github/workflows/deploy.yml:546and:494Acceptance criteria
ecosystem.production.config.jsexists (or the job points at a parameterized/staging config).export PATH="\$HOME/.local/bin:\$PATH".Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).