Skip to content

investigate: is the ExitPlanMode immediate-retry-after-denial loop (#126) fixed upstream? Remove progressive-cooldown workaround if so #570

Description

Summary

The progressive-cooldown / rapid-retry auto-deny machinery (_DISCUSS_COOLDOWN, min(30 * deny_count, 120) escalation) in the Claude control channel works around Claude Code retrying an ExitPlanMode control_request immediately after a denial — the v2.1.72–2.1.74 ExitPlanMode loop (lineage #126, #117, #93, #87).

Surfaced by the v0.35.3 Claude Code workaround-retirement audit (umbrella tracking issue).

Hypothesis (UNVERIFIED)

A local note suggests the upstream fix for the ExitPlanMode immediate-retry loop landed in a Claude Code release after v2.1.74. This is not confirmed and must be verified before any code is removed — do not assume the fix is present.

Investigation / scope

  1. Reproduce (or fail to reproduce) the immediate-retry-after-denial behaviour on the Claude Code CLI version Untether currently targets (and the fleet runs). A clean test: deny an ExitPlanMode control_request and observe whether Claude immediately re-issues it.
  2. If the loop is gone upstream: remove the progressive-cooldown machinery (_DISCUSS_COOLDOWN, escalation, rapid-retry auto-deny), keeping the legitimate Pause-&-Outline / post-outline approval flow intact.
  3. If the loop persists: keep the workaround; record the CLI version + repro here so the next check is cheap.

Affected code

  • src/untether/telegram/commands/claude_control.py — cooldown handling, rapid-retry auto-deny
  • src/untether/runners/claude.py_DISCUSS_COOLDOWN registry, escalation
  • tests/test_cooldown_bypass.py, tests/test_claude_control.py
  • Reference: .claude/rules/control-channel.md "Progressive cooldown" section

Done when

  • The current targeted CLI's ExitPlanMode retry-after-denial behaviour is documented (fixed / not fixed, with version).
  • Cooldown machinery removed (if fixed) with the Pause-&-Outline flow regression-tested, or a keep decision recorded.

Lineage: #126, #117, #93, #87. Part of the v0.35.3 Claude Code workaround-retirement audit (umbrella tracking issue).

Metadata

Metadata

Assignees

No one assigned

    Labels

    engine:claudeClaude Code CLI (Anthropic)enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions