kshitijk4poor
fa6ef8ba6d
refactor(free-tier): one per-profile challenge record behind one lock
...
_pending (dict-of-dicts keyed "payload"/"deadline"/"outcome"),
_work_locks and _gave_up_until were three per-profile module globals,
two of them mutated outside the lock. They become one _ProfileChallenge
dataclass in a single _profiles map behind _state_lock; the record holds
the BrowserChallenge itself, so lookups are attribute reads and
as_payload() runs only when a status read asks for it. _set_pending
becomes _record(challenge, new_attempt=...). The test-only _presenter
seam goes: tests patch present() itself. _sleep stays, same idiom as
free_tier_bootstrap.
One edge differs, for the better: an EXPIRED same-URL record is now
treated as a new ticket (fresh deadline) instead of re-recorded with
min(new, old-expired) deadline, i.e. born expired.
2026-10-06 23:14:10 +05:30
..
2026-10-06 11:17:11 -04:00
2026-10-03 23:06:58 -04:00
2026-10-06 00:40:30 -07:00
2026-10-06 23:14:10 +05:30
2026-10-06 05:50:08 -07:00
2026-10-06 13:23:15 -04:00
2026-09-29 20:57:17 -05:00
2026-10-03 22:46:14 -04:00
2026-10-06 04:36:02 -07:00
2026-10-02 04:39:28 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 23:14:10 +05:30
2026-10-06 23:14:10 +05:30
2026-10-05 15:36:14 -07:00
2026-10-05 16:37:14 -05:00
2026-10-05 23:33:41 -07:00
2026-10-05 15:36:14 -07:00
2026-10-05 15:36:14 -07:00
2026-10-05 22:38:27 -05:00
2026-10-06 23:14:10 +05:30
2026-10-03 16:30:59 +05:30
2026-10-05 23:33:41 -07:00
2026-10-05 15:36:14 -07:00
2026-10-06 23:14:10 +05:30
2026-10-03 16:30:59 +05:30
2026-10-03 16:30:59 +05:30
2026-09-29 07:44:13 +00:00
2026-10-05 17:34:36 -07:00
2026-10-01 01:50:16 -05:00
2026-09-29 23:54:34 +05:30
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-10-02 18:35:45 -05:00
2026-10-03 16:30:59 +05:30
2026-09-29 23:54:34 +05:30
2026-10-05 00:23:05 -07:00
2026-09-28 14:16:18 -07:00
2026-10-02 22:47:50 -04:00
2026-10-01 13:23:12 -07:00
2026-10-05 10:20:42 -05:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-10-03 23:28:02 +05:30
2026-09-30 14:23:52 -05:00
2026-10-04 13:50:13 -05:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-10-04 12:55:11 -04:00
2026-10-03 23:05:48 -07:00
2026-09-28 14:16:18 -07:00
2026-09-28 14:16:18 -07:00
2026-10-02 13:34:54 +05:30
2026-10-05 00:23:05 -07:00
2026-09-28 14:16:18 -07:00
2026-10-03 20:44:07 +05:30
2026-09-29 20:34:45 +05:30
2026-10-06 11:20:43 -04:00
2026-09-28 14:16:18 -07:00
2026-09-28 13:08:49 -07:00
2026-10-03 16:31:09 +05:30
2026-10-05 19:36:32 +05:30
2026-10-05 16:42:43 -05:00
2026-10-03 19:21:54 +05:30
2026-09-29 20:24:19 -04:00
2026-10-02 20:29:53 -05:00
2026-09-30 23:10:24 -05:00
2026-10-06 02:53:00 -07:00
2026-10-03 19:51:54 +05:30
2026-10-05 13:18:19 +05:30
2026-10-06 03:44:49 -07:00
2026-09-29 19:49:52 -05:00
2026-10-03 21:15:17 +05:30
2026-09-29 20:24:19 -04:00
2026-10-05 16:37:14 -05:00
2026-10-05 16:37:14 -05:00
2026-10-06 05:50:08 -07:00
2026-10-02 04:39:28 -07:00
2026-09-29 12:16:43 -04:00
2026-10-04 00:08:20 -07:00
2026-10-02 01:02:00 +05:30
2026-09-29 07:44:13 +00:00
2026-09-28 13:30:57 -07:00
2026-10-03 21:57:13 -04:00
2026-09-28 13:30:57 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 04:36:02 -07:00
2026-10-03 20:44:07 +05:30
2026-10-04 13:50:13 -05:00
2026-10-02 20:51:34 +00:00
2026-10-01 04:50:26 -05:00
2026-10-06 12:28:00 -04:00
2026-09-28 14:16:18 -07:00
2026-10-03 16:31:23 +05:30
2026-10-02 22:21:27 -05:00
2026-10-03 16:31:23 +05:30
2026-10-04 00:08:20 -07:00
2026-10-06 03:44:49 -07:00
2026-10-05 16:00:48 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 05:44:21 -07:00
2026-10-06 05:44:21 -07:00
2026-10-06 06:18:39 -07:00
2026-10-03 23:05:48 -07:00
2026-09-29 15:45:52 +05:30
2026-10-05 23:33:41 -07:00
2026-09-28 14:16:18 -07:00
2026-10-06 06:18:39 -07:00
2026-10-05 16:06:32 -07:00
2026-10-02 04:39:28 -07:00
2026-10-05 00:22:31 -07:00
2026-10-03 22:32:13 -04:00
2026-10-05 23:33:41 -07:00
2026-10-05 16:41:47 -05:00
2026-10-02 22:40:31 -05:00
2026-10-06 08:13:51 -04:00
2026-10-05 16:41:47 -05:00
2026-10-05 23:33:41 -07:00
2026-10-04 00:10:54 +05:30
2026-10-06 23:14:10 +05:30
2026-10-06 02:53:56 -07:00
2026-10-03 19:01:42 -07:00
2026-10-04 00:08:20 -07:00
2026-10-03 10:26:12 -07:00
2026-10-01 10:46:45 -07:00
2026-10-03 10:15:11 -07:00
2026-10-03 10:15:11 -07:00
2026-10-03 10:15:11 -07:00
2026-10-03 10:15:11 -07:00
2026-10-03 10:15:11 -07:00
2026-10-03 10:15:11 -07:00
2026-10-03 13:34:08 -07:00
2026-10-04 17:53:20 -07:00
2026-09-28 14:16:18 -07:00
2026-10-04 12:08:04 -07:00
2026-09-28 14:16:18 -07:00
2026-10-05 17:24:40 -07:00
2026-10-04 12:08:04 -07:00
2026-10-05 16:06:32 -07:00
2026-10-03 10:15:11 -07:00
2026-10-05 17:20:30 -07:00
2026-10-05 17:34:36 -07:00
2026-10-05 17:20:30 -07:00
2026-10-05 01:26:23 -07:00
2026-10-05 17:11:30 -07:00
2026-10-05 17:34:36 -07:00
2026-10-05 20:07:25 +05:30
2026-10-05 17:20:30 -07:00
2026-10-02 04:09:57 -07:00
2026-10-05 17:34:36 -07:00
2026-10-01 16:22:28 +05:30
2026-10-01 22:35:29 -07:00
2026-10-05 16:41:08 -05:00
2026-10-04 00:08:20 -07:00
2026-10-02 01:29:41 -07:00
2026-10-03 16:29:29 +05:30
2026-10-04 13:53:34 +05:30
2026-10-05 23:33:41 -07:00
2026-09-29 20:57:57 -05:00
2026-10-05 16:42:57 -05:00
2026-10-06 12:46:06 -04:00
2026-10-06 08:13:51 -04:00
2026-10-05 23:33:41 -07:00
2026-10-05 12:37:47 +05:30
2026-10-03 23:28:02 +05:30
2026-10-04 12:05:37 +05:30
2026-09-28 21:03:09 -04:00
2026-10-03 19:21:54 +05:30
2026-10-04 00:08:20 -07:00
2026-10-02 02:58:18 +05:30
2026-10-05 22:07:41 -07:00
2026-10-05 16:00:48 -07:00
2026-09-28 14:16:18 -07:00
2026-10-06 04:36:02 -07:00
2026-09-28 21:02:35 -04:00
2026-10-06 04:36:02 -07:00
2026-10-01 22:35:29 -07:00
2026-09-29 15:28:19 -05:00
2026-10-01 22:03:11 -07:00
2026-10-01 22:27:03 -07:00
2026-09-28 14:16:18 -07:00
2026-10-06 04:15:29 -07:00
2026-10-04 00:08:20 -07:00
2026-10-03 16:29:54 +05:30
2026-10-02 18:06:40 +00:00
2026-10-06 04:36:02 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 06:18:39 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 03:44:49 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 11:15:27 -04:00
2026-10-06 11:19:16 -04:00
2026-10-06 12:27:22 -04:00
2026-10-03 16:54:59 +05:30
2026-10-06 12:27:41 -04:00
2026-10-06 12:27:22 -04:00
2026-10-06 11:15:27 -04:00
2026-10-06 12:30:01 -04:00
2026-10-06 12:28:55 -04:00
2026-09-29 19:06:35 -05:00
2026-10-01 23:27:08 -07:00
2026-10-04 00:08:20 -07:00
2026-10-05 15:36:14 -07:00
2026-10-03 19:51:54 +05:30
2026-10-03 23:05:48 -07:00
2026-10-06 04:36:02 -07:00
2026-10-06 12:46:06 -04:00
2026-10-02 02:54:18 +05:30
2026-10-02 10:42:07 -04:00
2026-10-02 10:42:07 -04:00
2026-10-03 22:03:44 +05:30
2026-10-03 22:03:44 +05:30