feat: add the Security Map foundation - #633
Merged
Merged
Conversation
Replace the radial Attack Surface Overview with a versioned graph catalogue, build-time validation, and a local control-assessment UI on the existing /intro/attack-surface route.
Deploying frameworks with
|
| Latest commit: |
98b3a42
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://d779a207.frameworks-573.pages.dev |
| Branch Preview URL: | https://feat-security-map-foundation.frameworks-573.pages.dev |
Replace the search/filter/radial UI with a six-column map (assets, components, attack surfaces, threats, controls, guidance). Clicking a field lights related fields in the other columns and shows counts for surfaces, threats, controls, and incidents.
Docs column is too narrow for six columns plus guidance. /map uses Vocs blank layout so the map sits side by side with the detail panel. The docs page keeps a compact preview and an Open full map link.
Sidebar Configuration ReminderDocumentation files update: New in this push:
Please ensure that:
See Contributing guidelines - Sidebar / Navigation for more details. This is an automated reminder. If this PR doesn't need sidebar changes, you can ignore this message. |
Same graph, smaller subgraphs. Tabs on /map cut the six columns to a job (multisig, deployment, domains, signers, supply chain, response) or to gaps: threats with no response and assets with no protecting control. Share URLs may include view and focus.
Vocs Link expects `to`. The panel passed `href`, so Open framework page reloaded /map. Related guidance is no longer a 2-hop button dump. Documented pages are <a target=_blank>. Other lists stay map focus.
Native <a href> pointed at the right path. Click still stayed on /map
because Vocs routing owns in-app links. Use Link to={page.href}.
Verified click lands on /multisig-for-protocols/overview.
Restore Elliot's radial overview at /intro/attack-surface. Put both pages under Interactive content. Security Map lives at /intro/security-map. Map cards use the overview palette: translucent surfaces, 4px controls, 8px cards, red/green/amber, primary purple.
Sidebar Configuration ReminderDocumentation files update: New in this push:
Previously seen:
Please ensure that:
See Contributing guidelines - Sidebar / Navigation for more details. This is an automated reminder. If this PR doesn't need sidebar changes, you can ignore this message. |
Vocs warning callout on /intro/security-map. Coverage, layout, and assessment format may change.
This was referenced Sep 14, 2026
mattaereal
added this pull request to stack #643
September 14, 2026 17:24
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.
What does this PR change?
Replace the radial Attack Surface Overview prototype at
/intro/attack-surfacewith a first production Security Map: a versioned, validated graph of SEAL knowledge plus an interactive explorer and local control assessment.Closes nothing. Foundation PR.
Type of change
Problem
The old dashboard was a fixed 12-node radial SVG. Threats defaulted to red "gaps", could be marked "secured", and stored threat-level yes/no/partial in
attackSurface-posture. Incident examples and loss figures had no sources. Relationships lived in a handwritten TypeScript array instead of repository data.Scope
Foundation only. Seed graph for the migrated threat concepts, generator/validator, UI, local assessment, maintainer docs. Not a repo-wide framework mapping, not an incident database, not accounts or synced assessments.
Architecture
docs/data/security-map/(taxonomy, schema, nodes, edges, views, optional MDXsecurityMapfrontmatter)→
utils/security-map-lib.cjsloads, merges, validates→ writes
public/security-map.jsonandcomponents/security-map/securityMap.generated.tsfrom the same in-memory graph→ React Security Map at
/intro/attack-surface→ control assessments in
localStoragekeyseal-security-map-assessment:v1Renderer is original SVG/HTML, not Cytoscape. Overview shows eight domains and saved entry points, not the full graph. The list is the primary keyboard/AT interface; the canvas is
aria-hidden.Schema and validation
schemaVersion1.0.0hrefresolved againstdocs/pagestargetssomething and have a mitigates or documented-by pathassessmentEligibleonly on controlsdocs:dev/docs:buildrungenerate-security-map)UI
Search, AND-across / OR-within filters, domain overview, curated views, 1-hop focus, expand-one-hop, detail panel, guidance links, seven-state control assessment, import/export with preview.
Shareable query params:
focus,domain,view. Never assessment state.Privacy and security
__proto__/ unknown IDsdangerouslySetInnerHTML, no CDN runtime, no CSP changesattackSurface-postureis detected and not converted into control evidenceAccessibility
Semantic list/tree for the same tasks as the graph. Icon-only controls named. Live region for search/focus, not pan. Reduced motion respected. Color is not the only encoding.
Migration
/intro/attack-surfacekeptAttackSurfaceDashboardre-exportsSecurityMapthreatData.tsandAttackSurface.cssremovedcategoryMeta/Category/FrameworkLinkso it no longer imports the deleted catalogue/front-end-web-app/overview,/incident-management/playbooks/hacked-dprk)Validation
pnpm run test:security-mappnpm run validate:security-mappnpm run validate:content -- --path docs/pages/introattack-surface.mdxpassed. Other intro pages still have pre-existing content-debt failures (missing tags/contributors). Not introduced here.pnpm exec cspellon touched MDXpnpm run docs:buildgit diff --check:4173/intro/attack-surface?focus=control-signer-isolation; assessment stored locally and not in the URL; graph hidden at 390pxmarkdownlint-cli2is not installed in this environment; justfile lint could not run that half.Visual evidence
Screenshots taken during preview (desktop dark, focused control + assessment, desktop light, mobile 390). Not committed. Attach via PR comment for
/img-botif wanted.Known limitations
proposed, not steward-reviewedutils/security-map-assessment.cjs(tested) and is wrapped by the client moduleFollow-up
feat/security-map-<framework>), steward reviewOKcontract Interactive Onchain Attack Map was used only as interaction inspiration (select, trace, filter, share a focused view). No OKcontract code, data, assets, branding, or undocumented behavior was copied.
If applicable
vocs.config.tswith thedev: trueparameter