14 KiB
StellaOps Console - Downloads Manager
Audience: DevOps guild, Console engineers, enablement writers, and operators who promote releases or maintain offline mirrors.
Scope:/console/downloadsworkspace covering artifact catalog, signed manifest plumbing, export status handling, CLI parity, automation hooks, and offline guidance (Sprint 23).
The Downloads workspace centralises every artefact required to deploy or validate StellaOps in connected and air-gapped environments. It keeps Console operators aligned with release engineering by surfacing the signed downloads manifest, live export jobs, parity checks against Offline Kit bundles, and automation hooks that mirror the CLI experience.
1 - Access and prerequisites
- Route:
/console/downloads(list) with detail drawer/console/downloads/:artifactId. - Scopes:
downloads.read(baseline) anddownloads.managefor cancelling or expiring stale exports. Evidence bundles inherit the originating scope (runs.read,findings.read, etc.). - Dependencies: Web gateway
/console/downloadsAPI (WEB-CONSOLE-23-005), DevOps manifest pipeline (deploy/downloads/manifest.json), Offline Kit metadata (manifest/offline-manifest.json), and export orchestrator/console/exports. - Feature flags:
downloads.workspace.enabled,downloads.exportQueue,downloads.offlineParity. - Tenancy: Artefacts are tenant-agnostic except evidence bundles, which are tagged with originating tenant and require matching Authority scopes.
2 - Workspace layout
+---------------------------------------------------------------+
| Header: Snapshot timestamp - Manifest signature status |
+---------------------------------------------------------------+
| Cards: Latest release - Offline kit parity - Export queue |
+---------------------------------------------------------------+
| Tabs: Artefacts | Exports | Offline Kits | Webhooks |
+---------------------------------------------------------------+
| Filter bar: Channel - Kind - Architecture - Scope tags |
+---------------------------------------------------------------+
| Table (virtualised): Artifact | Channel | Digest | Status |
| Detail drawer: Metadata | Commands | Provenance | History |
+---------------------------------------------------------------+
- Snapshot banner: shows
manifest.version,generatedAt, and cosign verification state. If verification fails, the banner turns red and links to troubleshooting guidance. - Quick actions: Copy manifest URL, download attestation bundle, trigger parity check, open CLI parity doc (
/docs/cli-vs-ui-parity.md). - Filters: allow narrowing by channel (
edge,stable,airgap), artefact kind (container.image,helm.chart,compose.bundle,offline.bundle,export.bundle), architecture (linux/amd64,linux/arm64), and scope tags (console,scheduler,authority).
3 - Artefact catalogue
| Category | Artefacts surfaced | Source | Notes |
|---|---|---|---|
| Core containers | stellaops/web-ui, stellaops/web, stellaops/concelier, stellaops/excititor, stellaops/scanner-*, stellaops/authority, stellaops/attestor, stellaops/scheduler-* |
deploy/downloads/manifest.json (artifacts[].kind = "container.image") |
Digest-only pulls with copy-to-clipboard docker pull and oras copy commands; badges show arch availability. |
| Helm charts | deploy/helm/stellaops-*.tgz plus values files |
Manifest entries where kind = "helm.chart" |
Commands reference helm repo add (online) and helm install --values (offline). UI links to values matrix in /docs/install/helm-prod.md when available. |
| Compose bundles | deploy/compose/docker-compose.*.yaml, .env seeds |
kind = "compose.bundle" |
Inline diff viewer highlights digest changes vs previous snapshot; docker compose pull command copies digest pins. |
| Offline kit | stella-ops-offline-kit-<ver>-<channel>.tar.gz + signatures and manifest |
Offline Kit metadata (manifest/offline-manifest.json) merged into downloads view |
Drawer shows bundle size, signed manifest digest, cosign verification command (mirrors /docs/24_OFFLINE_KIT.md). |
| Evidence exports | Completed jobs from /console/exports (findings delta, policy explain, run evidence) |
Export orchestrator job queue | Entries expire after retention window; UI exposes stella runs export and stella findings export parity buttons. |
| Webhooks & parity | /downloads/hooks/subscribe configs, CI parity reports |
Manifest extras (kind = "webhook.config", kind = "parity.report") |
Operators can download webhook payload templates and review the latest CLI parity check report generated by docs CI. |
4 - Manifest structure
The DevOps pipeline publishes a deterministic manifest at deploy/downloads/manifest.json, signed with the release Cosign key (DOWNLOADS-CONSOLE-23-001). The Console fetches it on workspace load and caches it with If-None-Match headers to avoid redundant pulls. The manifest schema:
version- monotonically increasing integer tied to pipeline run.generatedAt- ISO-8601 UTC timestamp.signature- URL to detached Cosign signature (manifest.json.sig).artifacts[]- ordered list keyed byid.
Each artefact contains:
| Field | Description |
|---|---|
id |
Stable identifier (<type>:<name>:<version>). |
kind |
One of container.image, helm.chart, compose.bundle, offline.bundle, export.bundle, webhook.config, parity.report. |
channel |
edge, stable, or airgap. |
version |
Semantic or calendar version (for containers, matches release manifest). |
architectures |
Array of supported platforms (empty for arch-agnostic artefacts). |
digest |
SHA-256 for immutable artefacts; Compose bundles include file hash. |
sizeBytes |
File size (optional for export bundles that stream). |
downloadUrl |
HTTPS endpoint (registry, object store, or mirror). |
signatureUrl |
Detached signature (Cosign, DSSE, or attestation) if available. |
sbomUrl |
Optional SBOM pointer (CycloneDX JSON). |
attestationUrl |
Optional in-toto/SLSA attestation. |
docs |
Array of documentation links (e.g., /docs/install/docker.md). |
tags |
Free-form tags (e.g., ["console","ui","offline"]). |
4.1 Example excerpt
{
"version": 42,
"generatedAt": "2025-10-27T04:00:00Z",
"signature": "https://downloads.stella-ops.org/manifest/manifest.json.sig",
"artifacts": [
{
"id": "container.image:web-ui:2025.10.0-edge",
"kind": "container.image",
"channel": "edge",
"version": "2025.10.0-edge",
"architectures": ["linux/amd64", "linux/arm64"],
"digest": "sha256:38b225fa7767a5b94ebae4dae8696044126aac429415e93de514d5dd95748dcf",
"sizeBytes": 187563210,
"downloadUrl": "https://registry.stella-ops.org/v2/stellaops/web-ui/manifests/sha256:38b225fa7767a5b94ebae4dae8696044126aac429415e93de514d5dd95748dcf",
"signatureUrl": "https://downloads.stella-ops.org/signatures/web-ui-2025.10.0-edge.cosign.sig",
"sbomUrl": "https://downloads.stella-ops.org/sbom/web-ui-2025.10.0-edge.cdx.json",
"attestationUrl": "https://downloads.stella-ops.org/attestations/web-ui-2025.10.0-edge.intoto.jsonl",
"docs": ["/docs/install/docker.md", "/docs/security/console-security.md"],
"tags": ["console", "ui"]
},
{
"id": "offline.bundle:ouk:2025.10.0-edge",
"kind": "offline.bundle",
"channel": "edge",
"version": "2025.10.0-edge",
"digest": "sha256:4f7d2f7a8d0cf4b5f3af689f6c74cd213f4c1b3a1d76d24f6f9f3d9075e51f90",
"downloadUrl": "https://downloads.stella-ops.org/offline/stella-ops-offline-kit-2025.10.0-edge.tar.gz",
"signatureUrl": "https://downloads.stella-ops.org/offline/stella-ops-offline-kit-2025.10.0-edge.tar.gz.sig",
"sbomUrl": "https://downloads.stella-ops.org/offline/offline-manifest-2025.10.0-edge.json",
"docs": ["/docs/24_OFFLINE_KIT.md"],
"tags": ["offline", "airgap"]
}
]
}
Console caches the manifest hash and surfaces differences when a new version lands, helping operators confirm digests drift only when expected.
5 - Download workflows and statuses
| Status | Applies to | Behaviour |
|---|---|---|
| Ready | Immutable artefacts (images, Helm/Compose bundles, offline kit) | Commands available immediately. Digest, size, and last verification timestamp display in the table. |
| Pending export | Async exports queued via /console/exports |
Shows job owner, scope, and estimated completion time. UI polls every 15 s and updates progress bar. |
| Processing | Long-running export (evidence bundle, large SBOM) | Drawer shows current stage (collecting, compressing, signing). Operators can cancel if they own the request and hold downloads.manage. |
| Delivered | Completed export within retention window | Provides download links, resume token, and parity snippet for CLI. |
| Expired | Export past retention or manually expired | Row grays out; clicking opens housekeeping guidance with CLI command to regenerate (stella runs export --run <id>). |
Exports inherit retention defaults defined in policy (downloads.retentionDays, min 3, max 30). Operators can override per tenant if they have the appropriate scope.
6 - CLI parity and copy-to-clipboard
- Digest pulls: Each container entry exposes
docker pull <image>@<digest>andoras copy <image>@<digest> --to-dir ./downloadsbuttons. Commands include architecture hints for multi-platform images. - Helm/Compose: Buttons output
helm pull/helm installwith the manifest URL anddocker compose --env-filecommands referencing the downloaded bundle. - Offline kit: Copy buttons produce the full verification sequence:
curl -LO https://downloads.stella-ops.org/offline/stella-ops-offline-kit-2025.10.0-edge.tar.gz
curl -LO https://downloads.stella-ops.org/offline/stella-ops-offline-kit-2025.10.0-edge.tar.gz.sig
cosign verify-blob \
--key https://stella-ops.org/keys/cosign.pub \
--signature stella-ops-offline-kit-2025.10.0-edge.tar.gz.sig \
stella-ops-offline-kit-2025.10.0-edge.tar.gz
- Exports: Drawer lists CLI equivalents (for example,
stella findings export --run <id>). When the CLI supports resume tokens, the command includes--resume-tokenfrom the manifest entry. - Automation: Webhook tab copies
curlsnippets to subscribe to/downloads/hooks/subscribe?topic=<artifact>and includes payload schema for integration tests.
Parity buttons write commands to the clipboard and display a toast confirming scope hints (for example, Requires downloads.read + tenant scope). Accessibility shortcuts (Shift+D) trigger the primary copy action for keyboard users.
7 - Offline and air-gap workflow
- Manifest sync: Offline users download
manifest/offline-manifest.jsonplus detached JWS and import it viastella offline kit import. Console highlights if the offline manifest predates the online manifest by more than 7 days. - Artefact staging: The workspace enumerates removable media instructions (export to
./staging/<channel>/) and warns when artefacts exceed configured media size thresholds. - Mirrors: Buttons copy
oras copycommands that mirror images to an internal registry (registry.<tenant>.internal). Operators can toggle--insecure-policyif the destination uses custom trust roots. - Parity checks:
downloads.offlineParityflag surfaces the latest parity report verifying that Offline Kit contents match the downloads manifest digests. If diff detected, UI raises a banner linking to remediation steps. - Audit logging: Every download command triggered from the UI emits
ui.download.commandCopiedwith artifact ID, digest, and tenant. Logs feed the evidence locker so air-gap imports can demonstrate provenance.
8 - Observability and quotas
| Signal | Source | Description |
|---|---|---|
ui_download_manifest_refresh_seconds |
Console metrics | Measures time to fetch and verify manifest. Targets < 3 s. |
ui_download_export_queue_depth |
/console/downloads API |
Number of pending exports (per tenant). Surfaces as card and Grafana panel. |
ui_download_command_copied_total |
Console logs | Count of copy actions by artifact type, used to gauge CLI parity adoption. |
downloads.export.duration |
Export orchestrator | Duration histograms for bundle generation; alerts if P95 > 60 s. |
downloads.quota.remaining |
Authority quota service | Anonymous users limited to 33 exports/day, verified users 333/day. Banner turns amber at 90 % usage as per platform policy. |
Telemetry entries include correlation IDs that match backend manifest refresh logs and export job records to keep troubleshooting deterministic.
9 - References
/docs/ui/console-overview.md- primary shell, tenant controls, SSE ticker./docs/ui/navigation.md- route ownership and keyboard shortcuts./docs/ui/sbom-explorer.md- export flows feeding the downloads queue./docs/ui/runs.md- evidence bundle integration./docs/24_OFFLINE_KIT.md- offline kit packaging and verification./docs/security/console-security.md- scopes, CSP, and download token handling./docs/cli-vs-ui-parity.md- CLI equivalence checks (pending).deploy/releases/*.yaml- source of container digests mirrored into the manifest.
10 - Compliance checklist
- Manifest schema documented (fields, signature, caching) and sample kept current.
- Artefact categories mapped to manifest entries and parity workflows.
- Download statuses, retention, and cancellation rules explained.
- CLI copy-to-clipboard commands mirror console actions with scope hints.
- Offline/air-gap parity workflow, mirror commands, and audit logging captured.
- Observability metrics and quota signalling documented.
- References cross-linked to adjacent docs (navigation, exports, offline kit).
- Accessibility shortcuts and copy-to-clipboard behaviour noted with compliance reminder.
Last updated: 2025-10-27 (Sprint 23).