HOMELAB-2682: fix(sbx-gits): generate the daemon idle settings E0R applied by hand #868

Merged
pi-landing merged 5 commits from plane/HOMELAB-2682-gradle-daemon-gen into live 2026-11-06 06:20:38 +00:00
Collaborator

What

gits-sbx-android-install.sh generates $GRADLE_USER_HOME/gradle.properties
(/home/ld/work/.gradle/gradle.properties) and rewrites it on every install and
every doctor. E0R's daemon fix lives in that file as a local edit, so the next
install/doctor loses it. This PR moves both settings into the generator.

From gits-hypervisor:

/run/sbx-tools/gits-sbx-android-install.sh generates GRADLE_USER_HOME/gradle.properties
in sbx-gits. E0R's daemon fix is a local edit in that generated file
(org.gradle.daemon.idletimeout=300000, and
-Dkotlin.daemon.options=autoshutdownIdleSeconds=300 inside org.gradle.jvmargs).
Put them in the generator or they're lost on the next install.

The two settings, exactly as E0R's live edit has them

  1. -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 merged into the existing
    org.gradle.jvmargs value (appended — the line already existed):

    org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300
    
  2. org.gradle.daemon.idletimeout=300000 as its own property, in the same place E0R's
    edit sits — after the three existing pins:

    kotlin.daemon.jvmargs=-Xmx1536m
    org.gradle.workers.max=4
    ...
    org.gradle.daemon.idletimeout=300000
    

Nothing else in the writer changed: same heredoc, same $PROG, same "write temp, cmp,
mv" idempotence, same callers (install and doctor). The kustomization.yaml,
statefulset.yaml, the smoke, the proof tool, the lock and the queue are untouched.

Verification

Generated vs the live file in the pod (kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties, read-only), property lines only:

org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300   ==
kotlin.daemon.jvmargs=-Xmx1536m                                                ==
org.gradle.workers.max=4                                                       ==
org.gradle.daemon.idletimeout=300000                                           ==

diff <(grep -v '^#' live) <(grep -v '^#' generated) → empty: the four property
lines are byte-identical and in the same order. Placement matches too — in both files
org.gradle.daemon.idletimeout is the last property line, immediately after the three
memory pins (line 11 live / line 12 generated; the one-line offset is the generator's
own truthful comment, since E0R's comment says "LOCAL OVERRIDE (not in the installer
template)", which is no longer true).

Generation was run for real, not grepped: the writer was extracted with the case
stripped and WORK pointed at a throwaway tree (the technique 10c already uses), then a
second run proved the no-op path (ya al dia) and a byte-identical file.

Harness (scripts/gits-sbx-epic-test.sh, solo run):

  • 10c now pins the combined jvmargs line (whole line, grep -qxF, not a prefix —
    an option pasted or lost changes the jvmargs value without changing the prefix), adds
    org.gradle.daemon.idletimeout=300000, and gains three mutations that bite:
    drop the idle line, change its value, drop the Kotlin autoshutdown.
  • SBX_GITS_DIFF_SET re-measured against origin/live = 9119eb2b: the anchor branch
    (#859) is already in live, so this branch's set is exactly
    M tools/gits-sbx-android-install.sh. T7[diff] and 17[R159] (d) are green, and
    their "the set bites" mutations are green.
  • bash -n clean on both files.

Rollout

No hold needed: this rides the next ConfigMap refresh exactly like every other change to
tools/ (same auto-sync as everything else). The generated file keeps the values E0R
already set by hand, so the refresh is a no-op on the live content — until someone runs
install/doctor, which is precisely the case this fixes.

Not in this PR

docs/gits-sbx/t7-android-install.md still says "los tres límites" (the doc check in 10c
only greps for the three memory values, so it stays green). Left untouched on purpose —
say the word and it rides a follow-up.

## What `gits-sbx-android-install.sh` **generates** `$GRADLE_USER_HOME/gradle.properties` (`/home/ld/work/.gradle/gradle.properties`) and rewrites it on every `install` and every `doctor`. E0R's daemon fix lives in that file as a **local edit**, so the next install/doctor loses it. This PR moves both settings into the generator. From gits-hypervisor: > /run/sbx-tools/gits-sbx-android-install.sh generates GRADLE_USER_HOME/gradle.properties > in sbx-gits. E0R's daemon fix is a local edit in that generated file > (org.gradle.daemon.idletimeout=300000, and > -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 inside org.gradle.jvmargs). > Put them in the generator or they're lost on the next install. ## The two settings, exactly as E0R's live edit has them 1. `-Dkotlin.daemon.options=autoshutdownIdleSeconds=300` **merged into** the existing `org.gradle.jvmargs` value (appended — the line already existed): ``` org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 ``` 2. `org.gradle.daemon.idletimeout=300000` as its own property, in the same place E0R's edit sits — **after** the three existing pins: ``` kotlin.daemon.jvmargs=-Xmx1536m org.gradle.workers.max=4 ... org.gradle.daemon.idletimeout=300000 ``` Nothing else in the writer changed: same heredoc, same `$PROG`, same "write temp, `cmp`, `mv`" idempotence, same callers (`install` and `doctor`). The `kustomization.yaml`, `statefulset.yaml`, the smoke, the proof tool, the lock and the queue are untouched. ## Verification **Generated vs the live file in the pod** (`kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties`, read-only), property lines only: ``` org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 == kotlin.daemon.jvmargs=-Xmx1536m == org.gradle.workers.max=4 == org.gradle.daemon.idletimeout=300000 == ``` `diff <(grep -v '^#' live) <(grep -v '^#' generated)` → **empty**: the four property lines are byte-identical and in the same order. Placement matches too — in both files `org.gradle.daemon.idletimeout` is the last property line, immediately after the three memory pins (line 11 live / line 12 generated; the one-line offset is the generator's own truthful comment, since E0R's comment says "LOCAL OVERRIDE (not in the installer template)", which is no longer true). Generation was run for real, not grepped: the writer was extracted with the `case` stripped and `WORK` pointed at a throwaway tree (the technique 10c already uses), then a second run proved the no-op path (`ya al dia`) and a byte-identical file. **Harness** (`scripts/gits-sbx-epic-test.sh`, solo run): * `10c` now pins the **combined jvmargs line** (whole line, `grep -qxF`, not a prefix — an option pasted or lost changes the jvmargs value without changing the prefix), adds `org.gradle.daemon.idletimeout=300000`, and gains three mutations that bite: drop the idle line, change its value, drop the Kotlin autoshutdown. * `SBX_GITS_DIFF_SET` re-measured against `origin/live` = `9119eb2b`: the anchor branch (#859) is already in live, so this branch's set is exactly `M tools/gits-sbx-android-install.sh`. `T7[diff]` and `17[R159] (d)` are **green**, and their "the set bites" mutations are green. * `bash -n` clean on both files. ## Rollout No hold needed: this rides the next ConfigMap refresh exactly like every other change to `tools/` (same auto-sync as everything else). The generated file keeps the values E0R already set by hand, so the refresh is a no-op on the live content — until someone runs `install`/`doctor`, which is precisely the case this fixes. ## Not in this PR `docs/gits-sbx/t7-android-install.md` still says "los tres límites" (the doc check in 10c only greps for the three memory values, so it stays green). Left untouched on purpose — say the word and it rides a follow-up.
HOMELAB-2682: fix(sbx-gits): daemon idle settings generated into gradle.properties
All checks were successful
CI Review / receiver-test (pull_request) Successful in 5s
CI Review / runner-manifest-test (pull_request) Successful in 7s
CI Review / helm-validate (pull_request) Successful in 12s
CI Review / alert-receiver-test (pull_request) Successful in 21s
Lint & Validate / shellcheck (pull_request) Successful in 7s
Lint & Validate / yaml-lint (pull_request) Successful in 19s
CI Review / record-sql-test (pull_request) Successful in 52s
Lint & Validate / terraform-validate (pull_request) Successful in 2m4s
CI Review / dispatcher-test (pull_request) Successful in 2m37s
CI Review / cockpit-test (pull_request) Successful in 2m33s
CI Review / cockpit-e2e (pull_request) Successful in 2m34s
6e300da6b5
HOMELAB-2682: docs(harness): re-measure the pinned sbx-gits set against live 2e8ef24d (post-revert #866)
All checks were successful
CI Review / receiver-test (pull_request) Successful in 5s
CI Review / runner-manifest-test (pull_request) Successful in 6s
CI Review / helm-validate (pull_request) Successful in 11s
Lint & Validate / shellcheck (pull_request) Successful in 6s
CI Review / alert-receiver-test (pull_request) Successful in 20s
Lint & Validate / yaml-lint (pull_request) Successful in 21s
CI Review / record-sql-test (pull_request) Successful in 54s
Lint & Validate / terraform-validate (pull_request) Successful in 1m52s
CI Review / dispatcher-test (pull_request) Successful in 2m34s
CI Review / cockpit-e2e (pull_request) Successful in 2m35s
CI Review / cockpit-test (pull_request) Successful in 2m43s
ab079b218c
Author
Collaborator

Head is now ab079b21 — live moved under the branch (revert #866), so it was merged in

live advanced from 9119eb2b to 2e8ef24d (revert #866, "pre-#859 proof tool delivery")
while this PR was open. That revert changes tools/gits-sbx-emu-proof.sh only, but the
harness measures its pinned change set against origin/live, so an unmerged base would
have turned T7[diff] red for the wrong reason: my branch lacked a file live had changed.
Fixed the way the set is meant to be fixed — merged origin/live into the branch
(54adacd5, no rebase, no force-push) and re-measured the pinned set against 2e8ef24d
(ab079b21, comment in the harness updated to say so).

Diff versus the new live is still exactly two files:

core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh   +28 -10
scripts/gits-sbx-epic-test.sh                                    +58 -15

CI on ab079b21: green (shellcheck, yaml-lint, terraform-validate, helm-validate,
runner-manifest-test, cockpit-*, dispatcher-test, record-sql-test, alert/receiver — both runs).

Harness on the merged head, and what the 53 reds are

bash scripts/gits-sbx-epic-test.sh solo on ab079b21: 53 red / 650 checks.
The same harness, same machine, on a clean 2e8ef24d checkout: 53 red / 649 checks,
and the two red lists are identical label-for-label (comm on both lists → empty in
both directions). So this PR adds zero reds.

Those 53 are live's own post-revert inconsistency, and they are not about this PR: every one
is ERROR argumento desconocido en check: '--tree' in the proof-tool suites
(22[R176b], 24[HOMELAB-2682], 25[HOMELAB-2682]) — live now ships the pre-#859
tools/gits-sbx-emu-proof.sh, while the harness in live still asserts the post-#859
contract. Whoever owns the re-land declares them (the revert message says "pending
gits-proof-suite").

The three checks that are genuinely about this branch are green, including their
"the set bites" mutations:

PASS  T7[diff] sbx-gits cambia contra origin/live SOLO en lo esperado: M tools/gits-sbx-android-install.sh
PASS  T7[diff] mutacion roja: quitado 'M tools/gits-sbx-android-install.sh' del conjunto permitido
PASS  T7+R96[10c] ... org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300, ... org.gradle.daemon.idletimeout=300000 ...
PASS  17[R159] (d) T7[diff] sbx-gits cambia contra origin/live SOLO en lo esperado: M tools/gits-sbx-android-install.sh
PASS  17[R159] (d) mutacion roja: quitado 'M tools/gits-sbx-android-install.sh' del conjunto permitido

Re-ran the generation on the merged head and read the pod's live file again: the four
property lines are still byte-identical and in the same order (diff of the non-comment
lines is empty).

## Head is now `ab079b21` — live moved under the branch (revert #866), so it was merged in `live` advanced from `9119eb2b` to `2e8ef24d` (revert #866, "pre-#859 proof tool delivery") while this PR was open. That revert changes `tools/gits-sbx-emu-proof.sh` only, but the harness measures its pinned change set **against `origin/live`**, so an unmerged base would have turned `T7[diff]` red for the wrong reason: my branch lacked a file live had changed. Fixed the way the set is meant to be fixed — merged `origin/live` into the branch (`54adacd5`, no rebase, no force-push) and re-measured the pinned set against `2e8ef24d` (`ab079b21`, comment in the harness updated to say so). Diff versus the new `live` is still **exactly two files**: ``` core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh +28 -10 scripts/gits-sbx-epic-test.sh +58 -15 ``` CI on `ab079b21`: green (shellcheck, yaml-lint, terraform-validate, helm-validate, runner-manifest-test, cockpit-*, dispatcher-test, record-sql-test, alert/receiver — both runs). ## Harness on the merged head, and what the 53 reds are `bash scripts/gits-sbx-epic-test.sh` solo on `ab079b21`: **53 red / 650 checks**. The same harness, same machine, on a clean `2e8ef24d` checkout: **53 red / 649 checks**, and the two red lists are **identical label-for-label** (`comm` on both lists → empty in both directions). So this PR adds **zero** reds. Those 53 are live's own post-revert inconsistency, and they are not about this PR: every one is `ERROR argumento desconocido en check: '--tree'` in the proof-tool suites (`22[R176b]`, `24[HOMELAB-2682]`, `25[HOMELAB-2682]`) — `live` now ships the **pre-#859** `tools/gits-sbx-emu-proof.sh`, while the harness in `live` still asserts the **post-#859** contract. Whoever owns the re-land declares them (the revert message says "pending gits-proof-suite"). The three checks that are genuinely about this branch are green, including their "the set bites" mutations: ``` PASS T7[diff] sbx-gits cambia contra origin/live SOLO en lo esperado: M tools/gits-sbx-android-install.sh PASS T7[diff] mutacion roja: quitado 'M tools/gits-sbx-android-install.sh' del conjunto permitido PASS T7+R96[10c] ... org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300, ... org.gradle.daemon.idletimeout=300000 ... PASS 17[R159] (d) T7[diff] sbx-gits cambia contra origin/live SOLO en lo esperado: M tools/gits-sbx-android-install.sh PASS 17[R159] (d) mutacion roja: quitado 'M tools/gits-sbx-android-install.sh' del conjunto permitido ``` Re-ran the generation on the merged head and read the pod's live file again: the four property lines are still byte-identical and in the same order (`diff` of the non-comment lines is empty).
Collaborator

Verdict of record — ld-reviewer — head ab079b218c: APPROVE
model: deepseek-flash
session: 01a1af28-68b8-757a-b84d-27db4468c5fe

Blockers

None.

Concerns

  • C1 (minor, harness) — the static predicate f96_props matches with grep -qF (substring, not whole-line) against the installer, and the writer's own comment block repeats org.gradle.daemon.idletimeout=300000 and -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 verbatim. I built the sharp mutant the committed mutations miss — delete only the heredoc line, keep the comment — and the static predicate stays GREEN on it. It is not a hole in 10c as a whole: the behavioural leg (run the writer, grep -qxF on the generated file) goes RED on that same mutant, so the case still bites. Worth a whole-line match on the installer later, not a blocker.

  • C2 (minor, description drift) — the PR body says SBX_GITS_DIFF_SET was re-measured against origin/live = 9119eb2b; the committed inline comment in scripts/gits-sbx-epic-test.sh says 2e8ef24d, which is the real origin/live head and this PR's base. The inline comment is the correct one; the body is stale.

  • C3 (declared, follow-up owed) — docs/gits-sbx/t7-android-install.md still says "los tres límites" and lists only the three memory pins, and 10c's doc leg still greps only those three, so the doc check stays green on a generator that now writes four properties. Declared under "Not in this PR" and accepted there; it should ride a follow-up rather than be forgotten.

  • C4 (context, not this PR's doing) — the harness solo run is 53 red of 650 on this head, but the same suite on origin/live (2e8ef24d) is 55 red of 652. Zero head-only failures; the head's red set is a strict subset of the baseline's, and two baseline reds are actually fixed here (17[R159] (d) and its mutation). The dominant cluster (check: '--tree') is the mounted proof tool being older than the harness, plus manifest/live-drift checks — all pre-existing and outside this diff.

What I checked

  • Scope — git diff --name-status origin/live...ab079b21 is exactly two files: core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh and scripts/gits-sbx-epic-test.sh. Under core/manifests/apps/sbx-gits it is exactly one file, M tools/gits-sbx-android-install.sh, which is precisely the branch's pinned SBX_GITS_DIFF_SET. kustomization.yaml, statefulset.yaml, the smoke, the proof tool, the lock and the queue are untouched; no file added under tools/.
  • Matches the live file — I re-derived the generated file myself rather than trusting the diff: extracted the writer with the case stripped, WORK pointed at a throwaway tree, ran it. Property lines diffed against kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties (read-only) is empty — the same four lines in the same order, org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 and org.gradle.daemon.idletimeout=300000 included. Placement matches (idle timeout last, after the three memory pins).
  • Idempotent — second run is byte-identical (sha1 f70d52d0f6dd… both times, cmp clean) and takes the ya al dia no-op path. Drift is still corrected back to the pinned jvmargs value.
  • Callers unchanged — definition + install + doctor = 3, which is exactly what the predicate's >= 3 requires.
  • Harness bites — I ran f96_props against all six mutations from the head: mut-sin-workers, mut-kotlin, mut-sin-llamada, mut-sin-idle, mut-idle-cambiado, mut-sin-autoshutdown — every one RED, baseline GREEN. The new pair is pinned as whole lines via grep -qxF on the generated file, so an option pasted or lost changes the value and is caught.
  • Suite — bash -n clean on both files; T7[diff] PASS plus its "the set bites" mutation PASS; 10c PASS; 17[R159] (d) PASS plus its mutation PASS.
  • CI — green on this head (runs #3254 / #3255, all jobs success).

Not merging anything and not touching the branch: this is the review seat only.

**Verdict of record — ld-reviewer — head ab079b218c098e6683c835c814be532e94ba5fa4: APPROVE** model: deepseek-flash session: 01a1af28-68b8-757a-b84d-27db4468c5fe ## Blockers None. ## Concerns - C1 (minor, harness) — the static predicate `f96_props` matches with `grep -qF` (substring, not whole-line) against the installer, and the writer's own comment block repeats `org.gradle.daemon.idletimeout=300000` and `-Dkotlin.daemon.options=autoshutdownIdleSeconds=300` verbatim. I built the sharp mutant the committed mutations miss — delete only the *heredoc* line, keep the comment — and the static predicate stays **GREEN** on it. It is not a hole in 10c as a whole: the behavioural leg (run the writer, `grep -qxF` on the generated file) goes **RED** on that same mutant, so the case still bites. Worth a whole-line match on the installer later, not a blocker. - C2 (minor, description drift) — the PR body says `SBX_GITS_DIFF_SET` was re-measured against `origin/live` = `9119eb2b`; the committed inline comment in `scripts/gits-sbx-epic-test.sh` says `2e8ef24d`, which is the real `origin/live` head and this PR's base. The inline comment is the correct one; the body is stale. - C3 (declared, follow-up owed) — `docs/gits-sbx/t7-android-install.md` still says "los tres límites" and lists only the three memory pins, and 10c's doc leg still greps only those three, so the doc check stays green on a generator that now writes four properties. Declared under "Not in this PR" and accepted there; it should ride a follow-up rather than be forgotten. - C4 (context, not this PR's doing) — the harness solo run is 53 red of 650 on this head, but the same suite on `origin/live` (`2e8ef24d`) is 55 red of 652. **Zero head-only failures**; the head's red set is a strict subset of the baseline's, and two baseline reds are actually *fixed* here (`17[R159] (d)` and its mutation). The dominant cluster (`check: '--tree'`) is the mounted proof tool being older than the harness, plus manifest/live-drift checks — all pre-existing and outside this diff. ## What I checked - **Scope** — `git diff --name-status origin/live...ab079b21` is exactly two files: `core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh` and `scripts/gits-sbx-epic-test.sh`. Under `core/manifests/apps/sbx-gits` it is exactly **one** file, `M tools/gits-sbx-android-install.sh`, which is precisely the branch's pinned `SBX_GITS_DIFF_SET`. `kustomization.yaml`, `statefulset.yaml`, the smoke, the proof tool, the lock and the queue are untouched; no file added under `tools/`. - **Matches the live file** — I re-derived the generated file myself rather than trusting the diff: extracted the writer with the `case` stripped, `WORK` pointed at a throwaway tree, ran it. Property lines diffed against `kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties` (read-only) is **empty** — the same four lines in the same order, `org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300` and `org.gradle.daemon.idletimeout=300000` included. Placement matches (idle timeout last, after the three memory pins). - **Idempotent** — second run is byte-identical (`sha1 f70d52d0f6dd…` both times, `cmp` clean) and takes the `ya al dia` no-op path. Drift is still corrected back to the pinned jvmargs value. - **Callers unchanged** — definition + `install` + `doctor` = 3, which is exactly what the predicate's `>= 3` requires. - **Harness bites** — I ran `f96_props` against all six mutations from the head: `mut-sin-workers`, `mut-kotlin`, `mut-sin-llamada`, **`mut-sin-idle`**, **`mut-idle-cambiado`**, **`mut-sin-autoshutdown`** — every one RED, baseline GREEN. The new pair is pinned as whole lines via `grep -qxF` on the generated file, so an option pasted or lost changes the value and is caught. - **Suite** — `bash -n` clean on both files; `T7[diff]` PASS plus its "the set bites" mutation PASS; `10c` PASS; `17[R159] (d)` PASS plus its mutation PASS. - **CI** — green on this head (runs #3254 / #3255, all jobs success). Not merging anything and not touching the branch: this is the review seat only.
HOMELAB-2682: merge origin/live (#869 suite_relpath forward-compat) into the daemon-idle branch
All checks were successful
CI Review / runner-manifest-test (pull_request) Successful in 5s
CI Review / receiver-test (pull_request) Successful in 5s
CI Review / helm-validate (pull_request) Successful in 11s
Lint & Validate / shellcheck (pull_request) Successful in 6s
CI Review / alert-receiver-test (pull_request) Successful in 21s
Lint & Validate / yaml-lint (pull_request) Successful in 19s
CI Review / record-sql-test (pull_request) Successful in 50s
Lint & Validate / terraform-validate (pull_request) Successful in 2m1s
CI Review / cockpit-test (pull_request) Successful in 2m38s
CI Review / dispatcher-test (pull_request) Successful in 2m42s
CI Review / cockpit-e2e (pull_request) Successful in 2m47s
50911dd094
Conflict in scripts/gits-sbx-epic-test.sh: the T7[diff]/R159[diff] census set
(SBX_GITS_DIFF_SET). Both sides measured their OWN branch; the #869 side pins
M tools/gits-sbx-emu-proof.sh, which live now already contains, so that entry is
no longer in this branch's diff. Re-measured against origin/live = 093b86d2 with
git diff --name-status: the only sbx-gits path this branch changes is
M tools/gits-sbx-android-install.sh -> kept this branch's census for all three
hunks (set + the two pass lines) and credited #869's suite_relpath clause in the
comment. #869's code itself merged cleanly into tools/gits-sbx-emu-proof.sh.
Collaborator

Verdict of record — ld-reviewer — head 50911dd094: APPROVE

model: deepseek-flash
session: 01a1af56-b89e-757a-b84d-27e37f76f98b

Delta re-check after the prior APPROVE (comment 22524, head ab079b21). New head 50911dd0 has parents ab079b21 + 093b86d2 (origin/live, i.e. #869), so the base is right and the branch merged live rather than being rebased. The generator change is unchanged, and the three resolved harness hunks kept both sides. Nothing is smuggled and no live case was dropped.

Blockers

None.

Concerns

C1 — the harness is 52 red, not 5, at this head; 47 of those are pre-existing on live, not this delta. Solo run in a clean worktree at the head:

RESULT: FAIL (52 of 657 checks failed, 6 skipped, 0 pending)

Two distinct classes:

  • 5 drift reds, identical to the prior round's baseline — probe uses an EMPTY pre-existing --dir, manifest[2] memoria requests 6Gi/10Gi, manifest[3] imagenes, manifest[3b] bump de imagen H5, T7 emulador dentro del pod (18/21Gi, cpu 24). Live-manifest snapshot drift; this PR touches no manifest.
  • 47 §24/§25/§26 proof-tool interface cases — ERROR argumento desconocido en check: '--tree' (the tool's check verb has no --tree; only run does), plus 25[…] (a) … el ancla (falla: la-ruta-canonica-de-la-herramienta-no-es-la-que-este-test-cree) — the tool defines no EMU_PROOF_SMOKE_RELPATH. These are not caused by this PR: git diff 093b86d2..50911dd0 -- core/manifests/apps/sbx-gits/tools/gits-sbx-emu-proof.sh is empty (byte-identical to origin/live), and the §24/§25 case code is the same on both refs (48 24[HOMELAB-2682] and 141 25[HOMELAB-2682] occurrences on 093b86d2 and on the head; same anchor grep). A solo harness run at origin/live therefore goes red the same way. The prior round's 5-red log suggests that run exercised a proof-tool copy that supported check --tree; the honest solo baseline at this head is 5 + 47. Worth its own ticket (live's harness cannot pass standalone), but it is not a merge blocker for a change that touches neither the tool nor those cases.

C2 — the PR's own case does pass, and that is the one this delta could have broken. PASS T7+R96[10c] … (four exact lines in the generated gradle.properties, second run no-op, drift -Xmx16g re-pinned, and each of the five values — three memory, both idle halves — turning the predicate red when removed/changed). No FAIL line matches R96/96[.

What I verified for this delta

  1. No smuggled edits. git diff 093b86d2..50911dd0 -- core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh (38 lines, 1 file) is only the daemon pair: org.gradle.jvmargs gains -Dkotlin.daemon.options=autoshutdownIdleSeconds=300, new org.gradle.daemon.idletimeout=300000, plus the comment block and the two info/okc message strings. Whole-PR diff is two files: that installer and scripts/gits-sbx-epic-test.sh.
  2. #869 retained on both sides. The proof tool is byte-identical to live (12 suite_relpath hits intact — the forward-compat resolution did not pick one side and drop the other). The harness keeps #869's §25/§26 anchor cases and the R96[10c] daemon cases: pass/fail case lines at live 943 = at head 943, and comm -23 live head (cases present on live but gone at head) is empty. The merged T7[diff] expectation now allows exactly M tools/gits-sbx-android-install.sh, and the merged prose block names both suite_relpath and the idle pair, so neither side's invariant was silently widened.
  3. bash -n clean on the install script and on the harness at the head (both OK).
  4. Live-file spot check still matches. kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties (read-only) returns the four expected lines verbatim — org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300, kotlin.daemon.jvmargs=-Xmx1536m, org.gradle.workers.max=4, org.gradle.daemon.idletimeout=300000 — and the last one still carries the # LOCAL OVERRIDE (not in the installer template; installer/doctor overwrite it) comment, which is precisely the hand edit E0R left in the generated file that this PR moves into the generator.
  5. Merge shape. Parents are ab079b21 (the previously approved head) + 093b86d2 (origin/live); the three harness hunks resolved additive-to-both-sides, verified by the empty case-set difference in (2) rather than by the resolution's own comment.
**Verdict of record — ld-reviewer — head 50911dd0944340793183bbbcb63c73fc92fde17c: APPROVE** model: deepseek-flash session: 01a1af56-b89e-757a-b84d-27e37f76f98b Delta re-check after the prior APPROVE (comment 22524, head `ab079b21`). New head `50911dd0` has parents `ab079b21` + `093b86d2` (`origin/live`, i.e. #869), so the base is right and the branch merged live rather than being rebased. The generator change is unchanged, and the three resolved harness hunks kept both sides. Nothing is smuggled and no live case was dropped. ## Blockers None. ## Concerns **C1 — the harness is 52 red, not 5, at this head; 47 of those are pre-existing on `live`, not this delta.** Solo run in a clean worktree at the head: ``` RESULT: FAIL (52 of 657 checks failed, 6 skipped, 0 pending) ``` Two distinct classes: - **5 drift reds, identical to the prior round's baseline** — `probe uses an EMPTY pre-existing --dir`, `manifest[2] memoria requests 6Gi/10Gi`, `manifest[3] imagenes`, `manifest[3b] bump de imagen H5`, `T7 emulador dentro del pod (18/21Gi, cpu 24)`. Live-manifest snapshot drift; this PR touches no manifest. - **47 §24/§25/§26 proof-tool interface cases** — `ERROR argumento desconocido en check: '--tree'` (the tool's `check` verb has no `--tree`; only `run` does), plus `25[…] (a) … el ancla (falla: la-ruta-canonica-de-la-herramienta-no-es-la-que-este-test-cree)` — the tool defines no `EMU_PROOF_SMOKE_RELPATH`. **These are not caused by this PR:** `git diff 093b86d2..50911dd0 -- core/manifests/apps/sbx-gits/tools/gits-sbx-emu-proof.sh` is **empty** (byte-identical to `origin/live`), and the §24/§25 case code is the same on both refs (48 `24[HOMELAB-2682]` and 141 `25[HOMELAB-2682]` occurrences on `093b86d2` and on the head; same anchor grep). A solo harness run at `origin/live` therefore goes red the same way. The prior round's 5-red log suggests that run exercised a proof-tool copy that supported `check --tree`; the honest solo baseline at this head is 5 + 47. Worth its own ticket (`live`'s harness cannot pass standalone), but it is not a merge blocker for a change that touches neither the tool nor those cases. **C2 — the PR's own case does pass, and that is the one this delta could have broken.** `PASS T7+R96[10c] …` (four exact lines in the generated `gradle.properties`, second run no-op, drift `-Xmx16g` re-pinned, and each of the five values — three memory, both idle halves — turning the predicate red when removed/changed). No `FAIL` line matches `R96`/`96[`. ## What I verified for this delta 1. **No smuggled edits.** `git diff 093b86d2..50911dd0 -- core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh` (38 lines, 1 file) is only the daemon pair: `org.gradle.jvmargs` gains `-Dkotlin.daemon.options=autoshutdownIdleSeconds=300`, new `org.gradle.daemon.idletimeout=300000`, plus the comment block and the two `info`/`okc` message strings. Whole-PR diff is two files: that installer and `scripts/gits-sbx-epic-test.sh`. 2. **#869 retained on both sides.** The proof tool is byte-identical to `live` (12 `suite_relpath` hits intact — the forward-compat resolution did not pick one side and drop the other). The harness keeps #869's §25/§26 anchor cases **and** the R96[10c] daemon cases: pass/fail case lines at `live` 943 = at head 943, and `comm -23 live head` (cases present on live but gone at head) is **empty**. The merged `T7[diff]` expectation now allows exactly `M tools/gits-sbx-android-install.sh`, and the merged prose block names both `suite_relpath` and the idle pair, so neither side's invariant was silently widened. 3. **`bash -n`** clean on the install script **and** on the harness at the head (both `OK`). 4. **Live-file spot check still matches.** `kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties` (read-only) returns the four expected lines verbatim — `org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300`, `kotlin.daemon.jvmargs=-Xmx1536m`, `org.gradle.workers.max=4`, `org.gradle.daemon.idletimeout=300000` — and the last one still carries the `# LOCAL OVERRIDE (not in the installer template; installer/doctor overwrite it)` comment, which is precisely the hand edit E0R left in the generated file that this PR moves into the generator. 5. **Merge shape.** Parents are `ab079b21` (the previously approved head) + `093b86d2` (`origin/live`); the three harness hunks resolved additive-to-both-sides, verified by the empty case-set difference in (2) rather than by the resolution's own comment.
HOMELAB-2682: merge origin/live (#870 tools pin + #867 volume floors) into the daemon-idle branch
All checks were successful
CI Review / runner-manifest-test (pull_request) Successful in 6s
CI Review / helm-validate (pull_request) Successful in 11s
CI Review / receiver-test (pull_request) Successful in 6s
CI Review / alert-receiver-test (pull_request) Successful in 21s
Lint & Validate / shellcheck (pull_request) Successful in 7s
Lint & Validate / yaml-lint (pull_request) Successful in 20s
CI Review / record-sql-test (pull_request) Successful in 57s
Lint & Validate / terraform-validate (pull_request) Successful in 2m13s
CI Review / cockpit-test (pull_request) Successful in 3m1s
CI Review / dispatcher-test (pull_request) Successful in 3m7s
CI Review / cockpit-e2e (pull_request) Successful in 3m4s
16b20059c2
Conflicts in scripts/gits-sbx-epic-test.sh were all the same shape: the pinned
sbx-gits diff set (SBX_GITS_DIFF_SET, read by T7[diff] and 17[R159] (d)) and its
prose. Resolution keeps both narratives but re-measures the operative set:

- the operative set stays this branch's: M tools/gits-sbx-android-install.sh.
  live's side of the conflict pinned M kustomization.yaml + M README.md, which is
  #870's own tools-pin change; #870 is now IN live, so those two files are no
  longer in this branch's diff vs origin/live and keeping them would have been an
  extra entry (RED).
- live's pin narrative is preserved verbatim-ish as a HISTORIA block right under
  the set, and referenced from both pass messages, so no reasoning is lost.
- their floor changes (HOMELAB-2479, #867: volume-floor rules + rule tests) are
  untouched non-overlapping additions, merged as-is.
- this branch's R96[10c] daemon pins and the anchor (§25) prose are untouched.

Measured: `git diff --name-status origin/live -- core/manifests/apps/sbx-gits` =
M core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh (exactly the set).
Collaborator

Verdict of record — ld-reviewer — head 16b20059c2: APPROVE
model: deepseek-flash
session: 147ecd2c-f8d1-42da-8957-63ae82848025

Delta re-check after the prior APPROVE (comment 22534, head 50911dd0). New head 16b20059 has parents 50911dd0 + 3311b562 (origin/live: #870 tools pin, #867 volume floors), so it is a real merge of live, not a rebase and not a force-push. The generator change is unchanged and the three resolved harness hunks kept both sides. Nothing smuggled, no live content dropped.

Blockers

None.

Concerns

  • C1 (carried, harness, not this delta) — the harness was 52 red at the previous head with 47 of those pre-existing on live; this delta is comment-and-prose only, so that profile is unchanged and is not a finding against this PR. This round I did not re-run the 14k-line harness — I verified statically that the delta touches no code (only comment lines and two pass "..." message strings), so a re-run could not move the count. The recorded C1 from comment 22534 stands as the open concern.
  • C2 (nit, live-file spot check) — kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties still shows E0R's hand-edit marker (# LOCAL OVERRIDE (not in the installer template; installer/doctor overwrite it)), because the new installer has not run yet. The values match the generator template byte for byte (org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300, kotlin.daemon.jvmargs=-Xmx1536m, org.gradle.workers.max=4, org.gradle.daemon.idletimeout=300000); only that # LOCAL OVERRIDE ... comment line differs and will disappear on the next install/doctor. The post-merge proof should show the # An idle daemon pair must not outlive ~5 min ... comment in the pod file as the completion signal.

What I verified (exact commands, this head)

  1. git diff 50911dd0..16b20059 -- core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh -> 0 bytes. No smuggled tool edits; the installer at this head is byte-identical to the previously approved head.
  2. Harness delta 50911dd0..16b20059 is 27 lines, no deletion of live content: one added # HISTORIA ... comment block recording that the #869 (tools/gits-sbx-emu-proof.sh) and #870 (kustomization.yaml + README.md, tools ConfigMap delivery pin) change sets are already in live and re-measured against the current tip, plus the two pass "T7[diff] ..." / pass "17[R159] (d) ..." message strings extended to name the pin. Filtering the delta for anything that is not a comment line or a pass " string returns nothing. The 17[R159] / §25 case inventory and the check/case/t*_check function inventory are identical between origin/live and this head.
  3. git diff origin/live..16b20059 --stat is exactly the two PR files (tools/gits-sbx-android-install.sh, scripts/gits-sbx-epic-test.sh) — so the merged-in kustomization.yaml (+5610), README.md (+123), volume-floor rule/test files and infra-alerts.yaml are live's bytes, unchanged, and no live line was dropped by the resolutions. No conflict markers anywhere in either file at this head.
  4. Generator intact at the head: write_gradle_properties() writes org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300 and org.gradle.daemon.idletimeout=300000 inside the heredoc; cmp/mv idempotence and both callers (install line 866, doctor line 953) intact.
  5. bash -n clean on both the installer (993 lines) and the harness (14037 lines).
  6. CI on this head is green: runs #3268 and #3269, every job success (shellcheck, terraform-validate, yaml-lint, alert-receiver-test, cockpit-e2e, cockpit-test, dispatcher-test, helm-validate, receiver-test, record-sql-test, runner-manifest-test).

Seat limits

Read-only review: I read the diff, ran bash -n, did one read-only kubectl exec spot check, and read CI status. I did not edit, commit, push, or merge, and this verdict is for this head only — a new commit needs a fresh verdict.

**Verdict of record — ld-reviewer — head 16b20059c283f684575036287521e70091a17b8d: APPROVE** model: deepseek-flash session: 147ecd2c-f8d1-42da-8957-63ae82848025 Delta re-check after the prior APPROVE (comment 22534, head `50911dd0`). New head `16b20059` has parents `50911dd0` + `3311b562` (`origin/live`: #870 tools pin, #867 volume floors), so it is a real merge of live, not a rebase and not a force-push. The generator change is unchanged and the three resolved harness hunks kept both sides. Nothing smuggled, no live content dropped. ## Blockers None. ## Concerns - C1 (carried, harness, not this delta) — the harness was 52 red at the previous head with 47 of those pre-existing on `live`; this delta is comment-and-prose only, so that profile is unchanged and is not a finding against this PR. **This round I did not re-run the 14k-line harness** — I verified statically that the delta touches no code (only comment lines and two `pass "..."` message strings), so a re-run could not move the count. The recorded C1 from comment 22534 stands as the open concern. - C2 (nit, live-file spot check) — `kubectl exec -n sbx-gits sbx-gits-0 -c sandbox -- cat /home/ld/work/.gradle/gradle.properties` still shows E0R's hand-edit marker (`# LOCAL OVERRIDE (not in the installer template; installer/doctor overwrite it)`), because the new installer has not run yet. The **values** match the generator template byte for byte (`org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300`, `kotlin.daemon.jvmargs=-Xmx1536m`, `org.gradle.workers.max=4`, `org.gradle.daemon.idletimeout=300000`); only that `# LOCAL OVERRIDE ...` comment line differs and will disappear on the next `install`/`doctor`. The post-merge proof should show the `# An idle daemon pair must not outlive ~5 min ...` comment in the pod file as the completion signal. ## What I verified (exact commands, this head) 1. `git diff 50911dd0..16b20059 -- core/manifests/apps/sbx-gits/tools/gits-sbx-android-install.sh` -> **0 bytes**. No smuggled tool edits; the installer at this head is byte-identical to the previously approved head. 2. Harness delta `50911dd0..16b20059` is **27 lines, no deletion of live content**: one added `# HISTORIA ...` comment block recording that the #869 (`tools/gits-sbx-emu-proof.sh`) and #870 (`kustomization.yaml` + `README.md`, tools ConfigMap delivery pin) change sets are already in live and re-measured against the current tip, plus the two `pass "T7[diff] ..."` / `pass "17[R159] (d) ..."` message strings extended to name the pin. Filtering the delta for anything that is not a comment line or a `pass "` string returns **nothing**. The 17[R159] / §25 case inventory and the `check`/`case`/`t*_check` function inventory are **identical** between `origin/live` and this head. 3. `git diff origin/live..16b20059 --stat` is exactly the two PR files (`tools/gits-sbx-android-install.sh`, `scripts/gits-sbx-epic-test.sh`) — so the merged-in `kustomization.yaml` (+5610), `README.md` (+123), volume-floor rule/test files and `infra-alerts.yaml` are live's bytes, unchanged, and no live line was dropped by the resolutions. No conflict markers anywhere in either file at this head. 4. Generator intact at the head: `write_gradle_properties()` writes `org.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.options=autoshutdownIdleSeconds=300` and `org.gradle.daemon.idletimeout=300000` inside the heredoc; `cmp`/`mv` idempotence and both callers (`install` line 866, `doctor` line 953) intact. 5. `bash -n` clean on both the installer (993 lines) and the harness (14037 lines). 6. CI on this head is **green**: runs #3268 and #3269, every job `success` (shellcheck, terraform-validate, yaml-lint, alert-receiver-test, cockpit-e2e, cockpit-test, dispatcher-test, helm-validate, receiver-test, record-sql-test, runner-manifest-test). ## Seat limits Read-only review: I read the diff, ran `bash -n`, did one read-only `kubectl exec` spot check, and read CI status. I did not edit, commit, push, or merge, and this verdict is for this head only — a new commit needs a fresh verdict.
Sign in to join this conversation.
No reviewers
No labels
operator-review
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Homelab/infra-core!868
No description provided.