Name both halves of the reason an SSH push has no transport

The paragraph on how strongly the GitHub push block is enforced rests on two
properties of dejima and named one. The allowlist decides IPv4; what makes
port 22 unreachable at all is that dejima also blocks IPv6 in the container.
An allowlist naming one address family says nothing about the other, so
without the second property a session reaches GitHub's v6 ranges on any port
it likes and the argument collapses without a line of it changing.

Both are dejima's to keep true, which is why they are written down here. A
claim about another repository's behaviour fails by that behaviour changing
while the paragraph depending on it does not - the same shape as the node
templates inheriting an IPv4-only rule list from reasoning that had been
made correctly twice elsewhere.

Found by the agent working in dejima, who read the equivalent claim there,
found it did not make an IPv4-only assumption, and pointed out that the
IPv4-shaped version might be on this side instead. It was.
This commit is contained in:
2026-08-26 02:54:10 -07:00
parent afbe827e0f
commit 6796ff1cd1
+12
View File
@@ -262,6 +262,18 @@ can clone, fetch and call the API, and port 22 is simply unreachable. An SSH
push has no transport, whatever `git-push-guard.sh` does or does not catch.
`--allow-github-push` is what opens it, per launch.
**That rests on two properties of dejima, not one**, and naming only the first
is how this paragraph would quietly stop being true. The allowlist decides IPv4;
what makes port 22 unreachable *at all* is that dejima also blocks IPv6 in the
container. An allowlist naming one address family says nothing about the other,
so without the second property a session reaches GitHub's own v6 ranges on any
port it likes, port 22 included, and the argument above collapses without a line
of it changing.
Both are dejima's to keep true, which is the point of writing them down here:
this is a claim about another repository's behaviour, and the way such a claim
fails is that the behaviour changes and the paragraph depending on it does not.
Closing the CI chain follows from that principle. It is not the reason for it.
**This repository exists so that it is not the only answer.** Granting push