ticket: add panel transition latency task
This commit is contained in:
parent
eec805287b
commit
7463f8ec53
|
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
id: 20260606-233520-workspace-panel-nonblocking-transitions
|
||||
slug: workspace-panel-nonblocking-transitions
|
||||
title: Make workspace panel transitions non-blocking
|
||||
status: open
|
||||
kind: task
|
||||
priority: P2
|
||||
labels: [tui, panel, ux, performance]
|
||||
created_at: 2026-06-06T23:35:20Z
|
||||
updated_at: 2026-06-06T23:36:10Z
|
||||
assignee: null
|
||||
legacy_ticket: null
|
||||
workflow_state: intake
|
||||
attention_required: null
|
||||
queued_by: null
|
||||
queued_at: null
|
||||
---
|
||||
|
||||
## Background
|
||||
|
||||
`yoi panel` currently feels delayed when opening the panel, attaching from the panel to a Pod, and returning from an attached Pod back to the panel.
|
||||
|
||||
The delay is not waiting for an LLM response. It is mostly waiting for synchronous local/runtime work before the next screen is drawn:
|
||||
|
||||
- initial panel load waits for a full panel snapshot;
|
||||
- Ticket-enabled panel load can ensure/observe the workspace Orchestrator before first draw;
|
||||
- opening a Pod waits for socket connect or restore/spawn before visible transition;
|
||||
- returning from a nested Pod waits for a synchronous panel reload before showing the panel again.
|
||||
|
||||
The panel already has a background `PendingReload` mechanism while it is visible, but the open/attach/return transition paths still block on reload/connect work before changing the visible screen.
|
||||
|
||||
## Goal
|
||||
|
||||
Make workspace panel transitions feel immediate by showing the next relevant screen/state first and moving snapshot reload / Pod connection / Orchestrator observation work into background or explicit progress states where practical.
|
||||
|
||||
## Problem points
|
||||
|
||||
Current important paths:
|
||||
|
||||
```text
|
||||
yoi panel
|
||||
→ MultiPodApp::load(...)
|
||||
→ load_multi_pod_snapshot(..., OrchestratorLifecycleMode::Ensure)
|
||||
→ first draw only after snapshot/ensure completes
|
||||
```
|
||||
|
||||
```text
|
||||
panel Enter on Pod
|
||||
→ prepare_open()
|
||||
→ run_pod_name_nested(...)
|
||||
→ try_connect_live_pod / restore/spawn
|
||||
→ single-Pod screen only after connect/restore is ready
|
||||
```
|
||||
|
||||
```text
|
||||
return from attached Pod
|
||||
→ app.finish_open(...)
|
||||
→ app.reload_or_notice().await
|
||||
→ panel draw only after reload completes
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- Returning from an attached Pod should redraw the previous panel immediately, with a clear refreshing notice, then perform snapshot reload in the background.
|
||||
- Avoid awaiting `app.reload_or_notice().await` on the attach-return path before the panel is visible.
|
||||
- Opening/attaching a Pod should visibly transition to an attaching/restoring progress state before waiting on socket connect or restore/spawn.
|
||||
- Initial `yoi panel` open should avoid blocking first draw on non-essential refresh/ensure work where practical.
|
||||
- A minimal/loading panel or last/current partial snapshot is acceptable.
|
||||
- Orchestrator ensure can be surfaced as background progress/diagnostic if it cannot be completed before first draw cheaply.
|
||||
- Preserve correctness: background reload must still update Pod state, Ticket rows, Orchestrator state, and diagnostics when it completes.
|
||||
- Preserve no-Ticket Pod-centric behavior.
|
||||
- Do not lose key input during transition/progress states.
|
||||
- Do not introduce duplicate overlapping reload tasks; reuse/extend `PendingReload` or similar guard.
|
||||
- Do not change Ticket workflow semantics or Pod restore/spawn authority.
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Changing Ticket workflow state.
|
||||
- Changing Orchestrator scheduling semantics.
|
||||
- Rewriting the whole TUI runtime loop.
|
||||
- Replacing the single-Pod TUI.
|
||||
- Cosmetic layout tuning unrelated to transition latency.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Returning from a nested Pod displays the panel before panel snapshot reload completes.
|
||||
- Panel shows a concise `refreshing` / `attaching` / `restoring` style notice during background work.
|
||||
- Background reload completion updates the panel without dropping selection/composer text unnecessarily.
|
||||
- Attach/open path gives visible feedback before slow socket connect/restore work.
|
||||
- Tests cover the non-blocking return/reload behavior where practical.
|
||||
- Existing validation for panel, Pod-centric mode, and Ticket-enabled mode continues to pass.
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<!-- event: create author: "yoi ticket" at: 2026-06-06T23:35:20Z -->
|
||||
|
||||
## Created
|
||||
|
||||
Created by LocalTicketBackend create.
|
||||
|
||||
---
|
||||
|
||||
<!-- event: plan author: hare at: 2026-06-06T23:36:10Z -->
|
||||
|
||||
## Plan
|
||||
|
||||
Created from investigation of perceived delays when opening `yoi panel`, attaching to a Pod, and returning from an attached Pod.
|
||||
|
||||
Root cause recorded:
|
||||
- the panel waits for full snapshot/Orchestrator work before first draw;
|
||||
- attach waits for socket connect or restore/spawn before a visible transition;
|
||||
- return from nested Pod awaits `app.reload_or_notice().await` before showing the panel again.
|
||||
|
||||
Desired direction:
|
||||
- show the panel/progress state first;
|
||||
- move reload/connect/ensure work into background or explicit progress states where practical;
|
||||
- especially make return-from-attach redraw the previous panel immediately and refresh in the background.
|
||||
|
||||
|
||||
---
|
||||
Loading…
Reference in New Issue
Block a user