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
fix(control): close the captcha governance loop (#65)
PR #63 added error_type='captcha_challenge' classification but nothing
consumed it: is_retryable() treated it as permanent (unknown types default
to permanent), so a Doubao captcha wall permanently failed the task with no
recovery path, while the control layer's pause/review machinery (actuator,
paused_until, review_required) had no scheduler consumer at all.
- error_taxonomy: add CAPTCHA_CHALLENGE + is_captcha() — a third category
(needs human), neither retryable nor permanent
- error_kinds: map captcha_challenge -> ErrorKind.CAPTCHA for the control
vocabulary
- actuator: add pause_source_for_captcha() — pause + require_review in one
call, keeping the actuator the only mutator of DataSource
- pipeline: on captcha_challenge collect failure, pause the source (TTL from
control_pause_ttl_seconds) + flag review instead of failing permanently;
best-effort so actuator/DB errors never mask the original collect error
- scheduler: _get_enabled_schedules now also skips sources with
review_required=True, so a paused/flagged source is never dispatched until
a human clears it (control loop writes the state, scheduler honors it)
Tests: taxonomy (is_captcha/retryability), error_kinds mapping, actuator
pause+review (incl. idempotent re-pause), pipeline wiring (captcha pauses,
ordinary failures don't), scheduler review/disabled gating.
Co-authored-by: 1012839419a-alt <1012839419a-alt@users.noreply.github.com>
0 commit comments