Skip to content

CAP-PFM-SEC-004Manage a workspace retirement request

Markdown

CAP-PFM-SEC-004

Manage a workspace retirement request

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleSecurity, Customers and WorkspacesRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Staff can review, hold or cancel a pending retirement.The start of destruction rechecks current safety conditions.A retained request explains the removal after the workspace is gone.
Surfaces
apijob
Intent sources
services-platform:docs/tenants/tenant-lifecycle-plan.md#5. Deletionservices-platform:docs/tenants/tenant-lifecycle-plan.md#13 (D1, D2, D3, D4)services-platform:docs/tenants/tenant-lifecycle-plan.md#Acceptance checkpoints (2026-10-10 Final acceptance)

Controls

34 controls apply, from the corpus control catalogue.

TC-AVL-001 TC-AVL-004 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-DAT-001 TC-DAT-003 TC-DAT-004 TC-DAT-006 TC-IAM-001 TC-IAM-002 TC-IAM-003 TC-IAM-004 TC-IAM-005 TC-IAM-006 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-MON-002 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.tenants.deletion-requestapiglobal
platform.tenants.deletion-holdapiglobal
platform.tenants.deletion-cancelapiglobal
platform.tenants.deletion-readapiglobal

Business Rules

13 rules, 12 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
Deletion requests and their hold, release, cancellation, read and recovery actions each require staff permission; customer administrators cannot perform them, and no immediate-delete action is available.
no proof recorded yet
permissionapitest
02must prove
Proposed
Requesting deletion requires disabled status, active or failed-provisioning lifecycle, no lock or sandboxes, a workspace outside the protected development set, exact name confirmation, a 10–2,000-character reason and the version read.
no proof recorded yet
validationapi, servicetest
services-platform:modules/tenants/tests/integration/services/deletion/request-deletion.integration.spec.js#refuses a tenant that is still live, because people must lose access first
03must prove
Proposed
Only one open deletion request may exist per workspace; cancellation permits a later request with a new identity and waiting period.
origin: services-platform:docs/tenants/tenant-lifecycle-plan.md#5.7 Duplicate, stale and repeated requests
no proof recorded yet
invariantservice, databasetest
04must prove
Proposed
The request fixes its eligibility date using the workspace calendar: normally thirty days, one day if never activated, and minutes only for disposable non-production workspaces; production configuration below fourteen days is refused.
no proof recorded yet
calculationservicetest
services-platform:modules/tenants/tests/integration/services/deletion/request-deletion.integration.spec.js#fixes the date destruction may begin, thirty days on by the calendar of the tenant zone
05must prove
Proposed
Staff notices accompany request creation, reminders, holds, releases, cancellation, destruction and outcomes; destruction requires delivery of the request notice and one-day reminder and keeps waiting when delivery fails.
no proof recorded yet
policyservicetest
services-platform:modules/tenants/tests/integration/services/deletion/tenant-deletion-schedule.integration.spec.js#holds the deletion indefinitely when a notice could not be delivered, rather than destroying the tenant unannounced
06must prove
Proposed
A reasoned hold blocks progress without changing the eligibility date; release within three days of eligibility or after it gives a further three days and schedules another one-day reminder.
no proof recorded yet
calculationservicetest
07must prove
Proposed
Cancellation before destruction restores active lifecycle but preserves disabled status; cancellation after destruction starts fails.
origin: services-platform:docs/tenants/tenant-lifecycle-plan.md#5.4 Cancellation and the point of no return
no proof recorded yet
lifecycleservicetest
services-platform:modules/tenants/tests/integration/services/deletion/deletion-holds.integration.spec.js#leaves the tenant disabled: calling off a deletion restores nobody access
08must prove
Proposed
Destruction rechecks eligibility, gating notices, request state, disabled status, absence of locks and sandboxes and the requester’s current authority; lost requester authority puts the request on hold.
origin: services-platform:docs/tenants/tenant-lifecycle-plan.md#5.4 Cancellation and the point of no return
no proof recorded yet
policyservicetest
services-platform:modules/tenants/tests/integration/services/deletion/begin-destruction.integration.spec.js#holds the request in that case, so a person has to look at it rather than a job retrying forever
09must prove
Proposed
Concurrent cancellation and destruction serialize so that one outcome wins without leaving partially updated lifecycle state.
no proof recorded yet
invariantservice, databasetest
10must prove
Proposed
Recovery can restart a stopped schedule without advancing eligibility and can restart purge only after purge failure.
no proof recorded yet
policyservicetest
services-platform:modules/tenants/tests/e2e/tenant-deletion-recovery.e2e.spec.js#leaves the request scheduled, and its eligibility exactly where it was: a resume cannot bring a deletion forward
11must prove
Proposed
The deletion request retains workspace and customer identity, actors, reasons and removal counts after workspace removal, and the retired workspace identifier remains unavailable for reuse.
origin: services-platform:docs/tenants/tenant-lifecycle-plan.md#5.10 What remains after deletion
no proof recorded yet
invariantservice, databasetest
services-platform:modules/tenants/tests/integration/services/deletion/request-deletion.integration.spec.js#copies the tenant name and customer, so the record still reads after the tenant is gone
12
Proposed
Staff can page through requests by state or workspace, inspect notices and progress, and receive no more than 100 requests per page.
policyapi, servicetest
13must prove
Proposed
The product should add a reasoned security-audit event for deletion recovery; the inspected recovery path does not currently write that event.
no proof recorded yet
policyserviceunknown

Scenarios

IdGivenWhenThenProvenance
01A previously used training workspace is disabled.An authorized Rhythm Administrator requests removal with the exact workspace name and a reason.The request becomes eligible after the thirty-day wait, moves lifecycle to pending deletion and schedules staff notification.test
02The customer asks staff to stop a scheduled retirement.Support holds the request and an authorized administrator cancels it.Lifecycle returns to active while disabled status remains until a separate re-enabling decision.test
services-platform:modules/tenants/tests/e2e/tenant-deletion-requests.e2e.spec.js#leaves the tenant disabled: calling off a deletion restores nobody access

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.