Two fixes to the auto-deploy path found on the first host-mode run:
- Write deploy/.env.staging line-by-line instead of a here-string, so the step
can't be broken by how act_runner indents/wraps the PowerShell script (the
here-string terminator must be col 0; the runner's wrapping broke it, leaving
POSTGRES_PASSWORD blank so postgres/api failed while frontend came up).
- Tag the staging 'ports' lists with !override so the overlay REPLACES the base
ports instead of merging — staging no longer also binds prod's 8080/8081.
Verified locally: compose config shows only 18080/18081/15432.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Real CI at .gitea/workflows/ci.yml (Gitea reads .gitea/workflows, not the empty
untracked .git/workflows/ci.yml cruft): backend dotnet build + dotnet test (39 tests)
and frontend npm ci + build, on pushes to main/develop and all PRs. Establishes the
merge gate recommended in the Phase 7 git-workflow review.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>