You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`not-in-catalog`| The provider/model pair is absent from `FREE_MODEL_BUDGETS`. | Add a curated entry, or accept that new pairs start excluded — that is the design. |
137
+
|`operator-non-free`| Local tier policy explicitly marks this provider/model `cheap` or `premium`. | Change/remove the local override only if that policy is no longer intended. |
138
+
|`not-in-catalog`| No higher-precedence free proof exists and the pair is absent from `FREE_MODEL_BUDGETS`. | Add a curated entry or obtain live/explicit zero-cost evidence; unknown pairs fail closed. |
129
139
|`regime-not-free`| Catalogued, but its `freeType` is not one that grants free access (a discontinued tier, for instance). | Nothing to fix. The model costs money. |
130
140
|`no-hard-stop`| Free regime, but `hardStopGuaranteed` is not `true`, so exceeding the allowance might silently start billing. | Verify the provider's terms and set the flag with the source in a comment — never to grow the catalog. |
131
141
|`contradictory-noauth`| A no-auth candidate whose catalog entry is not `keyless`. Fail-closed on inconsistent metadata. | Fix the catalog entry; the two facts disagree. |
132
142
|`exhausted`| A fresh reading says the allowance is used up. | Wait for the reset. This one resolves itself. |
133
-
|`state-unknown`| No quota reading, or one too old to trust. | Go look: the provider may have no usage adapter registered, or the quota fetch is failing. |
143
+
|`state-unknown`| No fresh quota or live-discovery proof exists for this account. | Refresh discovery/quota state; missing adapters or expired process-local evidence stay fail-closed.|
134
144
|`no-connection`| The candidate carries no account to check at all. | Not a quota problem: the candidate was built without a connection, so nothing was ever looked up. Check how the pool was assembled. |
135
145
136
-
The last two are the pair worth separating. An exhausted allowance resets on its own; a reading
137
-
that never arrives means the lookup itself is broken, and until now both looked identical from
138
-
outside — the candidate simply vanished.
146
+
The `exhausted` / `state-unknown`pair is worth separating. An exhausted allowance resets on its
147
+
own; a reading that never arrives or live-discovery proof that expires means current safety is
148
+
unknown, and until now both looked identical from outside — the candidate simply vanished.
139
149
140
150
**One gap remains, and it is deliberate.**`excludeTosAvoid` still removes candidates before the
141
151
listing is built, so a model curated `tos: "avoid"` is absent with no reason given — the same
0 commit comments