Skip to content

DING never delivers to claude-code 2.1.220: idle_footer requires a hint the harness composes at runtime #26

Description

@schickling-assistant

At f2720190 the fail-closed observed transport gates every Claude delivery on three footer literals:

let idle_footer = footer.contains("\u23f5\u23f5")
    && footer.contains("shift+tab to cycle")
    && footer.contains("permissions on");

On claude-code 2.1.220 — the version the surrounding comment names — a real idle pane renders:

⏵⏵ bypass permissions on · PR #1234 · 1 shell · ← 1 agent

Two of the three are present. shift+tab to cycle is not, and it is not a static string in the shipped binary either — the hint is composed at runtime from a keybinding lookup, so it is absent whenever the binding is remapped or the hint is not currently being shown.

With idle_footer == false the Claude branch can never reach EmptySafe/ExactSafe, so DING defers indefinitely and never pastes. Messages arrive in the inbox and are never surfaced.

Why this is easy to miss

No static gate catches it. Catalog validation, an activation build, and read-only validate/doctor are all green at this rev; only a real pane shows the failure. A harness end-to-end suite catches it only as a symptom — a shell stand-in classifies as Ambiguous, which reads like a stale-harness problem rather than a production one.

In our own run of the equivalent suite, three checks regressed against the previous rev, all in the DING cluster:

  • ding never delivered a poke
  • poke not visible on the agent's pane
  • adopted ding did not deliver the post-restart message

Every non-DING leg was byte-identical, and the previous rev reproduced a clean baseline.

Suggested direction

Gate on the two stable markers (⏵⏵ and the permission-mode text) and drop the keybinding hint, or treat the hint as corroborating rather than required. A keybinding hint is user-configurable and view-dependent, so it is a weaker liveness signal than the mode indicator it sits next to.

Happy to send a PR if you agree with the direction.

Version

  • st2 f2720190096d7dcf9bb3256222cbdf5efbe36e4f
  • claude-code 2.1.220
  • previous known-good st2 46ff6ee1db2cae1b52b7730ae75ba781e0bb6605

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions