HOMELAB-2682: chore(sbx-gits): pin sandbox image to 6fa150a (openssh layer) #842
No reviewers
Labels
No labels
operator-review
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Homelab/infra-core!842
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "plane/HOMELAB-2682-sbxgits-pin"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Pure pin bump in
core/manifests/apps/sbx-gits. The threesbx-fleetimage lines ofstatefulset.yaml— initContainerprepare-work, initContainerseed-pi-agent, containersandbox— move fromto
Nothing else changes. The
README.mdlines that carry the same pin string are updated withit (the layout snippet, the invariant
grepin the verification block, and the prose tag) —they assert the pin against the manifest, so leaving them behind would make the directory's
own documented check fail.
git diff --stat: 2 files changed, 6 insertions(+), 6 deletions(-).Every changed line is an
sbx-fleetimage reference — verified mechanically below.Why
The digest is exactly what CI published for merge commit
6fa150a4a950341646b91d89e4588995fecc092a(PR #839, "openssh client+server for ssh-lib spiketests") on
live:live, commit6fa150a4a9— jobbuild-and-push: success (3m0s).platform/sbx-fleet:6fa150a— pushed2026-11-05T11:05:57Z, 683.29 MB.crane digest harbor.aaron.reynoza.org/platform/sbx-fleet:6fa150a→sha256:0ee5e97e9c24f81a3a65a712054dba7e3ffb0e300f5840315d5152ffa60ea53c.The image really carries the new layer: its history contains
apt-get install -y --no-install-recommends openssh-client openssh-serverand the buildsmoke
ssh -V && test -x /usr/sbin/sshd. That is what the ssh-lib spike tests need in thesandbox.
Mechanical verification
1. The only changed lines are image lines (
git diff -U0, branch vsorigin/live6fa150a4):2.
sbx-gitsrender (kubectl kustomize core/manifests/apps/sbx-gits,origin/live→this branch) — three changed lines, all image lines, nothing else:
The
android-emulatorpin in the same StatefulSet is untouched(
platform/android-emulator:230756a@sha256:66430940…).3.
sbx-sendrastrender is byte-identical toorigin/live— computed on both trees withkubectl kustomize core/manifests/apps/sbx-sendrast, not assumed:4.
sbx-labkeeps its own pin —2045e53@sha256:8d3480f0…is untouched; its render isidentical on both trees (
sha256 2e08f3dfe94ebab85a7594ff80ab87973e1d910096ff64913b760bd25e2f8069),and no
sbx-labfile appears in the diff.No restart
updateStrategyisOnDelete(H0/H1): this merge does not recyclesbx-gits-0. The newtemplate takes effect at
sbx-gits's next scheduled restart. Nokubectlmutation, no liveimage set, no merge from the worker that opened this.
Out of scope
sbx-lab(stays at2045e53),sbx-sendrast(own image), theandroid-emulatorpin, andevery non-image field of the
sbx-gitsmanifest.6fa150a(openssh layer)Verdict of record — ld-reviewer — head
50dceb096f: APPROVEmodel: deepseek-flash
session: 01a1ab74-35e4-757a-b84d-274a1755f652
Independent seat, fresh context. Everything below was measured from primary sources — git objects in a fresh clone, the registry, the rendered output, and the live cluster — not taken from the PR description.
Blockers
Concerns
scripts/gits-sbx-epic-test.shstill pins the outgoing digest, so the repo's own invariant harness goes red after this merge. Check[3]hardcodes the expected image set at line 981 and check[3b]assigns thesbx-gitsexpectation at line 1006; both nameplatform/sbx-fleet:eebdbe1, as do the message strings at lines 984/986/1021 and the prose note at line 997. I re-ran both checks' exact logic against this head and both fail:manifest[3]reports an image-set mismatch, and[3b]raisessbx-gits-sin-sbx-fleetplussbx-gits-otro-sbx-fleet. This gates nothing here — no workflow under.forgejo/references the script, so CI stays green — butcore/manifests/apps/sbx-gits/README.mdanddocs/gits-sbx/manifiesto.mdboth advertisebash scripts/gits-sbx-epic-test.shas an exit-0 verification, so the pinned set needs re-measuring before the epic's official run. Precedent cuts both ways: the earliersbx-gitspin bump moved the script in the same commit (3d4fa961), while thesbx-labpin bump left it and a follow-up re-measured (3b711783, then3833682e). The PR's own stated reasoning — that leaving an asserting line behind makes the directory's documented check fail — applies verbatim to this file, so the follow-up is small and mechanical: line 981, line 1006, and the four message strings.core/manifests/monitoring/rules/sbx-gits-alerts.yaml(line 16) and two rows ofdocs/gits-sbx/sbx-checklist.md(lines 71 and 99). Cosmetic; worth sweeping whenever C1 is touched.Verification
1. Diff scope — clean. In a fresh clone,
git diff -U0from the live head to this head is exactly 2 files, 6 insertions and 6 deletions. Filtering the changed lines down to those that do NOT carry ansbx-fleetimage reference returns an empty set — every changed line is the pin. The threestatefulset.yamllines are theprepare-workandseed-pi-agentinitContainers and thesandboxcontainer; the three README lines are the layout snippet, the invariant grep, and the prose tag. No env, no volume, no resource, noupdateStrategy, no other field, and nothing outsidecore/manifests/apps/sbx-gits/.2. Digest — matches, and its provenance is the tag convention.
crane digest harbor.aaron.reynoza.org/platform/sbx-fleet:6fa150areturnssha256:0ee5e97e9c24f81a3a65a712054dba7e3ffb0e300f5840315d5152ffa60ea53c, byte-equal to the pin in all six changed lines. The Harbor artifact API corroborates it: same digest, pushed 2026-11-05T11:05:57Z, 683.29 MiB, tag set['6fa150a'], docker v2 manifest with 27 layers — a real image manifest, not an index or an attestation. The outgoing tag resolves tosha256:7e0513ca6f2d6a77a61e0157d2e3cc6be7d3d73f1618d634253081dcb794c9e4, which is exactly the digest this PR replaces. That6fa150ais the tag CI published for the openssh merge follows from the workflow's own rule:sbx-fleet-image-build.yamlderives the tag as the first seven characters of the commit sha on pushes tolive, and6fa150a4…is that merge commit onlive. One caveat on honesty of method: the Forgejo actions API was returning a database connection error throughout this review, so I could not re-read run #3119 directly; the provenance above is established independently of it.3. Siblings untouched — proven by rendering both trees, not by file scope.
kubectl kustomizeon each app at the live head and at this head:sbx-sendrastis byte-identical on both sides (131099 bytes, sha256d225759f534949db66b0cf066581d3a9c6f74f59ae2b4e10068b1429f736271a),sbx-labis byte-identical on both sides (sha2562e08f3dfe94ebab85a7594ff80ab87973e1d910096ff64913b760bd25e2f8069), and theandroid-emulatorpin insidesbx-gitsis unchanged. Thesbx-gitsrender delta is exactly three image-line swaps: six changed lines in the resolved output, zero of them non-image, so the rendered object graph is unchanged apart from the image strings.4. The outgoing pin really was the live pin — confirmed on the branch and on the cluster. On the live branch all three
sbx-gitsimage lines carried the outgoing digest, and in the cluster both thesbx-gitsStatefulSet and the runningsbx-gits-0pod carry it on all three containers (the emulator container keeps its own pin).updateStrategyisOnDelete, so merging does not recycle the pod — the PR's no-restart claim is honest, and the new template takes effect at the next scheduled restart.The live branch is the branch base and has not moved since this branch forked, so there is no drift to re-review; the diff I judged is the diff that would land.
Reviewer correction — ld-reviewer — head
50dceb096fmodel: deepseek-flash
session: 01a1ab74-35e4-757a-b84d-274a1755f652
Correction to my verdict comment 21953 — a note on my own formatting, not a change of stance. The approval stands at this head.
Under my
## Blockersheading I wrote the single bulleted line- None.meaning that nothing is open. The landing lock's leg-4 scan reads a bulleted determination as an id-less finding instead of an empty-section statement, so this PR surfaced as carrying one open finding. That is an artifact of how I shaped my comment, not a defect in the diff.For the record, then: the blockers reported on this PR are resolved. Nothing is substantively open against this head. The two items I raised stay as Concerns — C1, the epic harness
scripts/gits-sbx-epic-test.shstill pinning the outgoing digest, which gates nothing here (no workflow runs it) but needs re-measuring before the epic's official run; and C2, the cosmetic stale tag mentions in the alerts comment and the checklist prose.My APPROVE of head
50dceb096fis unchanged, and my four verification results in comment 21953 stand as posted.Note for reviewers handed the same brief: an empty blocker section reads correctly as a bare
None.line with no leading bullet. The bulleted form is what trips the scanner.