Stella CLI: export commands
Verified against commit
942a18727c(2026-09-26):BuildExportCommandinsrc/Cli/StellaOps.Cli/Commands/CommandFactory.csand the command groups it adds. Re-verify withstella export --help.
The stella export command has two kinds of subcommands: offline producers that build and verify a signed bundle locally from files you supply, and service clients for the export plane that offlinekit-web serves under /api/offlinekit/v1/**.
1. Offline producers
These run without a backend and are the supported way to produce the assurance bundles on an air-gapped workstation. Each command verifies the bundle it wrote before reporting success.
| Command | Produces |
|---|---|
stella export nis2-soa | canonical nis2-soa-bundle-v1 NIS2 Statement of Applicability bundle (§1.1) |
stella export nis2-effectiveness | canonical nis2-effectiveness-report-bundle-v1 monthly bundle (§1.2) |
stella export cra-tech-file | CRA Annex VII technical-file bundle |
stella export conformity-dossier | CRA conformity-assessment dossier |
stella export declaration-of-conformity | CRA Annex V EU Declaration of Conformity template, or validation and embedding of an operator-signed DoC |
stella export standards-mapping | signed standards-mapping bundle |
stella export dora-roi | DORA Register of Information bundle |
stella export dora-incident-report | DORA major-incident report bundle |
stella export dora-info-sharing | DORA information-sharing bundle |
The service-side equivalents are listed in profiles.md (Assurance export profile catalogue).
1.1 stella export nis2-soa
stella export nis2-soa \
--since 2026-04-01 \
--snapshot out/policy/nis2-control-register.json \
--tenant tenant-a \
--signing-key-file keys/offline-soa-hmac.key \
--signing-key-id offline-soa-key \
--evidence-locker-bundle-ref evidence-locker://bundles/sha256:... \
--output out/nis2-soa.bundle.json \
--json
--snapshotmust contain anis2-control-register-v1Policy snapshot.--tenant-profilemay contain a localtenant-compliance-profile.v1document withnis2inregulatedRegimes. When it is omitted, the CLI resolves the tenant from--tenant,STELLAOPS_TENANTor the active CLI tenant profile and readsGET /api/v1/tenants/{tenantId}/compliance-profilefrom Authority, which requiresSTELLAOPS_AUTHORITY_URLand a token withauthority:tenants.read.--signing-key-filesupplies the deterministic HMAC key for the DSSE-shaped envelope. This is the file-backed offline slice, not production compliance signing; the service path signs throughICryptoProviderRegistry(see provenance-and-signing.md).--redact-internal-onlyremoves internal descriptions and metadata from exported controls.
1.2 stella export nis2-effectiveness
stella export nis2-effectiveness \
--month 2026-04 \
--report out/platform/nis2-effectiveness-dashboard.json \
--signing-key-file keys/nis2-effectiveness.hmac \
--signing-key-id offline-nis2-effectiveness \
--target-document-ref policy://target-documents/nis2/2026-04 \
--control-register-snapshot-ref policy://control-registers/nis2/2026-04 \
--policy-snapshot-ref policy://snapshots/nis2/2026-04 \
--output out/nis2-effectiveness-tenant-a-202604.bundle.json \
--json
The command consumes a local nis2-effectiveness-dashboard-v1 report (exactly 13 areas numbered 1 through 13) and writes the bundle with the normalized source report, the monthly nis2-effectiveness-report-v1 report, manifest entry hashes and an HMAC DSSE-shaped signature (--signing-key-file or STELLAOPS_NIS2_EFFECTIVENESS_HMAC_KEY). Missing refs are preserved as report blockers rather than synthesized. Verify offline with:
stella verify nis2-effectiveness \
--bundle out/nis2-effectiveness-tenant-a-202604.bundle.json \
--signing-key-file keys/nis2-effectiveness.hmac \
--signing-key-id offline-nis2-effectiveness \
--json
2. Service clients
These commands call the export plane that offlinekit-web serves under /api/offlinekit/v1/exports (see ../offlinekit/api-reference.md), through the gateway at the configured backend URL. The read commands request a token with export.viewer; export start requests export.operator export.viewer. Both carry the CLI’s tenant (STELLAOPS_AUTHORITY_TENANT first) in the token and in the tenant header.
| Command | Options |
|---|---|
stella export profiles list | --limit, --offset, --json |
stella export profiles show <profileId> | --json |
stella export runs list | --profile-id, --limit, --offset, --json |
stella export runs show <runId> | --json; lists the run’s artifacts and their ids |
stella export runs download <runId> | --artifact-id (required), --output (required), --overwrite, --verify-hash |
stella export start | --profile-id (required), --correlation-id, --json |
stella export cache stats, stella export cache process-queue | local evidence cache operations |
The list commands page by offset: the server returns at most 100 items per page (50 by default), and the table output prints the --offset of the next page. export start starts a run from an active profile (POST .../profiles/{profileId}/runs); a draft, paused or archived profile is rejected, and the host can answer 429 when a tenant or profile concurrency limit is reached. export runs download fetches one artifact (GET .../runs/{runId}/artifacts/{artifactId}/download); take the artifact id from export runs show.
Carriers written by export runs are downloaded with stella airgap pull --run <runId> and imported on another estate with stella airgap import (see ../airgap/guides/importer.md).
3. Offline verification of an export kit
docs/modules/export-center/operations/verify-export-kit.sh <kit_dir> checks a kit directory’s manifest hash, rerun hash, integrity headers against OCI annotations, cross-tenant approval and quota blocks, and provenance log metadata. The fixture it is exercised against is src/OfflineKit/__fixtures/export-kit/. See determinism.md for what the service itself emits.
4. Related documentation
The design-era guide to export verbs (profile, run, download, manifest, provenance, verify), exit codes 10 to 30 and the GitHub Actions recipe described commands that do not exist in the CLI and was removed on 2026-09-26; git history holds it.
