Skip to content

fix(startup): prevent repeated tabs after an unconfirmed handover - #802

Open
Kuddev wants to merge 1 commit into
mainfrom
fix/resident-handover-797
Open

Kuddev wants to merge 1 commit into
mainfrom
fix/resident-handover-797

Conversation

@Kuddev

@Kuddev Kuddev commented Oct 29, 2026

Copy link
Copy Markdown
Owner

Result / 用户结果

Fixes #797. Opening a folder in an existing Pebrel instance no longer replays tab.new/window.create when the creation request was sent but its reply was lost, delayed or invalid. Previously the startup fallback could send 40 additional creation requests and then open another process. An unconfirmed request now ends that launch and reports the uncertainty; users can check the existing window before retrying.

Design / 设计边界

  • Runtime startup handover owns the distinction between an unavailable resident and an ambiguously delivered mutation. Discovery/connection failures before writing remain retryable.
  • Focus and creation use the same discovered endpoint. Creation replies reuse the existing protocol/id/envelope validator and have a size limit; the JSONL request does not require a write-half shutdown.
  • No new dependency, persistent state or worker. Existing runtime commands and shell/AI input behavior are unchanged.
  • The diagnostic uses typed messages in all 11 languages. Windows uses the existing startup error dialog; other platforms log and write stderr. The cause of the reporter's original missing acknowledgment is not established by a transport trace.
  • Decision: architecture/notes/nebula_app/runtime_api/2026-10-29-consume-ambiguous-window-handover.md.

Evidence / 验证依据

  • Supplied Linux x86_64 host: actual GPUI product test build (cargo test --locked -p nebula --bin pebrel --features gpui-shell runtime_api::handover::tests -- --test-threads=1) succeeded; 3 new network regressions passed.
  • Same product binary: all 99 Runtime tests passed, including success, refused connection, lost/delayed/truncated/mismatched/rejected replies and no replay across the startup retry loop.
  • Translation contract passed on Linux.
  • Local architecture check against 1b58f5dd74cdfd0ea5e8d0c79a5e55687250db12, 55 checker regressions, formatting and whitespace checks passed.
  • Windows Explorer reproduction and native error-dialog presentation were not run locally. Platform CI must pass before merge. No settings layout or hot rendering path changes.

Required Review / 必须确认

  • Followed contribution, architecture and project constraints.
  • Responsibility-based change; existing response validation remains authoritative.
  • Architecture check passes without budget increases.
  • Success/failure regressions and platform limitations are stated.
  • New messages use typed i18n IDs in all languages.
  • Governance changes: not applicable.

@github-actions github-actions Bot added the size/M 101–500 行 label Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/M 101–500 行

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 右键 在pebrel中打开时 会弹出几十个终端选项卡

1 participant