Robin Fernandes
59fad62a40
fix(free-tier): review follow-ups — read the classifier's context, never replace a locked identity, re-inventory on retry
...
Correctness
- The welcome-tier recovery hooks (model_not_free move, wrong-host heal) and
the long-wait rate-limit check read the turn's extract_api_error_context()
dict, which never carries welcome_refusal / welcome_route. They now read
classified.error_context, where _nous_welcome_tier parks them; the guard
records the classifier's reset_at. Tests drive the real classifier and the
real extractor so the two-context boundary is exercised.
- The connector path caught every AnonCredentialDead and re-minted; a locked
account (anon_account_locked) is now retired without replacement, matching
the inference resolver.
- A background bootstrap retry reused the boot-time provider inventory; it
re-inventories, so a provider connected during the cooldown keeps
inference.
- The desktop's setup.ready listener only refreshes an untouched picker
(oauth mode, no local endpoint, idle flow) and re-checks after the
readiness round, so an API-key form opened meanwhile is never dismissed.
- /__log on the rehearsal server sent its response while holding the state
lock that _send re-acquires; the log is copied out first.
Reductions
- One shared FakePortal / install_portal (tests/hermes_cli/anon_portal.py)
behind both free-tier fixtures, with a single httpx.Client transport seam.
- The rehearsal server's static inference answers are a table; dead
scaffolding (REAL_PAID_URL, claim_codes, the no-op dead_once branch,
extra_headers) removed.
- Setup-notice copy is a code-to-key map; its test uses real codes (the old
loop built nonexistent ones and only exercised the fallback).
- The ineffective FreeTierErrorCode union is gone.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-15 20:44:42 +05:30
..
2026-09-14 17:34:31 -07:00
2026-09-14 22:01:32 +00:00
2026-09-15 05:35:34 -07:00
2026-09-02 22:36:16 -07:00
2026-09-15 03:45:41 -07:00
2026-09-02 22:36:16 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 17:13:22 -07:00
2026-09-15 04:12:13 -07:00
2026-09-15 04:17:42 -07:00
2026-09-11 19:39:12 -07:00
2026-09-14 06:02:05 -07:00
2026-09-03 13:49:57 -07:00
2026-09-15 04:12:13 -07:00
2026-09-03 13:49:57 -07:00
2026-09-15 05:33:41 -07:00
2026-09-03 09:44:26 -07:00
2026-09-15 04:12:13 -07:00
2026-09-02 22:36:16 -07:00
2026-09-02 22:36:16 -07:00
2026-09-02 22:36:15 -07:00
2026-09-03 09:44:26 -07:00
2026-09-14 17:29:32 -07:00
2026-09-15 06:34:25 -07:00
2026-09-13 05:09:06 -07:00
2026-09-15 03:47:15 -07:00
2026-09-03 17:13:22 -07:00
2026-09-12 01:35:05 -07:00
2026-09-15 06:16:38 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 13:49:57 -07:00
2026-09-03 14:16:54 -07:00
2026-09-02 22:47:50 -07:00
2026-09-02 22:47:50 -07:00
2026-09-15 06:16:38 -07:00
2026-09-15 06:16:38 -07:00
2026-09-11 19:39:12 -07:00
2026-09-03 14:16:54 -07:00
2026-09-13 12:35:36 -07:00
2026-09-12 08:43:28 -07:00
2026-09-03 14:16:54 -07:00
2026-09-03 14:16:54 -07:00
2026-09-15 06:16:38 -07:00
2026-09-03 14:16:54 -07:00
2026-09-10 10:35:07 -07:00
2026-09-03 14:16:54 -07:00
2026-09-15 06:16:38 -07:00
2026-09-13 14:41:26 -07:00
2026-09-15 04:56:01 -07:00
2026-09-13 05:09:43 -07:00
2026-09-11 15:44:00 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 22:36:16 -07:00
2026-09-14 16:13:51 -07:00
2026-09-02 23:08:22 -07:00
2026-09-15 04:12:13 -07:00
2026-09-15 03:45:41 -07:00
2026-09-15 03:45:41 -07:00
2026-09-02 22:36:16 -07:00
2026-09-11 19:39:12 -07:00
2026-09-15 04:13:47 -07:00
2026-09-03 09:44:26 -07:00
2026-09-15 03:56:17 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 00:10:18 -07:00
2026-09-15 04:12:13 -07:00
2026-09-08 02:26:05 +05:30
2026-09-15 04:12:13 -07:00
2026-09-15 04:12:13 -07:00
2026-09-10 10:23:12 -07:00
2026-09-06 12:02:43 -07:00
2026-09-13 21:05:42 -07:00
2026-09-11 11:54:49 -07:00
2026-09-15 03:45:41 -07:00
2026-09-03 17:13:22 -07:00
2026-09-15 03:45:41 -07:00
2026-09-03 00:10:18 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 17:13:22 -07:00
2026-09-11 15:29:15 -07:00
2026-09-03 17:13:22 -07:00
2026-09-09 11:46:36 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 22:48:08 -07:00
2026-09-03 03:31:03 -07:00
2026-09-03 13:33:47 -07:00
2026-09-07 00:28:46 +05:30
2026-09-12 20:52:49 -07:00
2026-09-15 03:57:24 -07:00
2026-09-03 13:10:52 -07:00
2026-09-15 03:57:24 -07:00
2026-09-15 04:17:31 -07:00
2026-09-15 06:26:29 -07:00
2026-09-03 17:13:22 -07:00
2026-09-12 21:55:07 -07:00
2026-09-03 13:53:03 -07:00
2026-09-02 22:50:57 -07:00
2026-09-13 21:03:11 -07:00
2026-09-13 21:03:11 -07:00
2026-09-11 19:39:12 -07:00
2026-09-02 22:06:11 -07:00
2026-09-05 13:51:06 -07:00
2026-09-13 14:37:17 -07:00
2026-09-15 06:25:42 -07:00
2026-09-12 12:32:55 -07:00
2026-09-13 19:19:36 -07:00
2026-09-10 02:21:16 +05:30
2026-09-15 20:44:42 +05:30
2026-09-15 13:00:12 +05:30
2026-09-07 08:22:35 -07:00
2026-09-15 04:54:30 -07:00
2026-09-15 10:50:13 +05:30
2026-09-15 10:50:13 +05:30
2026-09-03 17:13:22 -07:00
2026-09-10 02:21:16 +05:30
2026-09-02 23:56:55 -07:00
2026-09-15 04:12:41 -07:00
2026-09-13 05:09:43 -07:00
2026-09-13 15:41:01 -07:00
2026-09-13 20:45:25 -07:00
2026-09-15 04:12:13 -07:00
2026-09-11 15:27:23 -07:00
2026-09-15 04:12:41 -07:00
2026-09-12 01:35:05 -07:00
2026-09-13 15:41:01 -07:00
2026-09-07 22:47:33 +05:30
2026-09-15 04:55:14 -07:00
2026-09-11 15:27:23 -07:00
2026-09-13 06:29:12 -07:00
2026-09-13 20:45:25 -07:00
2026-09-15 04:56:40 -07:00
2026-09-12 20:43:42 -07:00
2026-09-09 12:19:13 +05:30
2026-09-03 01:43:42 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 22:59:19 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-13 20:46:22 -07:00
2026-09-12 21:13:40 -07:00
2026-09-04 00:15:16 -07:00
2026-09-14 16:12:07 -07:00
2026-09-03 17:13:22 -07:00
2026-09-11 19:58:07 -07:00
2026-09-13 14:35:32 -07:00
2026-09-14 08:10:36 -07:00
2026-09-15 06:28:07 -07:00
2026-09-03 09:44:26 -07:00
2026-09-12 22:09:19 -07:00
2026-09-04 00:15:16 -07:00
2026-09-11 15:26:46 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-15 04:56:40 -07:00
2026-09-07 08:14:51 -07:00
2026-09-03 13:49:57 -07:00
2026-09-11 11:54:49 -07:00
2026-09-03 01:36:04 -07:00
2026-09-11 15:26:46 -07:00
2026-09-15 03:58:05 -07:00
2026-09-03 01:41:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 08:15:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 13:33:47 -07:00
2026-09-12 01:35:05 -07:00
2026-09-09 12:19:13 +05:30
2026-09-15 05:38:31 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 00:55:09 -07:00
2026-09-14 21:55:24 -07:00
2026-09-13 05:09:43 -07:00
2026-09-15 14:15:59 +05:30
2026-09-07 05:59:43 -07:00
2026-09-11 11:54:49 -07:00
2026-09-15 14:15:59 +05:30
2026-09-15 14:15:59 +05:30
2026-09-02 21:42:18 -07:00
2026-09-02 21:42:18 -07:00
2026-09-12 21:50:30 -07:00
2026-09-06 07:17:03 -07:00
2026-09-03 00:05:14 -07:00
2026-09-11 11:54:49 -07:00
2026-09-04 00:15:16 -07:00
2026-09-06 07:17:03 -07:00
2026-09-06 07:17:03 -07:00
2026-09-03 01:09:55 -07:00
2026-09-03 13:27:01 -07:00
2026-09-03 01:09:55 -07:00
2026-09-15 05:32:14 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 01:09:12 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 22:37:39 -07:00
2026-09-15 03:46:29 -07:00
2026-09-15 04:12:13 -07:00
2026-09-07 12:50:29 -07:00
2026-09-05 19:01:22 +05:30
2026-09-07 06:05:51 -07:00
2026-09-03 13:24:04 -07:00
2026-09-15 10:48:49 +05:30
2026-09-15 02:22:22 -05:00
2026-09-15 04:12:13 -07:00
2026-09-10 11:48:01 -07:00
2026-09-14 16:16:08 -07:00
2026-09-03 01:13:51 -07:00
2026-09-12 01:35:05 -07:00
2026-09-03 09:44:26 -07:00
2026-09-11 15:26:46 -07:00
2026-09-11 15:44:00 -07:00
2026-09-13 05:09:43 -07:00
2026-09-15 03:41:43 -07:00
2026-09-13 21:04:08 -07:00
2026-09-10 02:21:16 +05:30
2026-09-15 00:41:13 +05:30
2026-09-12 10:00:08 +05:30
2026-09-03 13:17:25 -07:00
2026-09-13 05:07:50 -07:00
2026-09-13 05:09:43 -07:00
2026-09-03 13:30:31 -07:00
2026-09-15 05:36:37 -07:00
2026-09-15 05:36:37 -07:00
2026-09-03 13:20:22 -07:00
2026-09-15 03:54:01 -07:00
2026-09-03 09:44:26 -07:00
2026-09-13 05:32:38 -07:00
2026-09-03 13:20:22 -07:00
2026-09-03 01:17:43 -07:00
2026-09-03 13:20:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-15 03:54:01 -07:00
2026-09-03 13:20:22 -07:00
2026-09-13 05:07:50 -07:00
2026-09-03 17:13:22 -07:00
2026-09-13 12:35:36 -07:00
2026-09-13 09:18:54 -07:00
2026-09-15 04:48:20 -07:00
2026-09-13 05:07:50 -07:00
2026-09-11 19:14:24 -07:00
2026-09-03 13:30:31 -07:00
2026-09-13 14:39:29 -07:00
2026-09-03 13:24:36 -07:00
2026-09-03 13:24:36 -07:00
2026-09-13 05:07:11 -07:00
2026-09-12 21:30:38 -07:00
2026-09-03 13:08:53 -07:00
2026-09-05 18:46:16 +05:30
2026-09-04 07:17:00 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 00:10:38 -07:00
2026-09-15 04:12:13 -07:00
2026-09-13 12:35:36 -07:00
2026-09-13 05:07:50 -07:00
2026-09-03 00:27:38 -07:00
2026-09-03 17:13:22 -07:00