Skip to content

feat(vscode): improve stop button feedback in Pipeline Observability screen#549

Merged
stepmikhaylov merged 1 commit into
rocketride-org:developfrom
charliegillet:feature/stop-button-feedback-v2
Apr 6, 2026
Merged

feat(vscode): improve stop button feedback in Pipeline Observability screen#549
stepmikhaylov merged 1 commit into
rocketride-org:developfrom
charliegillet:feature/stop-button-feedback-v2

Conversation

@charliegillet
Copy link
Copy Markdown
Contributor

@charliegillet charliegillet commented Mar 31, 2026

Summary

  • Stop button now immediately shows "Stopping..." with disabled state when pipeline is shutting down
  • Distinct orange styling differentiates the stopping state from stop (red) and run (green)
  • Button is disabled during stopping to prevent duplicate clicks

Type

Enhancement

Why this feature fits this codebase

The codebase already defines TASK_STATE.STOPPING (value 4) in the task state enum and the StatusHeader component already renders a "Stopping" label with an orange indicator dot for this state. However, the control button in getControlButton() did not handle TASK_STATE.STOPPING — it fell through to the default case, showing a disabled "Run" button. This change aligns the button behavior with the existing state machine and visual language already established in the codebase (orange = stopping, as seen in .status-indicator.stopping and the deploy page's stopping state).

What changed

  • apps/vscode/src/providers/views/PageStatus/PageStatus.tsx: Added a TASK_STATE.STOPPING check in getControlButton() that returns a disabled "Stopping..." button with the stopping-btn CSS class, placed before the RUNNING/INITIALIZING check so the stopping state takes priority.
  • apps/vscode/src/providers/views/PageStatus/styles.css: Added .action-btn.stopping-btn style with --vscode-charts-orange background and cursor: not-allowed, consistent with the existing .status-indicator.stopping orange color and the .action-btn.disabled pattern.

Validation

  • The TASK_STATE.STOPPING state (value 4) is already emitted by the engine during pipeline shutdown — no backend changes needed
  • Button state transitions: Stop (red, clickable) -> Stopping... (orange, disabled) -> Run (green, clickable)
  • The existing .action-btn.disabled rule (opacity: 0.4; cursor: not-allowed) applies alongside .stopping-btn for consistent disabled UX
  • The StatusHeader already displays "Stopping" with an orange dot for this state, so the button now matches the header indicator

How this can be extended

  • A timeout could be added: if the pipeline stays in STOPPING state for more than N seconds, show an error toast or re-enable a "Force Stop" button
  • An animated spinner icon could be added inside the button label for additional visual feedback
  • The handlePipelineAction in PageStatusProvider.ts could send intermediate status messages back to the webview for more granular progress

Closes #404

#Hack-with-bay-2

Summary by CodeRabbit

  • New Features

    • Added dedicated visual feedback for stopping operations. When an action is being stopped, users see a "Stopping..." button state with disabled interaction, providing clear status indication throughout the process.
  • Style

    • Introduced distinctive styling for the stopping button state, featuring an orange background and not-allowed cursor to clearly differentiate it from other action button states.

…screen

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 31, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a4aac1be-3c20-47c5-be82-fb924265e2c8

📥 Commits

Reviewing files that changed from the base of the PR and between b6b2dc1 and 670770c.

📒 Files selected for processing (2)
  • apps/vscode/src/providers/views/PageStatus/PageStatus.tsx
  • apps/vscode/src/providers/views/PageStatus/styles.css

📝 Walkthrough

Walkthrough

The change adds special handling for a "stopping" task state in the control button logic, displaying a disabled "Stopping..." button, paired with distinct orange CSS styling. This provides visual feedback during pipeline shutdown.

Changes

Cohort / File(s) Summary
Stopping Button State
apps/vscode/src/providers/views/PageStatus/PageStatus.tsx, apps/vscode/src/providers/views/PageStatus/styles.css
Added conditional logic to display a disabled "Stopping..." button when taskStatus.state === TASK_STATE.STOPPING, with corresponding CSS styling using orange background color and disabled cursor to visually differentiate the stopping state from stop and run states.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Poem

🐰 A carrot's worth of patience now,
When stopping time draws near—
The button glows in orange hue,
No frantic clicking here!
A "Stopping..." dance, so smooth and true,
Feedback clear for all to see. 🛑✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and specifically describes the primary change: improving stop button feedback with a 'Stopping...' state on the Pipeline Observability screen.
Linked Issues check ✅ Passed Changes implement all acceptance criteria from #404: adds 'Stopping...' state immediately on click, disables button during stopping, and provides orange visual styling.
Out of Scope Changes check ✅ Passed All changes directly address requirements in #404; no unrelated modifications present. Updates are limited to PageStatus button logic and associated styling.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

charliegillet added a commit to charliegillet/rocketride-server that referenced this pull request Mar 31, 2026
The PageStatus changes belong in a separate PR (rocketride-org#549) and were
accidentally included here.
charliegillet added a commit to charliegillet/rocketride-server that referenced this pull request Mar 31, 2026
…ation PR

The PageStatus changes belong in a separate PR (rocketride-org#549) and were
accidentally included here.
charliegillet added a commit to charliegillet/rocketride-server that referenced this pull request Mar 31, 2026
The PageStatus changes belong in a separate PR (rocketride-org#549) and were
accidentally included here.
@stepmikhaylov stepmikhaylov enabled auto-merge (squash) April 6, 2026 13:18
@stepmikhaylov stepmikhaylov merged commit 0d8ddb7 into rocketride-org:develop Apr 6, 2026
12 checks passed
stepmikhaylov pushed a commit that referenced this pull request Apr 6, 2026
* feat(vscode): improve stop button feedback in Pipeline Observability screen

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(nodes): improve Milvus vector DB node — address all TODOs

- Add configurable timeout (default 60s) replacing hardcoded timeout=20,
  read from node config via 'timeout' key (TODO line 101, 483)
- Add connection error handling with meaningful failure messages
  instead of raw pymilvus exceptions propagating
- Implement bulk insert with configurable batch size (default 50) for
  addChunks(), replacing one-at-a-time upserts (TODO lines 449, 464)
- Add _batchUpsertResults() helper to batch-update markDeleted/markActive
  operations, eliminating the per-vector upsert loop bottleneck
  (TODO lines 514-515, 546-547)
- Add timeout parameter to remove() delete call (TODO line 483)
- Document Milvus COSINE distance score range [0,2] rescaling to [0,1]
  for codebase consistency (TODO line 253)
- Fix typos in docstrings and comments

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove unrelated PageStatus "Stopping..." changes from Milvus PR

The PageStatus changes belong in a separate PR (#549) and were
accidentally included here.

* fix(nodes): address CodeRabbit feedback on Milvus PR #562

- Remove dead protocol check (host already stripped of scheme at init)
- Add exception chaining with 'from e' for connection errors (B904)
- Add output_fields to markDeleted/markActive queries to prevent data
  loss during upsert (was only returning primary key)
- Add output_fields to renderChunks query to prevent KeyError on
  content/chunkId access

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): address remaining review feedback on Milvus PR #562

- Remove unrelated PageStatus changes that were re-introduced
- Validate timeout and bulkInsertBatchSize to ensure positive values
- Make isDeleted a keyword-only argument in _batchUpsertResults

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
stepmikhaylov pushed a commit that referenced this pull request Apr 7, 2026
* feat(vscode): improve stop button feedback in Pipeline Observability screen

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): add input validation and sanitization to LLM chat drivers

Add a shared validation module and integrate it into ChatBase and all
LLM nodes that bypass the base chat path, preventing control character
injection, empty prompts, malformed model names, and unsafe token limits
from reaching provider APIs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove unrelated PageStatus "Stopping..." changes from LLM validation PR

The PageStatus changes belong in a separate PR (#549) and were
accidentally included here.

* fix: address CodeRabbit review findings on input validation

- Re-check prompt emptiness after sanitization to catch control-only prompts
- Validate total_tokens param before clamping output tokens
- Move min 1024 output tokens check after validate_max_tokens clamping
- Use validate_prompt() in Mistral/Perplexity chat() overrides to match
  shared ChatBase validation behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): address kwit75's review feedback on LLM input validation

- Remove double/triple validation: keep validate_prompt() only in
  chat_string() (the main entry point), remove redundant sanitize_prompt()
  from _chat() and validate_prompt() from Mistral/Perplexity chat() overrides
- Fix validate_model_name(None) breaking existing setups: return None
  gracefully when model is not yet configured instead of raising ValueError
- Add @ to model name regex to support org@model provider formats
- IBM Watson formatting changes kept as-is since they are ruff format
  enforced style, not hand-made cosmetic changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): remove redundant sanitize_prompt from gemini and ibm_watson drivers

Validation is now centralized in ChatBase.chat_string() — individual
drivers should not duplicate sanitization. Removes the redundant calls
and imports per kwit75's review feedback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): add type guards for model name and token validation

Address CodeRabbit suggestions:
- Guard validate_model_name against non-string inputs
- Guard validate_max_tokens against bool values (isinstance(True, int) is True in Python)

* add mistral and perplexity validation

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: ryan-t-christensen <ryan.christensen@rocketride.ai>
shashidharbabu pushed a commit that referenced this pull request Apr 7, 2026
…screen (#549)

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
shashidharbabu pushed a commit that referenced this pull request Apr 7, 2026
* feat(vscode): improve stop button feedback in Pipeline Observability screen

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(nodes): improve Milvus vector DB node — address all TODOs

- Add configurable timeout (default 60s) replacing hardcoded timeout=20,
  read from node config via 'timeout' key (TODO line 101, 483)
- Add connection error handling with meaningful failure messages
  instead of raw pymilvus exceptions propagating
- Implement bulk insert with configurable batch size (default 50) for
  addChunks(), replacing one-at-a-time upserts (TODO lines 449, 464)
- Add _batchUpsertResults() helper to batch-update markDeleted/markActive
  operations, eliminating the per-vector upsert loop bottleneck
  (TODO lines 514-515, 546-547)
- Add timeout parameter to remove() delete call (TODO line 483)
- Document Milvus COSINE distance score range [0,2] rescaling to [0,1]
  for codebase consistency (TODO line 253)
- Fix typos in docstrings and comments

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove unrelated PageStatus "Stopping..." changes from Milvus PR

The PageStatus changes belong in a separate PR (#549) and were
accidentally included here.

* fix(nodes): address CodeRabbit feedback on Milvus PR #562

- Remove dead protocol check (host already stripped of scheme at init)
- Add exception chaining with 'from e' for connection errors (B904)
- Add output_fields to markDeleted/markActive queries to prevent data
  loss during upsert (was only returning primary key)
- Add output_fields to renderChunks query to prevent KeyError on
  content/chunkId access

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): address remaining review feedback on Milvus PR #562

- Remove unrelated PageStatus changes that were re-introduced
- Validate timeout and bulkInsertBatchSize to ensure positive values
- Make isDeleted a keyword-only argument in _batchUpsertResults

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
shashidharbabu pushed a commit that referenced this pull request Apr 7, 2026
* feat(vscode): improve stop button feedback in Pipeline Observability screen

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): add input validation and sanitization to LLM chat drivers

Add a shared validation module and integrate it into ChatBase and all
LLM nodes that bypass the base chat path, preventing control character
injection, empty prompts, malformed model names, and unsafe token limits
from reaching provider APIs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove unrelated PageStatus "Stopping..." changes from LLM validation PR

The PageStatus changes belong in a separate PR (#549) and were
accidentally included here.

* fix: address CodeRabbit review findings on input validation

- Re-check prompt emptiness after sanitization to catch control-only prompts
- Validate total_tokens param before clamping output tokens
- Move min 1024 output tokens check after validate_max_tokens clamping
- Use validate_prompt() in Mistral/Perplexity chat() overrides to match
  shared ChatBase validation behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): address kwit75's review feedback on LLM input validation

- Remove double/triple validation: keep validate_prompt() only in
  chat_string() (the main entry point), remove redundant sanitize_prompt()
  from _chat() and validate_prompt() from Mistral/Perplexity chat() overrides
- Fix validate_model_name(None) breaking existing setups: return None
  gracefully when model is not yet configured instead of raising ValueError
- Add @ to model name regex to support org@model provider formats
- IBM Watson formatting changes kept as-is since they are ruff format
  enforced style, not hand-made cosmetic changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): remove redundant sanitize_prompt from gemini and ibm_watson drivers

Validation is now centralized in ChatBase.chat_string() — individual
drivers should not duplicate sanitization. Removes the redundant calls
and imports per kwit75's review feedback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): add type guards for model name and token validation

Address CodeRabbit suggestions:
- Guard validate_model_name against non-string inputs
- Guard validate_max_tokens against bool values (isinstance(True, int) is True in Python)

* add mistral and perplexity validation

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: ryan-t-christensen <ryan.christensen@rocketride.ai>
ryan-t-christensen added a commit that referenced this pull request Apr 8, 2026
* feat(vscode): improve stop button feedback in Pipeline Observability screen

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): add input validation and sanitization to LLM chat drivers

Add a shared validation module and integrate it into ChatBase and all
LLM nodes that bypass the base chat path, preventing control character
injection, empty prompts, malformed model names, and unsafe token limits
from reaching provider APIs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove unrelated PageStatus "Stopping..." changes from LLM validation PR

The PageStatus changes belong in a separate PR (#549) and were
accidentally included here.

* fix: address CodeRabbit review findings on input validation

- Re-check prompt emptiness after sanitization to catch control-only prompts
- Validate total_tokens param before clamping output tokens
- Move min 1024 output tokens check after validate_max_tokens clamping
- Use validate_prompt() in Mistral/Perplexity chat() overrides to match
  shared ChatBase validation behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): address kwit75's review feedback on LLM input validation

- Remove double/triple validation: keep validate_prompt() only in
  chat_string() (the main entry point), remove redundant sanitize_prompt()
  from _chat() and validate_prompt() from Mistral/Perplexity chat() overrides
- Fix validate_model_name(None) breaking existing setups: return None
  gracefully when model is not yet configured instead of raising ValueError
- Add @ to model name regex to support org@model provider formats
- IBM Watson formatting changes kept as-is since they are ruff format
  enforced style, not hand-made cosmetic changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): remove redundant sanitize_prompt from gemini and ibm_watson drivers

Validation is now centralized in ChatBase.chat_string() — individual
drivers should not duplicate sanitization. Removes the redundant calls
and imports per kwit75's review feedback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(nodes): add type guards for model name and token validation

Address CodeRabbit suggestions:
- Guard validate_model_name against non-string inputs
- Guard validate_max_tokens against bool values (isinstance(True, int) is True in Python)

* add mistral and perplexity validation

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: ryan-t-christensen <ryan.christensen@rocketride.ai>
anirudhk-tech pushed a commit that referenced this pull request Apr 9, 2026
…screen (#549)

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
anirudhk-tech pushed a commit that referenced this pull request Apr 21, 2026
…screen (#549)

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
anirudhk-tech pushed a commit that referenced this pull request Apr 21, 2026
…screen (#549)

Handle TASK_STATE.STOPPING in the control button to show "Stopping..."
with a disabled state and distinct orange styling, preventing duplicate
clicks and giving immediate visual feedback during pipeline shutdown.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

module:vscode VS Code extension

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve stop button feedback in Pipeline Observability screen

2 participants