Executes the FOLLOW-UP carried in this manifest since the readiness fix, now that k3s is
v1.36 and sidecar containers are GA.
dind moves into initContainers as the first entry with restartPolicy: Always — the
one field that makes an initContainer a sidecar: starts before the regular containers, runs
alongside them, terminated after them. kubelet now enforces the ordering the runner used to
hand-roll, so the runner drops its command: override and runs the image's own entrypoint.
The startupProbe execs a full TLS-verified docker … info, not a tcpSocket probe. A
tcpSocket probe would re-open the exact gap the old Stage 1 existed to close: dockerd writes
the certs and only then starts listening, so the port can accept a connection while the
certs are absent — and act_runner hard-exits on a missing /certs/client/ca.pem. periodSeconds: 1 × failureThreshold: 60 preserves the previous 60s cap.
It also removes the one-per-start dockerd line http: TLS handshake error from 127.0.0.1: EOF
— that was the old nc -z probe opening a connection and closing it without a TLS handshake.
An error we generated ourselves and then read back in the logs.
Secondary win: deleting the shell deletes an envsubst hazard. apps-wave-1 runs postBuild
substitution over this entire manifest, comments included, and those loops depended on bare
dollar-names surviving untouched — a braced or double-dollar spelling would have silently
unbounded the waits or failed the whole Kustomization. The only dollar left is the intended ${BASE_DOMAIN}.
⚠️ Merge this ALONE, and before enabling the required status check
This Deployment is the merge gate for the entire repository. If the conversion is wrong,
nothing can merge — including the revert. Merge it, then watch a real workflow run green on
the converted pod, and only then turn on enable_status_check.
Executes the FOLLOW-UP carried in this manifest since the readiness fix, now that k3s is
v1.36 and sidecar containers are GA.
`dind` moves into `initContainers` as the first entry with **`restartPolicy: Always`** — the
one field that makes an initContainer a sidecar: starts before the regular containers, runs
alongside them, terminated after them. kubelet now enforces the ordering the runner used to
hand-roll, so **the runner drops its `command:` override** and runs the image's own entrypoint.
**The startupProbe execs a full TLS-verified `docker … info`, not a `tcpSocket` probe.** A
tcpSocket probe would re-open the exact gap the old Stage 1 existed to close: dockerd writes
the certs and only *then* starts listening, so the port can accept a connection while the
certs are absent — and act_runner hard-exits on a missing `/certs/client/ca.pem`.
`periodSeconds: 1 × failureThreshold: 60` preserves the previous 60s cap.
It also removes the one-per-start dockerd line `http: TLS handshake error from 127.0.0.1: EOF`
— that was the old `nc -z` probe opening a connection and closing it without a TLS handshake.
An error we generated ourselves and then read back in the logs.
**Secondary win:** deleting the shell deletes an envsubst hazard. apps-wave-1 runs postBuild
substitution over this entire manifest, comments included, and those loops depended on bare
dollar-names surviving untouched — a braced or double-dollar spelling would have silently
unbounded the waits or failed the whole Kustomization. The only dollar left is the intended
`${BASE_DOMAIN}`.
### ⚠️ Merge this ALONE, and before enabling the required status check
This Deployment **is the merge gate for the entire repository.** If the conversion is wrong,
nothing can merge — including the revert. Merge it, then watch a real workflow run green on
the converted pod, and only then turn on `enable_status_check`.
Gate: **PASS, rc 0, 73s**.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Executes the FOLLOW-UP that has been carried in this manifest since the readiness fix,
now that k3s is v1.36 and sidecar containers are GA.
dind moves into initContainers as the first entry with restartPolicy: Always -- the one
field that makes an initContainer a sidecar: it starts before the regular containers,
runs alongside them, and is terminated after them. kubelet therefore enforces the
ordering that the runner used to hand-roll, so the runner drops its command: override
and runs the image's own entrypoint.
The startupProbe execs a full TLS-verified `docker ... info`, NOT a tcpSocket probe. A
tcpSocket probe would re-open the exact gap the old Stage 1 existed to close: dockerd
writes the TLS certs and only THEN starts listening, so the port can accept a connection
while the certs are absent, and act_runner hard-exits on a missing
/certs/client/ca.pem. `docker info` proves both that the certs are usable and that the
daemon answers. periodSeconds 1 x failureThreshold 60 preserves the previous 60s cap.
It also removes the one-per-start dockerd log line
http: TLS handshake error from 127.0.0.1: EOF
which was the old `nc -z` probe opening a TCP connection and closing it without a TLS
handshake -- an error we were generating ourselves and then reading in the logs.
SECONDARY WIN: deleting the shell deletes an envsubst hazard. apps-wave-1 runs postBuild
substitution over this ENTIRE manifest, comments included, and those loops depended on
bare dollar-names passing through untouched -- a braced or double-dollar spelling would
have silently unbounded the waits or failed the whole Kustomization. The only dollar left
in the file is the intended ${BASE_DOMAIN}.
LANDS ALONE, DELIBERATELY. This Deployment is the merge gate for the entire repository:
if the conversion is wrong, nothing can merge. Merge this BEFORE enabling the required
status check, and watch a real workflow run green on the converted pod before doing so --
otherwise a bad conversion locks the repo with no way to revert through the gate.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Executes the FOLLOW-UP carried in this manifest since the readiness fix, now that k3s is
v1.36 and sidecar containers are GA.
dindmoves intoinitContainersas the first entry withrestartPolicy: Always— theone field that makes an initContainer a sidecar: starts before the regular containers, runs
alongside them, terminated after them. kubelet now enforces the ordering the runner used to
hand-roll, so the runner drops its
command:override and runs the image's own entrypoint.The startupProbe execs a full TLS-verified
docker … info, not atcpSocketprobe. AtcpSocket probe would re-open the exact gap the old Stage 1 existed to close: dockerd writes
the certs and only then starts listening, so the port can accept a connection while the
certs are absent — and act_runner hard-exits on a missing
/certs/client/ca.pem.periodSeconds: 1 × failureThreshold: 60preserves the previous 60s cap.It also removes the one-per-start dockerd line
http: TLS handshake error from 127.0.0.1: EOF— that was the old
nc -zprobe opening a connection and closing it without a TLS handshake.An error we generated ourselves and then read back in the logs.
Secondary win: deleting the shell deletes an envsubst hazard. apps-wave-1 runs postBuild
substitution over this entire manifest, comments included, and those loops depended on bare
dollar-names surviving untouched — a braced or double-dollar spelling would have silently
unbounded the waits or failed the whole Kustomization. The only dollar left is the intended
${BASE_DOMAIN}.⚠️ Merge this ALONE, and before enabling the required status check
This Deployment is the merge gate for the entire repository. If the conversion is wrong,
nothing can merge — including the revert. Merge it, then watch a real workflow run green on
the converted pod, and only then turn on
enable_status_check.Gate: PASS, rc 0, 73s.
Co-Authored-By: Claude Opus 5 (1M context) [email protected]
🤖 Generated with Claude Code
Executes the FOLLOW-UP that has been carried in this manifest since the readiness fix, now that k3s is v1.36 and sidecar containers are GA. dind moves into initContainers as the first entry with restartPolicy: Always -- the one field that makes an initContainer a sidecar: it starts before the regular containers, runs alongside them, and is terminated after them. kubelet therefore enforces the ordering that the runner used to hand-roll, so the runner drops its command: override and runs the image's own entrypoint. The startupProbe execs a full TLS-verified `docker ... info`, NOT a tcpSocket probe. A tcpSocket probe would re-open the exact gap the old Stage 1 existed to close: dockerd writes the TLS certs and only THEN starts listening, so the port can accept a connection while the certs are absent, and act_runner hard-exits on a missing /certs/client/ca.pem. `docker info` proves both that the certs are usable and that the daemon answers. periodSeconds 1 x failureThreshold 60 preserves the previous 60s cap. It also removes the one-per-start dockerd log line http: TLS handshake error from 127.0.0.1: EOF which was the old `nc -z` probe opening a TCP connection and closing it without a TLS handshake -- an error we were generating ourselves and then reading in the logs. SECONDARY WIN: deleting the shell deletes an envsubst hazard. apps-wave-1 runs postBuild substitution over this ENTIRE manifest, comments included, and those loops depended on bare dollar-names passing through untouched -- a braced or double-dollar spelling would have silently unbounded the waits or failed the whole Kustomization. The only dollar left in the file is the intended ${BASE_DOMAIN}. LANDS ALONE, DELIBERATELY. This Deployment is the merge gate for the entire repository: if the conversion is wrong, nothing can merge. Merge this BEFORE enabling the required status check, and watch a real workflow run green on the converted pod before doing so -- otherwise a bad conversion locks the repo with no way to revert through the gate. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>