---
id: STATE-PFM-INT-017
title: Extension handler standing
object: DOM-PFM-INT-005
product_area: platform
module: integrations
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
states:
  - name: active
    meaning: The handler may participate when an eligible binding resolves.
  - name: disabled
    meaning: Bindings referencing this handler do not select it for invocation.
transitions:
  - from: active
    to: disabled
    trigger: Disable the handler
    guard: >-
      The actor has authority for the handler kind and supplies the current version; update locking permits
      the edit
    side_effects:
      - Commit status and security audit together; existing bindings remain.
    who: Handler administrator
    provenance: observed
    source: 'services-platform:modules/extensions/services/persistence/extension-handlers.ts:updateExtensionHandler'
  - from: disabled
    to: active
    trigger: Enable the handler
    guard: >-
      The actor has authority for the handler kind and supplies the current version; update locking permits
      the edit
    side_effects:
      - Commit status and security audit together so eligible bindings can select it again.
    who: Handler administrator
    provenance: observed
    source: 'services-platform:modules/extensions/services/persistence/extension-handlers.ts:updateExtensionHandler'
invalid: []
concurrency: >-
  Edits lock the handler and compare the supplied record version. Same-standing edits are allowed. Deletion
  removes an unlocked, unreferenced handler rather than moving it into another standing.
invariants:
  - INV-DOM-PFM-INT-005-08
evidence:
  - 'services-platform:modules/extensions/lifecycle.ts:HANDLER_TRANSITIONS'
  - 'services-platform:modules/extensions/db/extension-handlers.table.ts:EXTENSION_HANDLER_STATUSES'
  - 'services-platform:modules/extensions/services/persistence/extension-handlers.ts:updateExtensionHandler'
---

# Extension Handler Standing

## The Lifecycle

```mermaid
stateDiagram-v2
  active --> disabled: Disable
  disabled --> active: Enable
```

## Transitions Explained

A handler moves freely between active and disabled. Disabling preserves the handler and its bindings but excludes it from resolution; reenabling restores eligibility under ordinary binding checks.

## What Cannot Happen

No retired or orphaned handler standing exists. Those concepts belong to declarations and bindings. Deletion is a separate operation and is refused while any binding references the handler.

## Concurrency and Timing

Edits lock the handler and compare the supplied record version. Same-standing edits are allowed. Deletion removes an unlocked, unreferenced handler rather than moving it into another standing.
