stella estate placements — Command Guide

Audience: administrators who read the managed-placement count of an Installation. Scope: reading the count, what it includes and leaves out, and the API operations that end a placement or declare one the product does not detect.

Checked against src/Cli/StellaOps.Cli/Commands/EstateCommandGroup.cs and src/ReleaseOrchestrator/__Apps/StellaOps.ReleaseOrchestrator.WebApi/Endpoints/ManagedPlacementEndpoints.cs on 2026-10-29 (SPRINT_20261027_003 PLC-5). Re-run the command tests with pwsh ./tools/scripts/test-targeted-xunit.ps1 -Project src/Cli/__Tests/StellaOps.Cli.Tests/StellaOps.Cli.Tests.csproj -Class '*EstatePlacementsCommandTests' -BuildProjectReferences.

The LICENSE (Additional Use Grant §2) counts Placements: one managed workload in one environment. The rules the product applies, and the limits of what it detects today, are in the Release Orchestrator dossier, Managed placement (licence count).

stella estate placements

stella estate placements [--installation] [--json]
OptionDescription
--installationCount every tenant of the Installation. Requires the ops.admin scope in addition.
--jsonPrint the service response as JSON.

The command reads GET /api/v1/release-orchestrator/estate/placements from the Release Orchestrator. Without --installation it counts the signed-in tenant and requests release:read; with --installation it requests release:read ops.admin. A 403 response is printed with its body, for example installation_scope_requires_ops_admin.

Sample output for one tenant (illustrative values):

$ stella estate placements
Managed placements, tenant acme: 4 total (3 recorded, 2 declared; a pair both recorded and declared counts once)
Counted signals:     applied-scan-result, deployment, scan-of-installed-image
Not counted signals: agent-observed-container, gate-or-promotion, node-change
  gate-or-promotion keeps an already recorded placement active but creates none; declare a workload that is only gated or promoted.
Not the definitive licence total: the product does not count every detection signal yet. Declare the placements it cannot detect (supplementary declarations); the total counts each (environment, workload) pair once.

TENANT  ENVIRONMENT            RECORDED  DECLARED  TOTAL
------  ---------------------  --------  --------  -----
acme    development (env-dev)  1         0         1
acme    gate-only (env-gate)   0         1         1
acme    production (env-prod)  2         1         2

TENANT  ENVIRONMENT  WORKLOAD  SOURCE             SIGNALS                              LAST SIGNAL
------  -----------  --------  -----------------  -----------------------------------  --------------------
acme    development  api       recorded           deployment                           2026-10-29 08:00:00Z
acme    gate-only    batch     declared           -                                    2026-10-29 09:30:00Z
acme    production   api       recorded+declared  deployment, scan-of-installed-image  2026-10-29 10:00:00Z
acme    production   worker    recorded           applied-scan-result, deployment      2026-10-29 11:00:00Z

How to read it:

What is not counted

A workload stays counted after it leaves an environment’s latest deployment, after a rollback, and when observation stops: only an explicit retirement ends a placement.

End or declare a placement

The CLI only reads. The Console offers the three operations: Setup > Usage lists the placements of the signed-in tenant with Retire on a recorded placement, Withdraw on a declared one and a Declare placement action. Each operation needs orch:operate, takes a mandatory reason (at most 2000 characters) and is audited.

OperationEndpointBody
Retire a placement whose management endedPOST /api/v1/release-orchestrator/estate/placements/retireenvironmentId, workload, reason
Declare a placement the product does not detectPOST /api/v1/release-orchestrator/estate/placements/declarationsenvironmentId, workload, reason, optional environmentName
Withdraw a declarationPOST /api/v1/release-orchestrator/estate/placements/declarations/withdrawenvironmentId, workload, reason

Use the environment ids that the read reports. A later deployment, gate decision, scan of the installed digest or applied scan result counts a retired workload again; a workload that stays in an environment’s current deployment is still managed, so deploy a release without it before you retire it. The responses and status codes are in the Release Orchestrator API reference.