Skip to content

feat(sessions): make failed-host hiding opt-in - #3547

Merged
steipete merged 3 commits into
steipete:mainfrom
warthurton:warthurton-fantastic-happiness
Sep 12, 2026
Merged

feat(sessions): make failed-host hiding opt-in#3547
steipete merged 3 commits into
steipete:mainfrom
warthurton:warthurton-fantastic-happiness

Conversation

@warthurton

@warthurton warthurton commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Add an opt-in Settings → Menu → Agent sessions → “Hide unreachable hosts” control. It is off by default for both new and existing installations, so connection, authentication, incompatible-CLI and decoding failures remain visible unless the user explicitly chooses to hide them. Fetching and retries continue unchanged; turning the option off restores the diagnostic rows.

Reconciled with current main, preserved explicit saved choices, completed the two strings in all 22 required locales, and added isolated default/persistence/menu-observation coverage. The native proof uses the production settings section and live controller descriptor path, fed only by an injected synthetic session store. Thanks @warthurton for the original contribution. The release note is centralized in #3567.

The focused descriptor/settings suites pass 19 tests, locale validation passes, and independent P0–P2 review of the current implementation is clean. Signed interactive proof passed visible → hidden → restored through the actual control and production controller path. The full local suite passed 1,074 selections in 90 groups, with zero failures or retries. Make check and 41 architecture tests pass. Exact-head CI is green: https://github.com/steipete/CodexBar/actions/runs/34658787278. Native screenshots and the detailed proof are in #3547 (comment). This is a menu visibility preference; it does not change SSH discovery or authentication policy.

Add "Hide unreachable hosts" setting (on by default) for Agent
Sessions, filtering Tailscale-discovered and manually added SSH
hosts whose session fetch failed out of the menu instead of showing
an unreachable row.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Sep 10, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@warthurton

Copy link
Copy Markdown
Contributor Author

I have compiled and tested this and shown working. There might need to be some more fidly filtering, but it does reduce a list of 20 tail nodes that don't have codexbar or claude on them from being displayed.

@clawsweeper

clawsweeper Bot commented Sep 10, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed September 11, 2026, 8:49 PM ET / September 12, 2026, 00:49 UTC (Revision 4).

ClawSweeper review

What this changes

Adds a saved, off-by-default setting that hides failed remote-session hosts from the menu, with localized controls, documentation, and regression coverage.

Merge readiness

Ready for maintainer review

The PR remains useful: current main and v0.59.0 lack this preference. The maintainer-approved opt-in behavior preserves existing defaults, has convincing native proof, and has no identified blocking defect.

Priority: P3
Reviewed head: 44dbc7e9c22c840ec5b11a6e152955856dbd24b0

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused, compatible implementation with strong native proof and reported passing validation has no remaining review blocker.
Proof confidence 🦞 diamond lobster (5/6) ✨ media proof bonus Sufficient (screenshot): Inspected native screenshots show the production settings control hiding only the failed-host row through the controller's menu path; the owner's signed interactive run also confirms restoration and persistence using isolated synthetic inputs.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (screenshot): Inspected native screenshots show the production settings control hiding only the failed-host row through the controller's menu path; the owner's signed interactive run also confirms restoration and persistence using isolated synthetic inputs.
Evidence reviewed 6 items Introduced change and current-main behavior: The verified base-to-head diff adds the visibility preference and rendering filter; current main renders every failed host as an unavailable row. No equivalent preference was found in main's Sources or docs.
Latest-release comparison: GitHub's v0.59.0 source retains failed-host rows unconditionally and has no hiding parameter. The release content was inspected through the API after local historical-object retrieval failed.
Default, persistence, and observation coverage: The loader defaults an absent preference to false and preserves explicit booleans. Dictionary-backed tests cover existing/new session settings, true/false reloads, and menu invalidation without changing the background-work revision.
Findings None None.
Security None None.

How this fits together

CodexBar combines local agent sessions and SSH host results into its menu. This preference filters failed-host diagnostic rows during rendering without changing discovery, fetching, or authentication.

flowchart TD
  A[Local agent sessions] --> D[Session menu builder]
  B[SSH host results] --> C[Apply saved visibility preference]
  E[Settings toggle] --> C
  C --> D
  D --> F[Session rows and visible diagnostics]
Loading

Before merge

None.

Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Net code growth Production Swift +26; localization +68; tests +238; docs +2 lines Production growth supports one preference, while most added code provides isolated regression and native interaction coverage.

Technical review

Best possible solution:

Keep failed-host diagnostics visible by default and offer reversible, persisted hiding solely at the menu-rendering boundary.

Do we have a high-confidence way to reproduce the issue?

Not applicable as a bug reproduction: this adds an optional display preference, and the inspected native screenshots demonstrate its visible effect.

Is this the best way to solve the issue?

Yes. Filtering during menu construction reuses the existing error classification, preserves fetching and defaults, and matches the owner's approved direction.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 830cdd86c4b6.

Labels

Label justifications:

  • P3: This is optional menu ergonomics that preserves the existing diagnostic behavior by default.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): Inspected native screenshots show the production settings control hiding only the failed-host row through the controller's menu path; the owner's signed interactive run also confirms restoration and persistence using isolated synthetic inputs.
  • proof: sufficient: Contributor real behavior proof is sufficient. Inspected native screenshots show the production settings control hiding only the failed-host row through the controller's menu path; the owner's signed interactive run also confirms restoration and persistence using isolated synthetic inputs.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Inspected native screenshots show the production settings control hiding only the failed-host row through the controller's menu path; the owner's signed interactive run also confirms restoration and persistence using isolated synthetic inputs.

Evidence

What I checked:

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (3 earlier review cycles)
  • reviewed 2026-09-10T23:23:27.933Z sha d32bed5 :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-11T23:30:22.608Z sha 664d23c :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-11T23:41:39.357Z sha 44dbc7e :: needs maintainer review before merge. :: none

@steipete steipete changed the title Hide unreachable agent-session hosts by default feat(sessions): make failed-host hiding opt-in Sep 11, 2026
@steipete

Copy link
Copy Markdown
Owner

Maintainer native proof passed with the repaired opt-in behavior.

Built the current CodexBar sources and launched a Developer ID–signed, isolated XCTest host using the production settings section and the same controller descriptor path used by the live menu. An injected session store supplied only ready.example.invalid and offline.example.invalid; no real SSH discovery or credentials were involved. Drove the actual controls with Peekaboo:

  • Initial/default off: the failed-host row and its diagnostic tooltip are retained.
  • Opt in: the failed-host row disappears; the reachable empty host remains.
  • Turn off again: the failed-host row returns. The explicit choice is written to the injected defaults store.

The interactive XCTest passed with zero failures. The 19 descriptor/settings tests and 41 architecture-gate tests pass; default and explicit true/false reloads have isolated regression coverage. Locale coverage, make check, and independent P0–P2 review pass. The attached captures contain synthetic data only. The first proof attempt left a native popup tracking; the verified run closes it before changing the setting and yields during the interactive wait.

The final branch also reanchors existing architecture checks without changing their provider memberships or fingerprints. The changelog line and contributor credit are in #3567. Exact-head CI remains the final readiness gate.

Default off: failed host remains visible

Opt in: failed host hidden, reachable host retained

@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 11, 2026
@steipete

Copy link
Copy Markdown
Owner

Final CI passed on 44dbc7e9c22c840ec5b11a6e152955856dbd24b0: https://github.com/steipete/CodexBar/actions/runs/34658787278.

The full local suite also passed 1,074 selections in 90 groups with zero failures or retries. Signed native visible → hidden → restored proof and inspected synthetic screenshots are recorded above. Make check, all 41 architecture-gate tests, and final independent P0–P2 review pass. Ready for squash with @warthurton's credit; keep #3567 last for the centralized notes.

@steipete
steipete merged commit 0c0cb02 into steipete:main Sep 12, 2026
9 checks passed
steipete added a commit that referenced this pull request Sep 12, 2026
Collect the ordered 0.59.1 Unreleased notes and contributor credits after #3539, #3566, #3547, #3525 and #3544. Preserve all released sections.

Separate process-fixture startup from measured cleanup deadlines and use the existing task-local authentication hook in Claude retry fixtures. Retain retry, timeout, ownership, and dedicated authentication tests. Dependency pins remain current within their existing policies; larger migrations remain separate.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants