Originally created by: fu351
Originally owned by: jasperdingg
Two related ◻ cells, one PR (they share setup). Both proven on Claude Code by tests/unit/test_auth_challenge_timeout.py, but that proof is host-agnostic engine code: it calls doberman.auth.challenge.run_auth_challenge directly and never touches doberman.hosthooks.claude_code. For Codex, you need a test proving the Codex hook's OWN wiring reaches and correctly surfaces that same deadline behavior. Waiting the real 1200-second default (DEFAULT_CHALLENGE_TIMEOUT_S) isn't practical in a unit test, so stub the result the way tests/unit/test_hosthook_auth_challenge.py::test_timed_out_auth_denies_with_expired_no_response_hint already does for Claude Code (unmarked, but it's the right pattern): monkeypatch doberman.auth.challenge.run_auth_challenge to return AuthResult(method=TIMEOUT_METHOD, approved=False, ...) instead of actually sleeping.
What to do
test_a_blocked_prompter_denies_within_the_deadline / test_a_timeout_is_distinguishable_from_a_human_denial in test_auth_challenge_timeout.py for the contract each cell proves.tests/unit/test_hosthook_codex.py, using the same AUTH-tier action as test_auth_runs_dobermans_own_challenge (Write to .github/workflows/ci.yml):run_auth_challenge to a TIMEOUT_METHOD result, asserting codex.evaluate_pre denies → @pytest.mark.guarantee("auth-deadline", host="codex")@pytest.mark.guarantee("timeout-vs-deny-logging", host="codex")TIMEOUT_METHOD branch), confirm red, revert.python -m tools.parity.generate_parity.
Originally posted by: jasperdingg
I'll take this one too, will open PR soon
Originally posted by: fu351
Yours too — assigned. This one's two cells: AUTH auto-denying at the wall-clock deadline, and a timeout logging distinctly from a refusal.
tests/unit/test_hosthook_codex.pyalready carries thedestructive-command-gateandauth-action-boundmarkers to mirror; you're addingauth-deadlineandtimeout-vs-deny-logging. Same groove as [#395].Related
Tickets:
#395Originally posted by: fu351
@jasperdingg checking in on [#334] and [#312], no rush. If you're stuck on either one ask here and I'll help. If you've moved on that's fine too, just let me know and I'll unassign them.
Related
Tickets: #312
Tickets: #334
Originally posted by: jasperdingg
Sorry, I've been a bit busy recently, but I'm mostly done. I'll open a PR today.