Skip to main content

UX-NB-001 — Separate closing a view from shutting down compute

FieldValue
StatusOpen; source-verified, deployed confirmation pending
Architecture stateSource-backed current behavior; deployed confirmation pending
SeverityHigh
Affected surfaceClosing the last Workspace tab for a notebook
Componentssparqd/oqullus; Jupyter session API
Associated issueoqullus #522

Where the problem appears​

Define in-memory state and close the final open tab for that notebook without selecting an explicit compute-shutdown action.

Concrete observed case​

Reviewed source clears runtime state and deletes the Jupyter session when no other open tab has the same notebook path. The close action does not offer a separate shutdown choice.

Expected condition​

Close detaches the view while the authorized session remains subject to idle culling. Close and Shut Down explicitly deletes it, warns about state loss, and confirms success or failure.

Cause and evidence​

View lifecycle and compute-session lifecycle are coupled in the same close path.

Why it matters​

Removing tab clutter can unexpectedly erase variables and terminate work. The behavior also conflicts with refresh and reconnect expectations.

Existing controls and workarounds​

Keep the notebook tab open or save content before closing. Idle culling limits the cost of a detached session once Close no longer implies shutdown.

Alternatives considered​

  1. Recommended: separate Close from Close and Shut Down.
  2. Always retain compute after close — avoids data loss but hides resource release unless idle policy is clearly shown.
  3. Always shut down — rejected because closing a view is not consent to destroy stateful compute.

Component involvement​

  • sparqd/oqullus owns the user choice, warning, and session cleanup request.
  • Jupyter Server owns the session deletion result.

Reproduction and verification​

Follow NB-S013.

Resolution conditions​

Close when view closure preserves the session, explicit shutdown removes it, both outcomes are truthful, and multi-tab scope is tested.

Validation and blockers​

Source behavior is confirmed. A disposable deployed notebook is required to capture state, cleanup, and cost behavior.