Skip to content

CAP-PFM-OPS-015Prepare and operate workspace applications

Markdown

CAP-PFM-OPS-015

Prepare and operate workspace applications

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleOperational RecordsRevision1

Read atservices-platform ad3f6a65

The Formal Contract

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

Outcomes
Preparation and staff changes leave an explainable operational record.Suspension and resumption preserve prepared information.
Surfaces
consoleapijob
Preconditions
The staff caller holds HQ licensing-management authority for an operational action.
Postconditions
The workspace retains a single operational record for each prepared application.
Constraints
Application preparation runs synchronously and relies on lifecycle participants’ idempotent seed handling.
Intent sources
services-platform:docs/proposals/application-access-and-entitlements.md#6.2 (operational states; built and accepted 2026-10-15)services-platform:docs/proposals/application-access-and-entitlements.md#10.2 Later (D5: automatic initialization on licence; default taken)

Controls

37 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-AZ-006 TC-CHG-001 TC-CHG-002 TC-CHG-003 TC-CHG-004 TC-CHG-005 TC-CHG-006 TC-DAT-001 TC-DAT-003 TC-DAT-004 TC-IAM-001 TC-IAM-003 TC-IAM-006 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-MON-001 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
hq.licensing.manageapiglobal

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Application preparation records provisioning before running workspace participants and then records enabled or a participant-specific failure, without undoing the triggering commercial decision; enabled applications need no repeat preparation.
lifecycleservicetest
02must prove
Confirmed
Retry requires failed preparation, suspend requires enabled state and resume requires suspension, with absent operational records and invalid starting states refused.
validationservicetest
03must prove
Confirmed
Suspended and failed-preparation states require reasons, while enabled and provisioning states clear reasons; an unexplained suspension is refused.
validationapi, service, databasetest
services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#refuses a suspension with no reason, with 400
04must prove
Confirmed
Suspending and resuming retain application data and the original first-enabled timestamp.
invariantservicetest
services-platform:modules/licensing/tests/integration/services/persistence/tenant-applications.integration.spec.js#keeps the instant it was first enabled through a suspension and a resumption
05must prove
Confirmed
Staff state-change services request a flush after committing and routes then attempt audit insertion, so failures in later work do not undo state changes; rejected transitions request no flush.
policyserviceobserved
06must prove
Confirmed
Provisioning activation and deployment backfill add missing always-available operational rows without changing existing rows, including suspensions.
origin: services-platform:docs/licensing.md#6. Where the rows come from
lifecycleservice, databasetest
services-platform:modules/licensing/tests/integration/services/persistence/tenant-applications.integration.spec.js#leaves a suspended row suspended, so a redeploy never undoes an operational decision
07must prove
Confirmed
Staff application-state actions require licensing-management authority and refuse read-only staff.
permissionapitest
services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#refuses a staff member who may only read, with 403
08
Confirmed
Concurrent state writers resolve an insertion collision on one shared row, without thereby serializing participant execution or protecting the entire transition.
invariantservice, databaseobserved
09must prove
Confirmed
Workspace purge includes its licence overrides and application states in the licensing participant’s declared resources.
lifecycleservice, databaseobserved
10must prove
Confirmed
Operational services check their starting state before the writer obtains its row lock, allowing a concurrent action to overwrite a newer state decision.
no proof recorded yet
invariantserviceobserved

Scenarios

IdGivenWhenThenProvenance
01An application participant is unable to finish workspace preparation.Preparation runs and is attempted again after the participant is repaired.The failed attempt retains an explanation and a successful subsequent attempt records enabled.inferred
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#succeeds when it is retried after the participants would run, which is the enabled path of the same call
02A licensed application is operationally enabled.Staff suspend it with a reason and later resume it.Operational standing changes without deleting data, with audit attempts and cache invalidation following the staff actions.inferred

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.