feat: selectable strategies per goal in setup wizard#20
Merged
Conversation
e4fc974 to
fe9809a
Compare
- Add per-goal strategy selection using checkable Tag components - Profiles pre-select specific strategies; manual goal check pre-selects all - Wizard writes attacks (with strategy) to YAML instead of plain goals - Sync attacks form field via useEffect when strategies/goals change - Add GoalStep tests for strategy visibility, selection, and toggling
fe9809a to
8207155
Compare
- Always show strategy tags for all goals, not just checked ones - Unchecked tags render with visible border instead of disappearing - Title-case goal and strategy names for readability - Prevent text selection on profile cards and strategy tags - Prevent checkbox toggle when clicking strategy tags - Uncheck goal when all its strategies are deselected - Selecting a strategy on unchecked goal also checks the goal - Force blue fill on checked checkboxes for dark theme visibility - Use userEvent instead of fireEvent for reliable CI checkbox clicks
- Strategies lack context when displayed as bare names - Fetch /api/strategies to get descriptions, show on hover via Tooltip - Add "Profiles" heading above profile cards
- Goals step has many items and buttons scroll out of view - Constrain layout to viewport height so main area scrolls - Sticky bar with opaque background covers content beneath
- Inline form errors below goals were invisible when scrolled up - Show step-specific error next to the button (e.g. "Select at least one goal") - Auto-clear error when the failing fields are satisfied via Form.useWatch - Error scoped to originating step so it doesn't leak across navigation
- Save writes redteam.yaml to the working directory via POST /api/save - Prints next-steps message in both the UI and the terminal - Copy button on YAML preview and in the sticky bar - Download simplified to always use redteam.yaml (no filename modal)
- Defaults to redteam.yaml but respects the original config path - Tooltips and success message reflect the actual filename
- Save button last as primary CTA, Copy and Download before it - Missing fields alert shown below step title for better visibility
- Use filepath.Base to strip directory components from user-supplied filename - Prevents writing files outside the working directory via ../
- Centralized in ProcessResults alongside HTML file output - Both commands share the same output processing path
4be7906 to
7c8c0c2
Compare
- Mismatched font sizes between the two success alerts - Connection alert was not dismissible unlike save alert - Both now use title+description layout and are closable - Gitignore redteam.yaml to avoid committing test artifacts
2a2e245 to
54e901b
Compare
Viehzeug
approved these changes
Mar 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds per-goal strategy selection in the setup wizard - profiles pre-select specific strategies, manual goal selection pre-selects all (this what backend does if no strategies are sent).
Additional notable changes + many small ones
--json-file-output- some customers already rely on this.Screenshots