73 lines
4.0 KiB
Markdown
73 lines
4.0 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Single-page operator view
|
|
The dashboard SHALL present finding lookup, reporting metrics, source results, alive credential results, and current runtime health on one page without legacy page navigation.
|
|
|
|
#### Scenario: Operator opens the dashboard
|
|
- **WHEN** the supervisor-launched dashboard session connects
|
|
- **THEN** one page presents the primary lookup and observability sections in operational priority order
|
|
|
|
#### Scenario: Retired diagnostics remain hidden
|
|
- **WHEN** the page renders successfully
|
|
- **THEN** it does not present compatibility queue files, global runner state, TSV-gated summaries, raw logs, or advanced/debug navigation
|
|
|
|
### Requirement: Accurate reporting window
|
|
The dashboard SHALL apply the selected start and end timestamps in PostgreSQL before aggregating or limiting historical rows.
|
|
|
|
#### Scenario: Preset period is selected
|
|
- **WHEN** the operator selects 1 hour, 24 hours, 7 days, or 30 days
|
|
- **THEN** all historical KPI and breakdown queries use that exact UTC interval
|
|
|
|
#### Scenario: Custom period is selected
|
|
- **WHEN** the operator supplies a valid custom start and end
|
|
- **THEN** the page reports data only from the normalized custom interval
|
|
|
|
#### Scenario: Invalid custom period is supplied
|
|
- **WHEN** the end is not later than the start
|
|
- **THEN** the dashboard explains the error and does not run historical aggregation queries
|
|
|
|
### Requirement: PostgreSQL-authoritative summary
|
|
The dashboard SHALL derive scanner, finding, queue, candidate, and validation statistics from PostgreSQL and SHALL label current runtime values separately from period values.
|
|
|
|
#### Scenario: Period contains activity
|
|
- **WHEN** scans and keychecks exist in the selected interval
|
|
- **THEN** the page shows scanned targets, findings, errors, newly alive credentials, current alive credentials, and grouped source/provider results
|
|
|
|
#### Scenario: No period activity exists
|
|
- **WHEN** no matching historical rows exist
|
|
- **THEN** the page renders zero-valued KPIs and clear empty states without falling back to compatibility files
|
|
|
|
### Requirement: Safe unified finding lookup
|
|
The dashboard SHALL locate current validation state and finding origins using a pasted credential, SHA-256 identity, finding ID/UID, masked value, target, path, commit, or other redacted metadata without selecting raw database payload columns.
|
|
|
|
#### Scenario: Raw credential-like value is pasted
|
|
- **WHEN** the operator submits a credential-like value
|
|
- **THEN** the dashboard hashes it in memory and sends only its SHA-256 identity to PostgreSQL
|
|
|
|
#### Scenario: Exact identity is pasted
|
|
- **WHEN** the operator submits a finding ID, finding UID, fingerprint, or SHA-256 identity
|
|
- **THEN** indexed exact predicates locate matching current status and bounded origins independently of reporting filters
|
|
|
|
#### Scenario: Non-secret metadata is pasted
|
|
- **WHEN** the operator submits a sufficiently specific target, path, commit, detector, source, or query fragment
|
|
- **THEN** escaped metadata predicates return bounded redacted matches
|
|
|
|
#### Scenario: Match has validation state
|
|
- **WHEN** a finding or credential is linked to current keycheck state
|
|
- **THEN** the result includes service, provider status, status group, checked time, source, query, target, and available location metadata
|
|
|
|
### Requirement: Read-only safety boundaries
|
|
The simplified dashboard SHALL remain supervisor-authorized, loopback-only, read-only, redacted, and bounded.
|
|
|
|
#### Scenario: Dashboard issues database queries
|
|
- **WHEN** any page section loads or a lookup is submitted
|
|
- **THEN** no mutation statement or forbidden raw payload column is requested
|
|
|
|
#### Scenario: PostgreSQL query fails
|
|
- **WHEN** a query times out or the connection enters an error transaction
|
|
- **THEN** the dashboard rolls back and renders a bounded degraded message instead of failing the process
|
|
|
|
#### Scenario: Dashboard is launched without authority
|
|
- **WHEN** the process lacks canonical supervisor and loopback launch markers
|
|
- **THEN** startup is refused before argument parsing or database access
|