From fb723084bebeff96619fa825d4f0fd75342e57db Mon Sep 17 00:00:00 2001 From: kshitijk4poor <82637225+kshitijk4poor@users.noreply.github.com> Date: Thu, 3 Sep 2026 03:53:34 +0530 Subject: [PATCH] fix(inventory): explain the locked Nous list while entitlement is pending With the picker served from resident caches only, a cold Nous row renders every model locked (free_tier_pending) until the background prewarm lands. Surface why on the row's existing warning slot so the user isn't left with an unexplained greyed-out list; never override an auth warning. --- hermes_cli/inventory.py | 8 ++++++++ tests/hermes_cli/test_inventory_pricing.py | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/hermes_cli/inventory.py b/hermes_cli/inventory.py index 03964dbc20..83abb891d4 100644 --- a/hermes_cli/inventory.py +++ b/hermes_cli/inventory.py @@ -1017,6 +1017,14 @@ def _apply_pricing( # paid models on its first picker open. row["free_tier_pending"] = True row["unavailable_models"] = list(models) + # Every model renders locked until the prewarm lands; say why + # on the existing per-provider warning surface instead of + # leaving the user staring at a greyed-out list. + if not row.get("warning"): + row["warning"] = ( + "Checking Nous plan entitlement… models unlock on the " + "next picker open (or refresh)." + ) continue if not raw_pricing: if slug == "nous": diff --git a/tests/hermes_cli/test_inventory_pricing.py b/tests/hermes_cli/test_inventory_pricing.py index 0309ff8285..d626593f34 100644 --- a/tests/hermes_cli/test_inventory_pricing.py +++ b/tests/hermes_cli/test_inventory_pricing.py @@ -170,6 +170,13 @@ def test_cold_nous_entitlement_keeps_models_unselectable(monkeypatch): assert rows[0]["free_tier_pending"] is True assert rows[0]["unavailable_models"] == ["free/model", "paid/model"] + # The whole list renders locked — the picker's per-provider warning + # surface must say why, without clobbering an existing auth warning. + assert "entitlement" in rows[0]["warning"] + + rows = [{"slug": "nous", "models": ["m"], "warning": "paste NOUS_API_KEY to activate"}] + inv._apply_pricing(rows, cached_only=True) + assert rows[0]["warning"] == "paste NOUS_API_KEY to activate" def test_prewarm_preserves_context_and_runs_once_per_profile(tmp_path, monkeypatch):