feat(ui): replace D3+Dagre attack path graph with React Flow#10686
Open
pfe-nazaries wants to merge 17 commits intomasterfrom
Open
feat(ui): replace D3+Dagre attack path graph with React Flow#10686pfe-nazaries wants to merge 17 commits intomasterfrom
pfe-nazaries wants to merge 17 commits intomasterfrom
Conversation
Adds the openspec repository as a submodule at openspec/ for shared spec definitions used by SDD tooling across AI coding assistants. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Contributor
|
✅ All necessary |
Contributor
|
✅ Conflict Markers Resolved All conflict markers have been successfully resolved in this pull request. |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Contributor
🔒 Container Security ScanImage: 📊 Vulnerability Summary
5 package(s) affected
|
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This was referenced Apr 15, 2026
…spec updates Bumps the openspec submodule to incorporate the linearized task completion status and spec updates from PR0 (1373), PR1 (1374), and PR2 (1375). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 tasks
…#10701) Co-authored-by: Pablo F.G <pablo.fernandez@prowler.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Contributor
🔒 Container Security ScanImage: 📊 Vulnerability Summary
2 package(s) affected
|
12 tasks
Co-authored-by: Pablo F.G <pablo.fernandez@prowler.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…0800) Co-authored-by: Pablo F.G <pablo.fernandez@prowler.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…flow-migration # Conflicts: # ui/CHANGELOG.md # ui/dependency-log.json
…10970) Co-authored-by: Pablo F.G <pablo.fernandez@prowler.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…n' into PROWLER-1273/react-flow-migration
| event.waitUntil(self.clients.claim()) | ||
| }) | ||
|
|
||
| addEventListener('message', async function (event) { |
Detach the openspec submodule so the directory is managed as a local clone instead. /openspec/ remains in .gitignore so the cloned working tree is never tracked by this repo. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 tasks
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.
🚀 Feature Complete - Chained PRs
This PR merges the
PROWLER-1273/react-flow-migrationfeature branch.Included PRs
Legend: 🟢 Merged | 🟡 Open | 🔴 Changes Requested | 🔵 In Progress | ⚪ Pending
MVP milestone: After PR2, the graph is fully functional except export.
Phase 1 complete: After PR3.
Hardening complete: After PR4 (automated test coverage).
Polish complete: After PR5 (review-driven viewport and minimap fixes).
Dependency Diagram
Context
The Attack Path graph is currently a 1,173-line imperative D3 component that bypasses React reconciliation entirely. This feature branch migrates it to React Flow (@xyflow/react v12), the de-facto standard for graph visualization in React.
The migration is Phase 1 of the RFC: drop-in replacement achieving feature parity plus minimap, with PR4 adding automated test coverage as a hardening step and PR5 absorbing review-driven polish on viewport behavior and minimap visibility. Phase 2 (edge labels, node grouping, multi-select) will follow in a separate initiative.
Technical design:
openspec/changes/react-flow-migration/contains the full proposal, design, specs, and task breakdown.Description
Key Changes:
Rendering
@dagrejs/dagre(maintained fork)Interactions
initialNodeIdsupport for reusable componentExport
modern-screenshot+ React Flow'sgetViewportForBounds()(replaces broken XMLSerializer approach)Cleanup
dagrepackage (keepd3— used by geo map components)GraphEdge.source/targettypeTesting (PR4 + PR5)
AttackPathPageHarnessco-located withAttackPathsPage— tests never import@testing-librarydirectlySteps to review
pnpm test:browserinui/— verify the page-level suite passesChecklist
Community Checklist
UI
License
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.