81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Bell Flag Spike — run ONCE manually to determine tmux bell flag read behavior.
|
|
|
|
Usage:
|
|
python3 coordinator/spike_bell_flag.py
|
|
|
|
What this tests:
|
|
Does `tmux display-message -p "#{window_bell_flag}"` clear the flag when
|
|
read, or does the flag persist until the window is visited in tmux?
|
|
|
|
Expected result (almost certain): the flag persists. Reading it does NOT clear
|
|
it. The flag is cleared only when the window is marked active inside tmux.
|
|
"""
|
|
|
|
import subprocess
|
|
import time
|
|
|
|
SESSION = "bell-spike-test"
|
|
|
|
|
|
def run(cmd: list[str]) -> str:
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
return result.stdout.strip()
|
|
|
|
|
|
def main() -> None:
|
|
# 1. Create a test session
|
|
print("Creating test session...")
|
|
subprocess.run(
|
|
["tmux", "new-session", "-d", "-s", SESSION, "-x", "80", "-y", "24"], check=True
|
|
)
|
|
time.sleep(0.2)
|
|
|
|
# 2. Send a bell to the session
|
|
print("Sending bell to session...")
|
|
subprocess.run(
|
|
["tmux", "send-keys", "-t", SESSION, "printf '\\a'", "Enter"], check=True
|
|
)
|
|
time.sleep(1.0)
|
|
|
|
# 3. Read the bell flag (first read)
|
|
flag_read1 = run(
|
|
["tmux", "display-message", "-t", SESSION, "-p", "#{window_bell_flag}"]
|
|
)
|
|
print(f"Bell flag (1st read): '{flag_read1}'")
|
|
|
|
# 4. Read the bell flag immediately again (second read)
|
|
flag_read2 = run(
|
|
["tmux", "display-message", "-t", SESSION, "-p", "#{window_bell_flag}"]
|
|
)
|
|
print(f"Bell flag (2nd read): '{flag_read2}'")
|
|
|
|
# 5. Cleanup
|
|
subprocess.run(["tmux", "kill-session", "-t", SESSION])
|
|
|
|
# 6. Report
|
|
print()
|
|
if flag_read1 == "1" and flag_read2 == "1":
|
|
print("FINDING: Reading does NOT clear the flag. Both reads show '1'.")
|
|
print(
|
|
"Implementation: use in-memory _bell_seen dict to detect 0→1 transitions."
|
|
)
|
|
elif flag_read1 == "1" and flag_read2 == "0":
|
|
print(
|
|
"FINDING: Reading CLEARS the flag. First read shows '1', second shows '0'."
|
|
)
|
|
print("Implementation: each '1' is a new bell — no transition tracking needed.")
|
|
elif flag_read1 == "0":
|
|
print("WARNING: Bell flag not set after printf '\\a'. Try running manually:")
|
|
print(f" tmux send-keys -t {SESSION} \"printf '\\\\a'\" Enter")
|
|
print(
|
|
" Then check: tmux display-message -t bell-spike-test -p '#{window_bell_flag}'"
|
|
)
|
|
else:
|
|
print(f"UNEXPECTED: read1={flag_read1!r}, read2={flag_read2!r}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|