224 lines
7.8 KiB
Markdown
224 lines
7.8 KiB
Markdown
# Reachability Witnessing
|
|
|
|
**Status:** Implemented
|
|
**Owner shell:** `Security > Reachability`
|
|
**Canonical routes:** `/security/reachability/coverage`, `/security/reachability/witnesses`, `/security/reachability/witnesses/:witnessId`, `/security/reachability/poe`, `/security/reachability/poe/:artifactId`, `/security/reachability/gaps`
|
|
|
|
## Recommendation
|
|
|
|
Restore witness and proof-of-exposure UX as a deeper part of `Security > Reachability`, not as a standalone product.
|
|
|
|
- Canonical mount: `/security/reachability`
|
|
- Suggested user-facing title: `Reachability`
|
|
- Supporting label inside the shell: `Witnesses & Proof`
|
|
|
|
This capability should strengthen security investigation, release gating, and evidence review through reusable witness detail pages and proof drawers.
|
|
|
|
## Why This Is The Right Shape
|
|
|
|
- `ReachabilityCenterComponent` already owns the top-level reachability posture.
|
|
- `WitnessPageComponent` and `PoEDrawerComponent` are evidence and explanation layers of the same capability.
|
|
- Reachability proof matters in findings, triage, policy/VEX decisions, and release gates, so it must be reusable from multiple contexts.
|
|
- A single shell prevents proof UX from fragmenting across security, evidence, and release flows.
|
|
|
|
## Operator Modes
|
|
|
|
### 1. Coverage Review Mode
|
|
- Used by security operators checking graph coverage, sensor freshness, and fleet posture.
|
|
- Focus: `Coverage` and `Sensor Gaps`.
|
|
|
|
### 2. Investigation Mode
|
|
- Used by analysts validating whether a vulnerable path is reachable and why.
|
|
- Focus: `Witnesses` and `PoE / Exposure`.
|
|
|
|
### 3. Release Context Mode
|
|
- Entered from release gates, policy/VEX decisions, or evidence review.
|
|
- Focus: witness explanation, proof verification, and return-to-release navigation.
|
|
|
|
## Recommended IA
|
|
|
|
### Primary tabs
|
|
- `Coverage`
|
|
- fleet and package coverage, recent graph updates, confidence overview
|
|
- `Witnesses`
|
|
- searchable witness list and full witness detail page
|
|
- `PoE / Exposure`
|
|
- proof-of-exposure artifacts, export, verify, transparency status
|
|
- `Sensor Gaps`
|
|
- missing sensors, stale data, unresolved evidence dependencies
|
|
|
|
### Witness detail sections
|
|
- summary
|
|
- call path and gates
|
|
- confidence and caveats
|
|
- related findings and releases
|
|
- evidence chain and export actions
|
|
|
|
## Page Anatomy
|
|
|
|
### Coverage tab
|
|
- summary cards:
|
|
- analyzed artifacts
|
|
- coverage confidence
|
|
- stale witness count
|
|
- open gaps
|
|
- tables or cards:
|
|
- per-environment coverage
|
|
- hot CVEs lacking proof
|
|
|
|
### Witnesses tab
|
|
- list filters:
|
|
- artifact
|
|
- package
|
|
- CVE
|
|
- verdict
|
|
- confidence
|
|
- environment
|
|
- row preview:
|
|
- witness id
|
|
- subject
|
|
- vulnerability
|
|
- verdict
|
|
- confidence
|
|
- last observed
|
|
- witness detail page:
|
|
- proof summary header
|
|
- path explorer
|
|
- gates and confidence
|
|
- related evidence
|
|
- replay/verify/export actions
|
|
|
|
### PoE / Exposure tab
|
|
- proof list with status chips
|
|
- right drawer for proof detail by default
|
|
- optional permalink route for export and audit deep links
|
|
|
|
### Sensor Gaps tab
|
|
- backlog queues for:
|
|
- missing runtime signals
|
|
- stale graph facts
|
|
- unresolved symbol sources
|
|
- missing environment bindings
|
|
|
|
## Route Contract
|
|
|
|
Keep one canonical route family under security reachability.
|
|
|
|
### Canonical routes
|
|
- `/security/reachability`
|
|
- `/security/reachability/coverage`
|
|
- `/security/reachability/witnesses`
|
|
- `/security/reachability/witnesses/:witnessId`
|
|
- `/security/reachability/poe`
|
|
- `/security/reachability/poe/:artifactId`
|
|
- `/security/reachability/gaps`
|
|
|
|
### Query-param state
|
|
- `tab=coverage|witnesses|poe|gaps`
|
|
- `panel=poe|evidence|related`
|
|
- `returnTo=<encoded route>` for findings, triage, evidence, or releases
|
|
|
|
### Alias rules
|
|
- any future `evidence` or `release` entry points should deep-link here rather than mount duplicate witness pages
|
|
|
|
## What To Merge
|
|
|
|
### Merge into `Coverage`
|
|
- `ReachabilityCenterComponent`
|
|
|
|
### Merge into `Witnesses`
|
|
- `WitnessPageComponent`
|
|
|
|
### Merge into `PoE / Exposure`
|
|
- `PoEDrawerComponent`
|
|
|
|
### Preserve as shared behaviors
|
|
- export DOT and Mermaid actions
|
|
- proof verification actions
|
|
- evidence-chain cards
|
|
|
|
## Single Actions And Supporting Surfaces
|
|
|
|
### Witness detail
|
|
- full page under `Witnesses`
|
|
- preserve permalink and return-to-context behavior
|
|
|
|
### PoE detail
|
|
- default to a right drawer from witness detail, finding detail, triage, or release context
|
|
- allow a standalone route for exports and audit deep links
|
|
|
|
### Export or replay verify
|
|
- keep as actions on witness or PoE detail
|
|
- do not create separate pages per export type
|
|
|
|
### Related finding navigation
|
|
- keep as contextual links in the witness detail sidebar
|
|
|
|
## Cross-Product Entry Points
|
|
|
|
- `Security > Findings`
|
|
- open witness detail for a finding
|
|
- `Triage > Artifact Workspace`
|
|
- open witness or PoE from artifact detail
|
|
- `Evidence > Verify & Replay`
|
|
- open proof verification in the same witness/PoE model
|
|
- `Decisioning Studio` or `Releases`
|
|
- open witness and proof for gate verdict explanation
|
|
|
|
## Shipped Behavior
|
|
|
|
### Mounted shell
|
|
- `Coverage` remains the default entry and keeps the fleet posture summary.
|
|
- `Witnesses` ships a searchable, filterable list with confidence and verdict filters.
|
|
- `PoE / Exposure` keeps drawer-first inspection and supports direct permalink routes for export and audit use.
|
|
- `Sensor Gaps` stays inside the same shell rather than fragmenting into a separate product.
|
|
|
|
### Witness detail
|
|
- Loads the requested witness from the witness API when available.
|
|
- Falls back to deterministic reachability fixtures when the backend is unavailable.
|
|
- Ships call-path, gate, caveat, evidence-chain, runtime-observation, and related-context sections.
|
|
- Supports verify, JSON export, DOT export, Mermaid export, and PoE drill-in actions.
|
|
|
|
### Proof-of-exposure detail
|
|
- Opens by default as a contextual drawer from witness or shell entry points.
|
|
- Supports direct navigation through `/security/reachability/poe/:artifactId`.
|
|
- Preserves operator context with `returnTo` when launched from findings, triage, evidence replay, or release detail.
|
|
|
|
### Cross-product handoffs
|
|
- `Security > Findings` links into canonical witness routes instead of owning a second proof view.
|
|
- `Triage > Artifact Workspace` restores the selected finding and tab when returning from reachability.
|
|
- `Evidence > Verify & Replay` links the current request into reachability proof review.
|
|
- `Releases > Detail` links release-gate investigation into reachability without branching to a parallel shell.
|
|
|
|
## UI Standards For Implementation
|
|
|
|
- Keep witness detail as the canonical deep-link target.
|
|
- Default proof detail to a drawer to preserve investigation context.
|
|
- Preserve return-to-context links so operators can move back to findings or release flows.
|
|
- Reuse evidence cards and path visualizations across security, evidence, and release entry points.
|
|
- Keep graph and proof loading deterministic and evidence-first.
|
|
|
|
## Verification Status
|
|
|
|
- Angular verification: targeted route, witness-detail, handoff, and release-context tests passed on 2026-03-07.
|
|
- Playwright verification: witness detail, PoE drawer/permalink, and Verify & Replay handoff passed on 2026-03-07.
|
|
- Checked feature note: `docs/features/checked/web/reachability-witnessing-ui.md`
|
|
|
|
## Non-Goals
|
|
|
|
- Do not create a top-level `Witnessing` product.
|
|
- Do not split coverage, witness, and proof UX across unrelated sidebar branches.
|
|
- Do not leave PoE as a drawer with no canonical parent route.
|
|
|
|
## Source Inputs
|
|
|
|
- `docs/contracts/witness-v1.md`
|
|
- `docs/architecture/EVIDENCE_PIPELINE_ARCHITECTURE.md`
|
|
- `docs/modules/scanner/reachability.md`
|
|
- `docs/modules/ui/architecture-rework.md`
|
|
- `src/Web/StellaOps.Web/src/app/features/reachability/reachability-center.component.ts`
|
|
- `src/Web/StellaOps.Web/src/app/features/reachability/witness-page.component.ts`
|
|
- `src/Web/StellaOps.Web/src/app/features/reachability/poe-drawer.component.ts`
|
|
- `src/Web/StellaOps.Web/src/app/routes/security-risk.routes.ts`
|
|
- `src/Web/StellaOps.Web/src/app/routes/evidence.routes.ts`
|