TorbatYar/docs/reference/published-action-registry.md
2026-07-28 20:39:10 +03:30

100 lines
3.2 KiB
Markdown

# Published Action Registry — Contract
> **Documentation contract only.** No Action Registry database or APIs are implemented.
> Architecture: [published-resource-architecture.md](../architecture/published-resource-architecture.md) · [ADR-022](../architecture/adr/ADR-022.md)
> Contract version: `published-action.v1` (additive; open registry)
---
## 1. Purpose
Every **Published Resource** may expose zero or more **Published Actions**. Actions are **service-independent** contracts: the owning business service registers and executes the action; Experience owns presentation/publishing metadata that *references* actions by `action_key` + `publish_id`.
Future services register new actions **without modifying Experience**.
---
## 2. Action Registry entry
| Field | Meaning |
| --- | --- |
| `action_key` | Stable string key (open registry) |
| `display_name` | Human label (localizable later) |
| `owning_service` | Service that owns business execution |
| `permission` | Permission string required to invoke (or public sentinel) |
| `capability` | Capability / feature discovery key |
| `feature_toggle` | Optional toggle key coordinating enablement |
| `supported_resource_types` | Open list of `resource_type` keys (or `*` for any) |
Logical record (no schema):
```
PublishedActionDefinition {
action_key
display_name
owning_service
permission
capability
feature_toggle?
supported_resource_types[]
}
```
Binding to a resource (conceptual):
```
PublishedResourceAction {
publish_id
action_key
enabled
config_ref? # opaque; owned by owning_service
}
```
---
## 3. Open action keys (examples only — not closed)
| Example `action_key` | Typical owning_service |
| --- | --- |
| `view` | experience |
| `submit` | experience / crm |
| `book` | booking / sports_center / hospitality |
| `reserve` | hospitality / sports_center |
| `pay` | payment |
| `donate` | payment |
| `register` | experience / crm / sports_center |
| `download` | experience / storage |
| `open_chat` | live_chat / communication |
| `send_message` | communication |
| `share` | experience |
| `copy_link` | short_link / experience |
| `generate_qr` | qr / experience |
| `scan_qr` | qr |
| `call` | communication |
| `navigate` | experience |
| `add_to_calendar` | experience |
| `automation_trigger` | automation |
| `webhook_trigger` | automation |
| *future.*\* | any registered service |
The registry **MUST remain open**. New keys do not require Experience code changes.
---
## 4. Rules
1. Actions are described **only by contracts** until a registered implementation phase.
2. Invocation from public surfaces passes **`publish_id`** + `action_key` (+ tenant context).
3. Experience **must not** own Payment capture, OTP delivery, Loyalty membership evaluation, or Identity authentication for actions.
4. Capability discovery MAY advertise available action keys per `publish_id` (additive; not implemented here).
5. Backward compatible: existing Published Resource contracts remain valid with zero actions.
---
## 5. Related
- [Public Access Contract](public-access-contract.md)
- [Embed Contract](embed-contract.md)
- [Published Resource Contracts](published-resource-contracts.md)