Estimator: the HP figures published, raise only (R-1009 = A) — one verdict stricter
gates / gates (push) Successful in 6m36s

sizing.json + sizing-data.json rebuilt (23 figures up, none down; the checksum chain matches,
build_sizing_web --check OK). The household set without Immich on 8 GB: fits well -> fits, but
tight (2,731 x 1.5 = 4,096.5 > 4,096). Presets keep their verdicts. SIZING.md section 5 table,
bullets and memory table from the rule, plus the dated line; the per-app table re-rendered.
Test expectations moved with the rule. Lede, meta and method note name both machines. Data ?v=4.

Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
This commit is contained in:
2026-10-14 15:27:56 +02:00
parent 3f7f26a7d3
commit 541129542d
8 changed files with 673 additions and 132 deletions
+5 -5
View File
@@ -107,9 +107,9 @@ class SizingWeb(unittest.TestCase):
W, T, N = "well", "tight", "no"
cases = {
"household": (HOUSEHOLD, [N, T, W, W, W, W, W], 16, 12),
"household without immich": ([s for s in HOUSEHOLD if s != "immich"], [W, W, W, W, W, W, W], 8, None),
"household without immich": ([s for s in HOUSEHOLD if s != "immich"], [T, W, W, W, W, W, W], 12, 8), # 2026-10-14 HP raise: 2,731 x 1.5 = 4,096.5 > 4,096
"immich alone": (["immich"], [T, W, W, W, W, W, W], 12, 8),
"all 62": (self.all, [N, N, N, N, T, W, W], 48, 32), # 24 GB: guest 19,868 < peak 21,783
"all 62": (self.all, [N, N, N, N, T, W, W], 48, 32), # 24 GB: guest 19,868 < peak 22,333
"nothing": ([], [W] * 7, 8, None),
}
for name, (sel, want, rec, tight) in cases.items():
@@ -138,9 +138,9 @@ class SizingWeb(unittest.TestCase):
self.assertAlmostEqual(sum(mb for _, mb in segs), well * 1024, delta=1, msg=name)
self.assertGreaterEqual(dict(segs)["base"], 0, name + ": base system negative")
self.assertGreaterEqual(dict(segs)["spare"], 0, name + ": spare negative")
# the household preset, by hand: peak 5,515 MiB; the bar holds 5,515 * 1.5 = 8,272.5 in the guest
# the household preset, by hand: peak 6,021 MiB; the bar holds 6,021 * 1.5 = 9,031.5 in the guest
well, segs = segments(self.d, HOUSEHOLD)
self.assertAlmostEqual(dict(segs)["spare"], 5515 * 0.5, delta=1)
self.assertAlmostEqual(dict(segs)["spare"], 6021 * 0.5, delta=1)
self.assertAlmostEqual(dict(segs)["base"], 4708, delta=1) # 4,096 for Proxmox + 612 MemTotal shortfall
def test_bar_never_below_the_smallest_named_box(self):
@@ -160,7 +160,7 @@ class SizingWeb(unittest.TestCase):
def test_sentence_base_is_the_drawn_box_base(self):
# the explaining sentence's „kb. {base} GB a gép alaprendszeréé” is the base part of the box the BAR draws,
# from the same rule: 4.0 GB when the bar is an 8 GB box, 4.6 GB for the household preset (a 12.7 GB bar)
# from the same rule: 4.0 GB when the bar is an 8 GB box, 4.6 GB for the household preset (a 13.4 GB bar)
for name, sel, want in (("files and passwords", ["nextcloud", "vaultwarden"], "4.0"),
("household", HOUSEHOLD, "4.6")):
_, segs = segments(self.d, sel)