diff --git a/prompts/deploy-commander.md b/prompts/deploy-commander.md index 410df00e..dbb43ef0 100644 --- a/prompts/deploy-commander.md +++ b/prompts/deploy-commander.md @@ -18,6 +18,21 @@ there is a release to deploy that has not been deployed. git ls-remote --tags origin 'refs/tags/deploy/*' ``` +**Poll a LOCAL remote, never the public hostname.** On `officer-dev`, gitea is a plugin on the same machine +— it listens on `100.64.0.13:10023` and on loopback — so `origin` points there. `gitea.officer.dev` resolves +to the public address and arrives through Nginx Proxy Manager, where every connection appears to come from +one container IP: internet bots get that IP penalised by `srclimit_penalise`, and SSH is then refused for +long stretches. + +That is not hypothetical and it is not subtle when it happens. On 2026-08-21 a tag pushed at 21:47 was not +noticed until 23:07 — eighty minutes of `ls-remote` being closed on, forty-odd ticks, all correctly logged +and retried. On 2026-08-22 it refused at 08:35 and again at 12:58. The loop is not at fault in any of those: +it logs the exit code, sleeps, and carries on. It is simply asking through a door that is sometimes shut. + +If `ls-remote` fails with `Connection closed by port 22`, that is this, and the remote is wrong +rather than the credentials. Loopback needs a `known_hosts` entry that may not exist; the tailnet address is +already trusted. + A release is **a tag**, named `deploy/` — `deploy/2026.08.21.01`. Nothing else triggers you: not a commit message, not a branch, not a push.