Identity Watchlist
Implementation Status
- Status:
shippedfor stored definitions and pattern tests; alert history and active monitoring are not available. - Route:
/ops/operations/watchlist(tab state in thetabquery parameter:entriesortuning). - Bookmark redirects:
/setup/trust-signing/watchlistand/setup/trust-signing/watchlist/:subredirect to the route above. - Owner contract: Evidence
/api/evidence/v1/watchlist(list, detail, create, update and delete) and the pattern testPOST /api/evidence/v1/watchlist/{id}/test. The Console client no longer calls the retired predecessor prefix. - Source re-verified 2026-10-09 (CCP-036) against
src/Web/StellaOps.Web/src/app/features/watchlist/andsrc/Evidence/__Libraries/StellaOps.Attestor.Application/WatchlistEndpoints.cs. A deployed Console bundle carries this only after an authorized redeploy; check the served bundle before relying on it.
What the page does
- Entries — list, filter, create, edit, duplicate, enable/disable and delete stored definitions, and run a pattern test of sample issuer, SAN or key ID values against a saved definition.
- Tuning — edit the stored severity, dedup window, channel overrides and enabled state of a selected definition. These values are definition metadata. No monitor currently applies them.
- Scope switcher —
Tenant,Global,System. Global and system writes remain subject to the owner’s administrator check.
Capability boundary (CCP-036)
Evidence composes the disabled entry source and alert publisher and registers no monitor, so no signer identity is evaluated against the definitions and no match is recorded. Evidence maps no alert-history route; the former fixed-empty GET /api/evidence/v1/watchlist/alerts handler was withdrawn. Accordingly the page:
- shows a persistent statement that alert history and active monitoring are not available;
- shows the alert-history metric as unavailable, never as
0; - has no Alerts tab, alert list, alert detail or per-rule alert count;
- does not rank rules by alert volume or show monitoring guidance.
Mission Control > Alerts carries no watchlist card. A durable monitor and alert-history store are separate, unselected work.
Read outcomes
The definition read has four distinct outcomes, and none is rendered as another:
| Outcome | Rendering |
|---|---|
Denied (401/403) | “not readable with this session” (requires trust:read); no rows, no empty-watchlist message |
| Failed (other error) | “could not be loaded” with Retry; metric cards show the error state |
Empty (200, no items) | “No watchlist definitions are stored” with a create action; definition statistics show unavailable, not 0% |
| Loaded | definition rows; a scope or filter with no matches shows a separate filtered-empty message |
The same outcomes apply on the Tuning tab: its average dedup window summary reads “Loading definitions”, “Definition read denied” or “Definition read failed” until a read succeeds, and “No rules in this scope” only after a loaded read with no definitions in the selected scope.
Verification
src/app/features/watchlist/watchlist-page.component.spec.ts(realWatchlistHttpClientagainstHttpTestingControllerfor the read outcomes; tab navigation on the mounted route).src/app/core/api/watchlist.client.spec.ts(canonical routes, no history operation, denied read surfaced as an error).tests/e2e/watchlist-shell.spec.ts(Playwright with stubbed reads; PCD-984, 2026-10-21) targets this route: only the Entries and Tuning tabs, the unavailable statement, the entry form and thetabquery parameter. It seeds the stored session that the Console restores; both cases passed against a source-served Console on 2026-10-21.- The watchlist spec and the watchlist, mission-control and notifications sweeps no longer drive an alerts tab, an alert deep link or the withdrawn alert-history read, and no Web test script or fixture contains the
watchlist/alerts,tab=alerts,listAlerts,watchlist-tab-alertsoralerts-tabpatterns. Known residuals:tests/e2e/security-operations-leaves-cutover.spec.tsstill asserts a “Review watchlist alerts” link on the notifications page and the Mission Alerts link “Identity watchlist alert requires signer review”, andscripts/live-ops-policy-action-sweep.mjsstill clicks “Open watchlist tuning” and “Review watchlist alerts”. The Console renders none of these links. src/app/core/testing/mission-scope-links.component.spec.ts(Mission Alerts has no watchlist link).src/app/features/trust-admin/trust-overview.component.spec.ts(the Trust & Signing watchlist card describes stored definitions and pattern tests, without monitoring or alert claims).- Evidence
WatchlistOwnerHttpContractTestsandEvidenceRouteInventoryTests.
Source Inputs
docs/modules/attestor/guides/identity-watchlist.mddocs/runbooks/general/watchlist-monitoring-runbook.mdsrc/Web/StellaOps.Web/src/app/features/watchlist/watchlist-page.component.tssrc/Web/StellaOps.Web/src/app/routes/operations.routes.tssrc/Web/StellaOps.Web/src/app/features/trust-admin/trust-admin.routes.ts
