feat: app home and anomaly alerts (phase e) #9

Merged
KofTwentyTwo merged 3 commits from feature/app-home into develop 2026-10-14 12:16:04 +00:00
KofTwentyTwo commented 2026-10-14 02:31:03 +00:00 (Migrated from github.com)

Summary

Phase (e) of secured data (spec §7.4, §8). It is stacked on #8; once #8 merges, this PR's diff shrinks to the phase (e) commits.

  • App home: one home for the "Secured Data" app, owning its data.

    • KPIs: reveals today, active reveal grants, active break-glass sessions, anomaly flags (7 days), denied filters (7 days) and access-log queue drops.
    • Full-width tables, each with "View all": recent reveals, top revealers, top reasons, break-glass events, policy and classification changes, and anomaly flags.
    • Empty states; real data only.
  • Nav: Classification, Policy, Access log, Break-glass sessions. Reveal grants appear only as a child list.

  • Anomalies: three triggers raise secured_data.anomaly through the alerts SPI and flag the log row:

    • reveals above 3× the user's 30-day daily median (at least 10 that day);
    • reveals of more than 20 distinct records in an hour;
    • exact-match search volume.

    Break-glass sessions are flagged too. Thresholds are configurable.

  • Policy and classification changes are recorded through table customizers, and new access-log indexes are added to the DDL.

  • SecuredDataDemoServer (test scope) is a local memory-backed demo with bundled Next. It uses MOCK auth.

Tests

  • RC.5: 69 tests, 0 failures, 4 skipped (the core integration tests).
  • Core snapshot with -Duiapi=true: 72 tests, 0 failures.

Screenshots

Captured locally from the demo (light and dark at 390, 768, 1024, 1440, 1920 and 3200 px) for the home, the access log and the policy list, in R:/Git.Local/QRunIO/secured-data-shots/home/ (36 files). There is no horizontal page scroll at any width. Tables stack into labelled cards at narrow widths.

🤖 Generated with Claude Code

## Summary Phase (e) of secured data (spec §7.4, §8). It is stacked on #8; once #8 merges, this PR's diff shrinks to the phase (e) commits. - **App home:** one home for the "Secured Data" app, owning its data. - KPIs: reveals today, active reveal grants, active break-glass sessions, anomaly flags (7 days), denied filters (7 days) and access-log queue drops. - Full-width tables, each with "View all": recent reveals, top revealers, top reasons, break-glass events, policy and classification changes, and anomaly flags. - Empty states; real data only. - **Nav:** Classification, Policy, Access log, Break-glass sessions. Reveal grants appear only as a child list. - **Anomalies:** three triggers raise `secured_data.anomaly` through the alerts SPI and flag the log row: - reveals above 3× the user's 30-day daily median (at least 10 that day); - reveals of more than 20 distinct records in an hour; - exact-match search volume. Break-glass sessions are flagged too. Thresholds are configurable. - Policy and classification changes are recorded through table customizers, and new access-log indexes are added to the DDL. - `SecuredDataDemoServer` (test scope) is a local memory-backed demo with bundled Next. It uses MOCK auth. ## Tests - RC.5: 69 tests, 0 failures, 4 skipped (the core integration tests). - Core snapshot with `-Duiapi=true`: 72 tests, 0 failures. ## Screenshots Captured locally from the demo (light and dark at 390, 768, 1024, 1440, 1920 and 3200 px) for the home, the access log and the policy list, in `R:/Git.Local/QRunIO/secured-data-shots/home/` (36 files). There is no horizontal page scroll at any width. Tables stack into labelled cards at narrow widths. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.