Unknowns Registry

Verified against commit 942a18727c (2026-09-26). Re-verify with: grep -rnE 'Map(Get|Post|Put|Delete|Group|Methods)\(' src/Unknowns/StellaOps.Unknowns.WebService; grep -n 'unknowns-web:' -A60 devops/release/bundle/docker-compose.yml; ls src/Unknowns/__Libraries/StellaOps.Unknowns.Persistence/Migrations

The estate-wide service, database, compose and bundle wiring is generated in the service inventory; this dossier describes the module and defers to that inventory for the service list.

Status: Implemented (the Grey Queue API is a forward design and answers 501 Not Implemented — see Implementation Status) Source: src/Unknowns/ Deployable: compose service unknowns-web (container ${STELLAOPS_ESTATE_PREFIX:-stellaops}-unknowns-web, image stellaops/unknowns-web, network alias unknowns.stella-ops.local, port 8080; router service name unknowns). It ships in the release bundle (devops/release/bundle/docker-compose.yml) and the local stack (devops/compose/docker-compose.stella-services.yml). Owner: Signals Guild, Policy Guild

Purpose

The Unknowns Registry tracks ambiguities discovered during vulnerability scanning that cannot be definitively resolved — packages without known provenance, binaries without build-IDs/debug symbols, dependencies not covered by any advisory feed, unbounded version ranges, unsupported formats, and gaps in transitive dependency chains. It models “what we don’t know” as first-class, queryable risk signals using bitemporal semantics, then prioritizes them with a composite triage score and surfaces provenance hints to help operators resolve each unknown.

It is a standalone HTTP microservice (not a Policy Engine sub-library): the Unknowns WebService exposes the registry over the Stella Router, persists to its own PostgreSQL database stellaops_unknowns, and auto-migrates on startup.

Components

Service:

Libraries:

Key Features

API Surface

All endpoints are exposed via the Stella Router under the unknowns service. Both route groups call .RequireTenant(): the tenant is resolved only from the envelope-bound stellaops:tenant claim, a missing tenant is rejected with 400 tenant_missing, and the X-Tenant-Id request header is never a tenancy source. Named authorization policies gate access: Unknowns.Read (scope unknowns:read), Unknowns.Write (scope unknowns:write), and Unknowns.DoctorHealth (scope ops.health, doctor surface only).

Unknowns (/api/unknowns, requires unknowns:read)

Grey Queue (/api/grey-queue)

Not operational in a deployed host. No IGreyQueueRepository is registered, so MapGreyQueueEndpoints maps one anonymous catch-all that answers every /api/grey-queue/* request with 501 Not Implemented (title: grey_queue_not_implemented). The routes below are the forward contract; they map automatically once a repository is registered (the WebService test host does so).

Read endpoints require unknowns:read; mutating endpoints require unknowns:write and emit audit events (AuditModules.Unknowns).

Health

Doctor

Domain Model & Enums

Unknown(StellaOps.Unknowns.Core/Models/Unknown.cs) — bitemporal record with subject (SubjectHash, SubjectType, SubjectRef), Kind, optional Severity, source references (SourceScanId/SourceGraphId/SourceSbomDigest), bitemporal columns, resolution tracking, the full scoring breakdown, rescan scheduling, evidence hashes (EvidenceSetHash/GraphSliceHash), audit fields, and provenance hints.

Enums (Unknown.cs):

GreyQueueEntry(StellaOps.Unknowns.Core/Models/GreyQueueEntry.cs) — references an Unknown, carries the DSSE-style evidence bundle (with per-artifact SHA-256 hashes), trigger conditions, processing metadata (attempts / MaxAttempts = 10), and a status workflow.

Enums (GreyQueueEntry.cs):

Configuration

The StellaOps.Unknowns.Services library defines options records (GreyQueueWatchdogOptions, UnknownsSlaOptions) for the SLA/watchdog/lifecycle background services. These are not bound or hosted by the WebService (see Implementation Status), so their keys are not part of the deployed service surface.

Authorization Scopes

Defined in the canonical catalog StellaOps.Auth.Abstractions/StellaOpsScopes.cs:

Storage

There is no grey_queue table in the current migrations, and no concrete IGreyQueueRepository implementation is registered. The Grey Queue domain model, endpoints, and background services exist, but their persistence is not yet wired (see Implementation Status).

Integration Points

Stella Router / Authority: Registered as the unknowns router microservice; authentication via the Stella resource-server integration with scope-based policies and tenant middleware.

Policy: Policy Engine and Policy Gateway call GET /api/unknowns over HTTP from UnknownsGateChecker (src/Policy/__Libraries/StellaOps.Policy/Gates/UnknownsGateChecker.cs), configured by Policy:UnknownsGate:UnknownsApiUrl. No project outside src/Unknowns/ holds a ProjectReference to an Unknowns project.

Audit: Grey Queue mutations emit audit events under AuditModules.Unknowns (enqueue, start_processing, record_result, resolve, dismiss, expire, assign, escalate, reject, reopen).

Notifications: Escalations publish an EscalationNotification through an optional INotificationPublisher; no production implementation is registered today (test stubs only).

Dependencies

Implementation Status

Implemented and wired into the WebService:

Partially implemented (present in source but NOT wired into the deployed WebService):

Key differentiator: Unlike scanners that hide uncertainty, Stella Ops makes “what we don’t know” an explicit, queryable, bitemporal signal with deterministic scoring and provenance hints — important for air-gapped deployments and zero-day scenarios where external validation is unavailable.