---
id: ADR-PFM-OPS-013
title: 'Availability is licence and readiness together, computed once and enforced by the dispatcher'
product_area: platform
module: operations
revision: 1
status: proposed
design_intent: confirmed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
decision: >-
  Compute availability from licence and readiness, bypass readiness for applications needing no licence, and
  use the shared rule for presentation and access.
constrains:
  - DOM-PFM-OPS-003
  - DOM-PFM-OPS-004
  - WF-PFM-OPS-016
  - SVC-PFM-OPS-licensing
origin: >-
  services-platform:docs/proposals/application-access-and-entitlements.md#10.1 (D1, D10, D11);
  docs/licensing.md#2 (Andrew, 2026-10-13: "enforce everywhere")
alternatives:
  - option: Independent licence checks in every service
    why_not: Independent checks would duplicate commercial rules and expose more services to licensing data.
  - option: Gateway-only refusal
    why_not: A cached gateway answer alone would preserve stale decisions without dispatcher enforcement.
  - option: Invalidate caches synchronously in the decision write
    why_not: A committed licensing decision should not depend on gateway invalidation succeeding.
consequences:
  - 'Platform, Rhythm HQ and Contacts & Organizations bypass the dispatcher licence step.'
  - A missing enforcement setting leaves the function in its permissive default mode.
  - 'Cached decisions ordinarily expire within about ninety seconds, including the request-context allowance.'
supersedes: []
evidence:
  - >-
    services-platform at ad3f6a6: modules/licensing/services/availability/application-availability.ts;
    aws/platform.names.ts (PLATFORM_LICENSING_MODE); docs/licensing.md §1, §9.
  - >-
    codex examination 2026-10-23: checked the pinned source anchors, planning references and enforcement
    boundaries; unresolved limits are recorded in module findings.
---

# Availability is licence and readiness together, computed once and enforced by the dispatcher

## Context

The console and request handler need compatible answers about application access.

## Decision

Use the common commercial-and-operational rule for screen answers and the authorization query. Enforce the signed availability at dispatch when configured, and request cache refresh after changes.

## Alternatives Considered

Per-service logic invites divergence. Gateway-only checks lack dispatcher enforcement. Synchronous invalidation would couple persistence to gateway availability.

## Consequences

The design shares the rule but retains explicit cache and configuration boundaries.
