Skip to content

Nudges and hotspot failover: land #68 and #101 - #153

Open
krishhgg wants to merge 5 commits into
integration/wave1-basefrom
integration/network-fixes
Open

krishhgg wants to merge 5 commits into
integration/wave1-basefrom
integration/network-fixes

Conversation

@krishhgg

@krishhgg krishhgg commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Two fixes for a Mac left running away from the desk. A tmux pane marked for nudges that is back at its shell prompt no longer gets "continue" typed into the shell (#68). When Wi-Fi drops and the scan does not find the hotspot by its configured name, the failover also looks for it with the other apostrophe, because an iPhone names its hotspot with a typographic one (#101).

This lands #68 by @bIackr0se at 108e38a and #101 by @aldikosh23 at 71c4eee. Both commits are merged here unchanged, so GitHub marks both pull requests merged when this one merges and their authors keep the credit. Each conflicts with #147 (Settings on one page), which lands first, so neither can merge as it is.

To @bIackr0se and @aldikosh23: please don't push to your branches now. A new commit on one isn't in this pull request, so that pull request would stay open instead of showing as merged.

The base is integration/wave1-base: main with #146 and #147 (which carry #145) merged, as main will be once they land. When #147 merges, this pull request's base changes to main and nothing else changes.

Conflicts resolved

No maintainer changes beyond the merges.

Tests

The full suite at this tree: 1394 tests, 0 failures, on macOS 26.2. Hosted CI runs on macOS 26 and 27.

Review

Clean at 1931a85, the same tree as this head; only commit messages changed since. It checked both resolutions and how #101's candidates meet #147's suggestions: a suggestion fills in the exact remembered name, the failover scans that name first, and the Keychain lookup uses the configured name whichever apostrophe the scan matched.

Evidence

To run on the owner's MacBook at the final head: an iPhone hotspot whose name has a typographic apostrophe, configured with a straight one, found and joined when Wi-Fi drops during a session; and a marked tmux pane that is back at its shell prompt gets no "continue".

RetriggerView in GreptileConfidence Score: 5/5

The PR appears safe to merge; no actionable issues were found.

Summary

The PR skips tmux nudges when the pane’s foreground program is a recognized shell. Hotspot joins now try the other apostrophe spelling when the configured name finds nothing.

  • Hotspot failover finds iPhone names with either apostrophe.
  • Tmux nudges skip panes whose foreground program is a shell.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Hotspot join attempt] --> B[Read password under configured name]
  B --> C[Scan configured spelling]
  C --> D{Network found?}
  D -->|Yes| E[Join returned network]
  D -->|No| F[Try alternate apostrophe spelling]
  F --> E
  G[Network recovers] --> H[Read tmux pane state]
  H --> I{Recognized shell?}
  I -->|Yes| J[Skip pane]
  I -->|No| K[Require pane mark before sending keys]
Loading

Reviews (1) · Last reviewed commit: "Merge #101: look for the SSID with the o..." · Reviewed by Greptile

bIackr0se and others added 5 commits October 11, 2026 12:14
The pane mark outlives the program it was set for. Once that program
exits, the nudge typed `continue` at the shell prompt and, with Enter on,
ran it as a command, and the outage notification still counted the pane
as nudged.

The live runner now reads #{pane_current_command} with the other pane
flags and skips a pane whose foreground program is a shell (basenames in
/etc/shells plus common ones). An empty program name fails closed like a
missing flag. Test fixtures wait until their program has replaced the
`sh -c` wrapper tmux starts it under.
check(paneState:shells:) and makeLiveRunner(shells:) take the shell names;
nil keeps TmuxNudge.shellNames, so the app still reads /etc/shells and no
test touches /etc.
…nds nothing

iOS names a Personal Hotspot after the device with a typographic
apostrophe, `Name’s iPhone` (U+2019), and a Mac keyboard types a straight
one (U+0027). CoreWLAN's directed scan matches the SSID's exact bytes, so
a name typed into Settings never found the iPhone and every join of an
outage failed. A scan that finds nothing is now tried again with the
name's apostrophes swapped, straight for typographic and back
(HotspotSSID.scanCandidates); a name without one is scanned once, as
before, and insomnia.log says when the other spelling was found. The
password is still the one saved for the SSID as typed.

Fixes #87.
Conflict in docs/extras.md: #68's new sentences with #147's pointer to If Wi-Fi drops.

# Conflicts:
#	docs/extras.md
… finds nothing

Conflict in NetworkFailover.swift: #147's Settings suggestions and #101's scan candidates are both kept.

# Conflicts:
#	Sources/Insomnia/System/NetworkFailover.swift
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-27T10:49:25.870206Z 94cfb28 PR opened
🔒 Security Review ✅ Completed 2026-10-27T10:50:59.123379Z 94cfb28 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants