Identity Watchlist Definitions

Manage stored signing-identity definitions and test sample identities against them. Definitions and pattern tests do not establish active monitoring or alert history.

Owner contracts were source-reviewed against 14b4a77263 on 2026-10-07. CLI builds carrying PCD-449 use those contracts through the configured backend. Re-verify the registered command with pwsh tools/scripts/test-targeted-xunit.ps1 -Project src/Cli/__Tests/StellaOps.Cli.Tests/StellaOps.Cli.Tests.csproj -Class '*WatchlistOwnerRouteTests' -BuildProjectReferences; verify the composed owner with the WatchlistOwnerHttpContractTests class in the Evidence WebService test project. These checks do not verify an installed CLI image, gateway or production database.

Supported operations

Evidence owns the definitions under /api/evidence/v1/watchlist.

CLI operationOwner requestRequested authority
watchlist addPOST /api/evidence/v1/watchlisttrust:write; the owner accepts a global definition only from administrative authority (trust:admin, watchlist:admin or the admin role) and otherwise returns 403. The stellaops-cli client cannot hold trust:admin, so the CLI does not request it
watchlist listGET /api/evidence/v1/watchlist?includeGlobal=truetrust:read
watchlist getGET /api/evidence/v1/watchlist/{id}trust:read
watchlist updateRead the definition, then PUT /api/evidence/v1/watchlist/{id}trust:write
watchlist removeDELETE /api/evidence/v1/watchlist/{id}trust:write; the owner additionally requires administrative authority for global definitions and refuses system deletion
watchlist testPOST /api/evidence/v1/watchlist/{id}/testtrust:read

Configure the CLI backend and operator credentials first. Requests carry bearer authorization and the resolved tenant header; Evidence enforces token authority and tenant visibility. Definition reads may include global and system definitions. System definitions remain protected by the owner’s lifecycle rules.

Supply at least one identity dimension: issuer, subject alternative name (--san), or key ID. Match modes are exact, prefix, glob, and regex. The owner validates patterns, including regex safety. Severity, enabled state, suppression window, tags, and channel overrides are stored definition metadata. Changing them does not activate a monitoring service.

CLI examples

Create and list definitions:

stella watchlist add --issuer "https://token.actions.githubusercontent.com" --name "GitHub Actions" --format json
stella watchlist add --san "*@example.com" --match-mode glob --name "Example identity" --format json
stella watchlist list --include-global --format json

Use the returned GUID for detail, update, pattern test, and deletion:

stella watchlist get <entry-id> --format json
stella watchlist update <entry-id> --enabled false --format json
stella watchlist test <entry-id> --issuer "https://token.actions.githubusercontent.com" --format json
stella watchlist remove <entry-id>

Updates preserve existing identity fields, scope, tags, and channel overrides. The existing --suppress-duplicates option sets suppression-window metadata, and -s remains the severity alias. List options --severity and --enabled-only filter definitions actually returned by the owner. Deletion requires confirmation unless --force is supplied. JSON output contains the owner data without progress or success text. The pattern response preserves the owner’s numeric matched-field flags; a match describes the supplied sample, not an observed event.

Results and failures

OutcomeCLI exitMeaning
Owner success, including a genuine empty definition list0The configured owner completed the operation
Invalid arguments or owner pattern validation (400)2Correct the input
Missing backend/credentials, offline mode, transport failure or unavailable owner (503)3No successful owner result was obtained
Denied authority (401 or 403)6The caller lacks the required authority
Missing or tenant-hidden definition (404)7The owner did not expose the requested definition
Malformed owner response or another owner failure8No valid successful result was obtained

Failures emit diagnostics on stderr and no definition or match result on stdout. Raw credential-bearing exceptions and problem bodies are not printed. No predecessor-route retry or local sample data supplies a result.

Monitoring boundary

The CLI has no alert-history subcommand, and Evidence maps no alert-history route: CCP-036 withdrew the former handler, which returned fixed empty data, so GET /api/evidence/v1/watchlist/alerts now returns 404. The current Evidence composition does not register the background monitor and uses disabled event-source and alert-publication adapters. The Console Watchlist page states that alert history and active monitoring are unavailable and shows no alert counts. Stored suppression metadata and deduplication rows are not an alert-history store.

Durable monitoring and history remain separate work. Use the monitoring runbook for its explicit implementation limits, and the Evidence architecture for ownership. Do not use monitoring counters, notification examples, or dated pipeline designs as current acceptance evidence.