---
id: JNY-PFM-OPS-004
title: Rhythm staff withdraw and restore application access
feature: FEAT-PFM-OPS-03
product_area: platform
module: operations
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
actor: ACT-PFM-004
goal: Record and reverse a deliberate application withhold while keeping customer explanations appropriate.
capabilities:
  - CAP-PFM-OPS-013
  - CAP-PFM-OPS-011
  - CAP-PFM-OPS-014
  - CAP-PFM-OPS-016
  - CAP-PFM-OPS-015
screens:
  - '/hq/tenants/{tenantId}'
  - '/console/{tenantId}/configuration'
steps:
  - 'n': 1
    surface: '/hq/tenants/{tenantId}'
    action: Inspect the workspace licensing section in HQ.
    capability: CAP-PFM-OPS-013
    expected: Readable states and authors explain its applications and decision history.
    provenance: test
    source: >-
      react-console:e2e/dev/hq-licensing.dev.spec.ts#the panel lists the Fictional Association's applications,
      names every author and folds the past overrides away
  - 'n': 2
    surface: createTenantLicenceOverride
    action: Record an explained Withhold Override.
    capability: CAP-PFM-OPS-011
    expected: The staff view reflects the saved withhold and its reason.
    provenance: test
    source: >-
      react-console:e2e/dev/hq-licensing.dev.spec.ts#the licensing panel withholds an application on the
      development tenant with a reason, and revokes it
  - 'n': 3
    surface: job
    action: Request invalidation after the commercial write.
    capability: CAP-PFM-OPS-014
    expected: The committed decision has a submitted flush request whose completion remains asynchronous.
    provenance: observed
    source: 'services-platform:modules/licensing/services/enablement/grant-licence-override.ts:grantLicenceOverride'
  - 'n': 4
    surface: '/console/{tenantId}/configuration'
    action: Inspect Applications as the customer administrator.
    capability: CAP-PFM-OPS-016
    expected: The customer view presents the application as not licensed without the internal withhold explanation.
    provenance: test
    source: >-
      react-console:e2e/dev/hq-licensing.dev.spec.ts#the tenant's own administrator reads Configuration ›
      Applications with the same words
  - 'n': 5
    surface: '/console/{tenantId}'
    action: Follow an existing application link from the customer workspace.
    capability: CAP-PFM-SEC-007
    expected: >-
      When the refreshed context reflects the refusal, the unavailable application is omitted from navigation
      and its entry is refused.
    provenance: test
    source: >-
      react-console:e2e/mock/application-access.mock.spec.ts#a deep link into one of them says the application
      isn't available
  - 'n': 6
    surface: revokeTenantLicenceOverride
    action: Withdraw the withhold decision.
    capability: CAP-PFM-OPS-011
    expected: History retains its revocation and otherwise eligible coverage can govern again.
    provenance: test
    source: >-
      react-console:e2e/dev/hq-licensing.dev.spec.ts#the licensing panel withholds an application on the
      development tenant with a reason, and revokes it
alternates:
  - from_step: 2
    condition: A first grant addresses an application with no operational record.
    path: Attempt its preparation after saving the decision.
    outcome: Preparation records enabled or an explained failure without discarding the grant.
    provenance: test
    source: >-
      services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#ends
      as provisioning_failed rather than throwing, so the decision that caused it survives
failures:
  - from_step: 2
    condition: A customer-workspace grant omits expiry.
    path: Block the dialog and reject the invalid grant at the service.
    outcome: No commercial decision is saved.
    provenance: test
    source: >-
      services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#refuses a grant on a customer tenant
      that does not say when it ends, with 400
  - from_step: 1
    condition: Staff have readership without management authority.
    path: Omit panel actions and refuse write requests.
    outcome: The existing decision state remains intact.
    provenance: test
    source: >-
      services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#refuses a staff member holding only
      hq.licensing.read on a write, with 403
rules_in_play:
  - BR-CAP-PFM-OPS-011-04
  - BR-CAP-PFM-OPS-011-06
  - BR-CAP-PFM-OPS-011-07
  - BR-CAP-PFM-OPS-014-02
  - BR-CAP-PFM-OPS-016-02
  - BR-CAP-PFM-OPS-013-04
assertions:
  - id: AS-JNY-PFM-OPS-004-01
    statement: Customer application responses hide internal withhold reasons and staff attribution.
    provenance: test
    source: >-
      services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#says a withheld application is
      simply not licensed, never that Rhythm withheld it
  - id: AS-JNY-PFM-OPS-004-02
    statement: Completed withhold and revocation flows attempt the correctly directed security-history entries.
    provenance: test
    source: >-
      services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#records
      the revocation of a withhold as a widening, because it gives the application back
  - id: AS-JNY-PFM-OPS-004-03
    statement: >-
      Completed staff licence changes request invalidation, with cache expiry remaining fallback if
      asynchronous flush execution fails.
    provenance: observed
    source: >-
      services-platform:modules/licensing/services/enablement/grant-licence-override.ts:withdrawLicenceOverride
e2e_policy: required
e2e_reason: >-
  Staff and customer surfaces explain related states differently, so browser coverage must accompany the
  authorization and decision evidence.
proved_by: []
---

# Rhythm staff withdraw and restore application access

## Story

Rhythm staff inspect the workspace’s licensing, save an explained withhold and later withdraw it. The customer administrator sees an appropriately simplified account in Applications. Authorization refresh is requested after the saved decision rather than proved complete by that response. Reversing the commercial exception restores only access that the remaining licence and operational inputs permit.
