Scanner analyzers API
GET /api/v1/scanner/analyzers provides the Console with a truthful analyzer catalog. Its runtime source is Scanner Worker’s canonical signed-plugin probe-report.json, shared read-only with Scanner WebService through the existing scanner-plugin-scratch volume. Tenant enablement is overlaid from the Scanner settings repository.
Authorization and tenancy
- Required policy:
scanner.operations.read, satisfied by canonicalscanner:reador the legacy escape-hatchscanner.admin. - A validated tenant context is required. There is no default-tenant fallback.
Response
{
"source": "scanner-worker-probe-report",
"sourceStatus": "available",
"observedAt": "2026-07-16T19:00:00Z",
"analyzers": [
{
"id": "stellaops.scanner.plugin.ruby",
"kind": "language",
"ecosystem": "ruby",
"enabled": true,
"disabledByTenant": false,
"health": "healthy",
"probeOutcome": "responded",
"profile": "base",
"required": true,
"lastSuccessfulProbeAt": "2026-07-16T19:00:00Z"
}
]
}
Rows are sorted by signed manifest ID. kind is os, language, or unknown; ecosystem is derived from the Scanner signed-bundle ID convention. enabled means the bundle was admitted and loaded and is not disabled by the current tenant. Health and tenant enablement are independent: a healthy analyzer can be disabled for one tenant.
Health is a direct projection, not a synthesized grade:
| Worker probe evidence | health | lastSuccessfulProbeAt |
|---|---|---|
Required acceptance fields true and outcome responded | healthy | Report generatedAt |
Outcome rejected or failed | unhealthy | null |
notMounted, disabled, loaded without a response, unknown, or no report row | unknown | null |
probeOutcome preserves the canonical machine state: unknown, notMounted, disabled, rejected, loaded, responded, or failed.
The Scanner does not currently persist analyzer-level last successful scan execution. The API therefore publishes the evidenced lastSuccessfulProbeAt and does not invent lastSuccessfulRunAt.
Missing or invalid Worker evidence
If the report file is absent, unreadable, malformed, or larger than the configured bounded read size, the endpoint returns 200 with sourceStatus: "unavailable", null observedAt, and no runtime-derived rows. Tenant-disabled IDs remain visible as enabled: false, disabledByTenant: true, and health: "unknown", allowing an operator to reverse a setting even while Worker evidence is unavailable.
Configuration section: scanner:analyzers:readModel.
reportPathdefaults to/var/lib/stellaops/plugin-scratch/scanner/probe-report.json.maximumReportBytesdefaults to 1 MiB.
