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
At
f2720190the fail-closed observed transport gates every Claude delivery on three footer literals:On claude-code 2.1.220 — the version the surrounding comment names — a real idle pane renders:
Two of the three are present.
shift+tab to cycleis 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 == falsethe Claude branch can never reachEmptySafe/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/doctorare 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 asAmbiguous, 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:
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
f2720190096d7dcf9bb3256222cbdf5efbe36e4f2.1.22046ff6ee1db2cae1b52b7730ae75ba781e0bb6605