Skip to content

Commit 5e302d0

Browse files
GeneAIclaude
authored andcommitted
feat: Remove quick mode from secure-release & reorganize dashboard workflows
## Secure Release Changes - Remove "quick" mode entirely (use release-prep for quick checks) - Modes now: "full" (DEFAULT with crew) and "standard" (fallback without crew) - Add mode validation with ValueError for invalid modes - Remove for_quick_check() class method - CodeReviewWorkflow now always runs (not skipped in any mode) - Update all tests to use valid modes only ## Dashboard Workflow Reorganization - Reorganize 14 workflow buttons using Purpose Grouping - Row 1: Code Review & Analysis (Review File | Run Analysis) - Row 2: Pull Request Review (Review PR | empty) - Row 3: Documentation (Manage Docs | Generate Docs) - side by side! - Row 4: Code Quality (Generate Tests | Refactor Plan) - Row 5: Security (Security Audit | Secure Release) - Row 6: Performance & Health (Perf Audit | Check Health) - Row 7: Prediction & Dependencies (Predict Bugs | Check Deps) - Row 8: Release (Release Prep | empty) ## Tooltip Enhancements - Add comprehensive tooltips to all Quick Action buttons - Add comprehensive tooltips to all Workflow buttons - Update secure-release tooltip to clarify always comprehensive 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
1 parent d8f75f7 commit 5e302d0

File tree

3 files changed

+90
-71
lines changed

3 files changed

+90
-71
lines changed

src/empathy_os/workflows/secure_release.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,11 @@ class SecureReleasePipeline:
8989
maximum coverage before release approval.
9090
9191
Execution modes:
92-
- "full": Run all workflows (SecurityAuditCrew + all workflows)
93-
- "standard": Skip crew, run all workflows
94-
- "quick": Only SecurityAuditWorkflow + ReleasePreparation
92+
- "full": Run all workflows (SecurityAuditCrew + all workflows) [DEFAULT]
93+
- "standard": Skip crew, run all workflows (fallback when crew unavailable)
94+
95+
Note: For quick release checks without full security audit, use the
96+
ReleasePreparationWorkflow directly instead.
9597
9698
Usage:
9799
pipeline = SecureReleasePipeline(mode="full")
@@ -113,7 +115,7 @@ class SecureReleasePipeline:
113115

114116
def __init__(
115117
self,
116-
mode: str = "full", # "full", "standard", "quick"
118+
mode: str = "full", # "full" or "standard"
117119
use_crew: bool | None = None, # Override mode's crew setting
118120
parallel_crew: bool = True, # Run crew in parallel with first workflow
119121
crew_config: dict | None = None,
@@ -123,12 +125,16 @@ def __init__(
123125
Initialize secure release pipeline.
124126
125127
Args:
126-
mode: Execution mode ("full", "standard", "quick")
127-
use_crew: Override crew setting (None uses mode default)
128+
mode: Execution mode - "full" (with crew, DEFAULT) or "standard" (skip crew)
129+
use_crew: Override crew setting (None uses mode default: full=True, standard=False)
128130
parallel_crew: Run SecurityAuditCrew in parallel with first workflow
129131
crew_config: Configuration for SecurityAuditCrew
130132
**kwargs: Additional arguments passed to child workflows
131133
"""
134+
# Validate mode
135+
if mode not in ("full", "standard"):
136+
raise ValueError(f"Invalid mode '{mode}'. Must be 'full' or 'standard'.")
137+
132138
self.mode = mode
133139
self.use_crew = use_crew if use_crew is not None else (mode == "full")
134140
self.parallel_crew = parallel_crew
@@ -206,8 +212,8 @@ async def execute(
206212
logger.warning("SecurityAuditCrew timed out")
207213
warnings.append("SecurityAuditCrew timed out - results not included")
208214

209-
# Step 3: CodeReviewWorkflow (if not quick mode and diff provided)
210-
if self.mode != "quick" and diff:
215+
# Step 3: CodeReviewWorkflow (if diff provided)
216+
if diff:
211217
from .code_review import CodeReviewWorkflow
212218

213219
code_workflow = CodeReviewWorkflow(**self.kwargs)
@@ -438,14 +444,6 @@ def for_release(cls) -> "SecureReleasePipeline":
438444
crew_config={"scan_depth": "thorough"},
439445
)
440446

441-
@classmethod
442-
def for_quick_check(cls) -> "SecureReleasePipeline":
443-
"""Create pipeline for quick security check."""
444-
return cls(
445-
mode="quick",
446-
use_crew=False,
447-
)
448-
449447

450448
def format_secure_release_report(result: SecureReleaseResult) -> str:
451449
"""

tests/test_secure_release.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
Tests the SecureReleasePipeline including:
55
- SecureReleaseResult dataclass
66
- SecureReleasePipeline initialization
7-
- Execution modes (full, standard, quick)
7+
- Execution modes (full, standard)
88
- Go/No-Go decision logic
99
- Report formatting
1010
1111
Copyright 2025 Smart AI Memory, LLC
1212
Licensed under Fair Source 0.9
1313
"""
1414

15+
import pytest
16+
1517
from src.empathy_os.workflows.secure_release import SecureReleasePipeline, SecureReleaseResult
1618

1719

@@ -164,14 +166,14 @@ def test_mode_standard(self):
164166
)
165167
assert result.mode == "standard"
166168

167-
def test_mode_quick(self):
168-
"""Test quick mode."""
169+
def test_mode_invalid(self):
170+
"""Test result can store any mode string (for backwards compat)."""
169171
result = SecureReleaseResult(
170172
success=True,
171173
go_no_go="GO",
172-
mode="quick",
174+
mode="custom",
173175
)
174-
assert result.mode == "quick"
176+
assert result.mode == "custom"
175177

176178

177179
class TestSecureReleasePipelineInit:
@@ -192,15 +194,15 @@ def test_mode_standard(self):
192194
pipeline = SecureReleasePipeline(mode="standard")
193195
assert pipeline.mode == "standard"
194196

195-
def test_mode_quick(self):
196-
"""Test initialization with quick mode."""
197-
pipeline = SecureReleasePipeline(mode="quick")
198-
assert pipeline.mode == "quick"
197+
def test_invalid_mode(self):
198+
"""Test initialization with invalid mode raises ValueError."""
199+
with pytest.raises(ValueError, match="Invalid mode 'quick'"):
200+
SecureReleasePipeline(mode="quick")
199201

200202
def test_with_kwargs(self):
201203
"""Test initialization with additional kwargs."""
202-
pipeline = SecureReleasePipeline(mode="quick", provider="openai")
203-
assert pipeline.mode == "quick"
204+
pipeline = SecureReleasePipeline(mode="standard", provider="openai")
205+
assert pipeline.mode == "standard"
204206
assert pipeline.kwargs.get("provider") == "openai"
205207

206208

@@ -209,14 +211,14 @@ class TestSecureReleasePipelineExecution:
209211

210212
def test_execute_method_exists(self):
211213
"""Test execute method exists."""
212-
pipeline = SecureReleasePipeline(mode="quick")
214+
pipeline = SecureReleasePipeline(mode="standard")
213215
assert hasattr(pipeline, "execute")
214216
assert callable(pipeline.execute)
215217

216218
def test_pipeline_attributes(self):
217219
"""Test pipeline has expected attributes."""
218-
pipeline = SecureReleasePipeline(mode="quick")
219-
assert pipeline.mode == "quick"
220+
pipeline = SecureReleasePipeline(mode="standard")
221+
assert pipeline.mode == "standard"
220222
assert hasattr(pipeline, "use_crew")
221223
assert hasattr(pipeline, "parallel_crew")
222224

@@ -331,7 +333,7 @@ class TestSecureReleasePipelineIntegration:
331333

332334
def test_pipeline_can_be_instantiated(self):
333335
"""Test pipeline can be instantiated in all modes."""
334-
for mode in ["full", "standard", "quick"]:
336+
for mode in ["full", "standard"]:
335337
pipeline = SecureReleasePipeline(mode=mode)
336338
assert pipeline is not None
337339
assert pipeline.mode == mode

vscode-extension/src/panels/EmpathyDashboardPanel.ts

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,7 @@ export class EmpathyDashboardProvider implements vscode.WebviewViewProvider {
934934
}
935935

936936
// Special handling for code-review: send findings to CodeReviewPanel
937+
let openedInPanel = false;
937938
if (workflowName === 'code-review' && success && stdout) {
938939
try {
939940
// Parse JSON output from CLI (uses --json flag)
@@ -964,6 +965,7 @@ export class EmpathyDashboardProvider implements vscode.WebviewViewProvider {
964965

965966
// Show the panel
966967
await vscode.commands.executeCommand('empathy-code-review.focus');
968+
openedInPanel = true;
967969

968970
// Notify user
969971
const findingCount = result.findings.length;
@@ -1009,9 +1011,10 @@ export class EmpathyDashboardProvider implements vscode.WebviewViewProvider {
10091011
data: {
10101012
workflow: workflowName,
10111013
status: success ? 'complete' : 'error',
1012-
output: openedInEditor ? '(Report opened in editor)' : output,
1014+
output: openedInEditor ? '(Report opened in editor)' : openedInPanel ? '(Results shown in Code Review panel)' : output,
10131015
error: error ? error.message : null,
1014-
openedInEditor: openedInEditor
1016+
openedInEditor: openedInEditor,
1017+
openedInPanel: openedInPanel
10151018
}
10161019
});
10171020
});
@@ -2461,27 +2464,27 @@ export class EmpathyDashboardProvider implements vscode.WebviewViewProvider {
24612464
<div class="card">
24622465
<div class="card-title">Quick Actions</div>
24632466
<div class="actions-grid workflow-grid">
2464-
<button class="action-btn workflow-btn" data-cmd="morning" data-title="Morning Briefing">
2467+
<button class="action-btn workflow-btn" data-cmd="morning" data-title="Morning Briefing" title="Daily project status summary with priorities and blockers">
24652468
<span class="action-icon">&#x2600;</span>
24662469
<span>Get Briefing</span>
24672470
</button>
2468-
<button class="action-btn workflow-btn" data-cmd="ship" data-title="Pre-Ship Check">
2471+
<button class="action-btn workflow-btn" data-cmd="ship" data-title="Pre-Ship Check" title="Pre-release quality gate: health, security, and changelog checks">
24692472
<span class="action-icon">&#x1F680;</span>
24702473
<span>Run Ship</span>
24712474
</button>
2472-
<button class="action-btn workflow-btn" data-cmd="fix-all" data-title="Fix All Issues">
2475+
<button class="action-btn workflow-btn" data-cmd="fix-all" data-title="Fix All Issues" title="Auto-fix linting, formatting, and safe code issues">
24732476
<span class="action-icon">&#x1F527;</span>
24742477
<span>Fix Issues</span>
24752478
</button>
2476-
<button class="action-btn workflow-btn" data-cmd="learn" data-title="Learn Patterns">
2479+
<button class="action-btn workflow-btn" data-cmd="learn" data-title="Learn Patterns" title="Analyze recent commits to learn debugging and refactoring patterns">
24772480
<span class="action-icon">&#x1F4DA;</span>
24782481
<span>Learn Patterns</span>
24792482
</button>
2480-
<button class="action-btn workflow-btn" data-cmd="run-tests" data-title="Run Tests">
2483+
<button class="action-btn workflow-btn" data-cmd="run-tests" data-title="Run Tests" title="Execute test suite and display results">
24812484
<span class="action-icon">&#x1F9EA;</span>
24822485
<span>Run Tests</span>
24832486
</button>
2484-
<button class="action-btn" data-cmd="initialize" data-title="Setup Wizard">
2487+
<button class="action-btn" data-cmd="initialize" data-title="Setup Wizard" title="First-time setup wizard for API keys and project config">
24852488
<span class="action-icon">&#x2699;</span>
24862489
<span>Setup</span>
24872490
</button>
@@ -2513,63 +2516,79 @@ export class EmpathyDashboardProvider implements vscode.WebviewViewProvider {
25132516
<div class="card" style="margin-top: 12px">
25142517
<div class="card-title">Workflows <span style="font-size: 10px; opacity: 0.6;">(Beta)</span></div>
25152518
<div class="actions-grid workflow-grid">
2516-
<button class="action-btn workflow-btn" data-workflow="code-review">
2519+
<!-- Row 1: Code Review & Analysis -->
2520+
<button class="action-btn workflow-btn" data-workflow="code-review" title="Tiered code analysis with security, quality, and architecture review">
25172521
<span class="action-icon">&#x1F50D;</span>
25182522
<span>Review File</span>
25192523
</button>
2520-
<button class="action-btn workflow-btn" data-workflow="pro-review">
2524+
<button class="action-btn workflow-btn" data-workflow="pro-review" title="Advanced code analysis for diffs and pull requests">
25212525
<span class="action-icon">&#x2B50;</span>
25222526
<span>Run Analysis</span>
25232527
</button>
2524-
<button class="action-btn workflow-btn" data-workflow="doc-orchestrator">
2528+
2529+
<!-- Row 2: Pull Request Review -->
2530+
<button class="action-btn workflow-btn" data-workflow="pr-review" title="Comprehensive pull request review with diff analysis">
2531+
<span class="action-icon">&#x1F50D;</span>
2532+
<span>Review PR</span>
2533+
</button>
2534+
<!-- TODO: Add second PR-related workflow here -->
2535+
2536+
<!-- Row 3: Documentation -->
2537+
<button class="action-btn workflow-btn" data-workflow="doc-orchestrator" title="End-to-end documentation management: scout gaps, prioritize, generate">
25252538
<span class="action-icon">&#x1F4DA;</span>
25262539
<span>Manage Docs</span>
25272540
</button>
2528-
<button class="action-btn workflow-btn" data-workflow="bug-predict">
2529-
<span class="action-icon">&#x1F41B;</span>
2530-
<span>Predict Bugs</span>
2531-
</button>
2532-
<button class="action-btn workflow-btn" data-workflow="security-audit">
2533-
<span class="action-icon">&#x1F512;</span>
2534-
<span>Security Audit</span>
2535-
</button>
2536-
<button class="action-btn workflow-btn" data-workflow="perf-audit">
2537-
<span class="action-icon">&#x26A1;</span>
2538-
<span>Perf Audit</span>
2541+
<button class="action-btn workflow-btn" data-workflow="doc-gen" title="Cost-optimized documentation generation: outline → write → polish">
2542+
<span class="action-icon">&#x1F4C4;</span>
2543+
<span>Generate Docs</span>
25392544
</button>
2540-
<button class="action-btn workflow-btn" id="btn-test-gen-direct" data-workflow="test-gen">
2545+
2546+
<!-- Row 4: Code Quality -->
2547+
<button class="action-btn workflow-btn" id="btn-test-gen-direct" data-workflow="test-gen" title="Generate tests targeting areas with historical bugs and low coverage">
25412548
<span class="action-icon">&#x1F9EA;</span>
25422549
<span>Generate Tests</span>
25432550
</button>
2544-
<button class="action-btn workflow-btn" data-workflow="refactor-plan">
2551+
<button class="action-btn workflow-btn" data-workflow="refactor-plan" title="Prioritize tech debt based on code trajectory and maintenance impact">
25452552
<span class="action-icon">&#x1F3D7;</span>
25462553
<span>Refactor Plan</span>
25472554
</button>
2548-
<button class="action-btn workflow-btn" data-workflow="dependency-check">
2549-
<span class="action-icon">&#x1F4E6;</span>
2550-
<span>Check Deps</span>
2555+
2556+
<!-- Row 5: Security -->
2557+
<button class="action-btn workflow-btn" data-workflow="security-audit" title="OWASP-focused security scan with vulnerability assessment and remediation">
2558+
<span class="action-icon">&#x1F512;</span>
2559+
<span>Security Audit</span>
2560+
</button>
2561+
<button class="action-btn workflow-btn" data-workflow="secure-release" title="Full security pipeline: audit crew + OWASP scan + code review + release prep (always comprehensive)">
2562+
<span class="action-icon">&#x1F510;</span>
2563+
<span>Secure Release</span>
2564+
</button>
2565+
2566+
<!-- Row 6: Performance & Health -->
2567+
<button class="action-btn workflow-btn" data-workflow="perf-audit" title="Identify performance bottlenecks and optimization opportunities">
2568+
<span class="action-icon">&#x26A1;</span>
2569+
<span>Perf Audit</span>
25512570
</button>
2552-
<button class="action-btn workflow-btn" data-workflow="health-check" title="Run HealthCheckCrew for comprehensive 5-agent project health analysis">
2571+
<button class="action-btn workflow-btn" data-workflow="health-check" title="Project health diagnosis and fixing with 5-agent crew">
25532572
<span class="action-icon">&#x1FA7A;</span>
25542573
<span>Check Health</span>
25552574
</button>
2556-
<button class="action-btn workflow-btn" data-workflow="pr-review">
2557-
<span class="action-icon">&#x1F50D;</span>
2558-
<span>Review PR</span>
2575+
2576+
<!-- Row 7: Prediction & Dependencies -->
2577+
<button class="action-btn workflow-btn" data-workflow="bug-predict" title="Predict bugs by analyzing code against learned patterns and history">
2578+
<span class="action-icon">&#x1F41B;</span>
2579+
<span>Predict Bugs</span>
25592580
</button>
2560-
<!-- Hidden for v3.5.5 release - TODO: enable after workflow wizard is complete -->
2561-
<button class="action-btn workflow-btn" data-workflow="doc-gen">
2562-
<span class="action-icon">&#x1F4C4;</span>
2563-
<span>Generate Docs</span>
2581+
<button class="action-btn workflow-btn" data-workflow="dependency-check" title="Audit dependencies for security vulnerabilities and available updates">
2582+
<span class="action-icon">&#x1F4E6;</span>
2583+
<span>Check Deps</span>
25642584
</button>
2565-
<button class="action-btn workflow-btn" data-workflow="release-prep">
2585+
2586+
<!-- Row 8: Release -->
2587+
<button class="action-btn workflow-btn" data-workflow="release-prep" title="Pre-release quality gate with health, security, and changelog validation">
25662588
<span class="action-icon">&#x1F680;</span>
25672589
<span>Release Prep</span>
25682590
</button>
2569-
<button class="action-btn workflow-btn" data-workflow="secure-release">
2570-
<span class="action-icon">&#x1F510;</span>
2571-
<span>Secure Release</span>
2572-
</button> <button class="action-btn workflow-btn new-workflow-btn" id="btn-new-workflow" title="Create a new workflow from template" style="display: none;">
2591+
<!-- TODO: Add second release-related workflow here --> <button class="action-btn workflow-btn new-workflow-btn" id="btn-new-workflow" title="Create a new workflow from template" style="display: none;">
25732592
<span class="action-icon">&#x2795;</span>
25742593
<span>New Workflow</span>
25752594
</button>

0 commit comments

Comments
 (0)