elsa-core/specs/001-shell-reload-api/data-model.md
Sipke Schoorstra 21e982c2c6
Add shell reload API endpoints and client support (#7353)
* feat: add specification and quality checklist for Shell Reload API endpoints

* feat: implement Shell Reload API endpoints and associated documentation

* feat: enhance Shell Reload API documentation and add tasks for implementation phases

* feat: implement Shell Reload API features with endpoints, interface contracts, models, and component tests

* feat: update Shell Reload API responses and tests to reflect changes in error handling and response structure

* Fix shell reload follow-up review issues (#7354)

* Initial plan

* Address shell reload review feedback

Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>

* Dispose shell reload semaphore

Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>

* Harden shell reload follow-up fixes

Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Api/Endpoints/Shells/Reload/Endpoint.cs

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Potential fix for pull request finding 'Missed opportunity to use Where'

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Api/Endpoints/Shells/Reload/Endpoint.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sfmskywalker <938393+sfmskywalker@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-09 08:37:11 +01:00

79 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Data Model: Shell Reload API Endpoints
## Entity: Shell Reload Command
- **Purpose**: Represents an administrative request to refresh shell runtime state.
- **Fields**:
- `Scope`: `All` or `Targeted`.
- `RequestedShellId`: optional shell identifier; required when scope is `Targeted`.
- `RequestedAt`: execution timestamp captured for result reporting and diagnostics.
- **Validation rules**:
- `RequestedShellId` is required for targeted commands.
- Shell identifiers are matched case-insensitively to align with `ShellId` semantics in CShells.
## Entity: Shell Reload Result
- **Purpose**: Represents the top-level outcome returned by either reload endpoint.
- **Fields**:
- `Status`: one of `Completed`, `Partial`, `Failed`, `Busy`, `NotFound`, or `RequestedShellFailed`.
- `RequestedShellId`: optional shell identifier echoed for targeted requests.
- `Shells`: collection of `Shell Reload Item Result` records for each affected shell.
- `ReloadedAt`: timestamp indicating when the orchestration completed.
- **Validation rules**:
- `Shells` must be populated for `Completed`, `Partial`, and `RequestedShellFailed` outcomes.
- `RequestedShellId` must be populated for `Targeted` requests.
## Entity: Shell Reload Item Result
- **Purpose**: Describes the shell-level result used to explain a full or targeted reload outcome.
- **Fields**:
- `ShellId`: shell identifier.
- `Outcome`: one of `Reloaded`, `Unchanged`, `Removed`, `InvalidConfiguration`, `Unknown`, or `Skipped`.
- `Requested`: boolean indicating whether this item is the caller’s explicitly requested shell.
- `Message`: optional human-readable detail describing why the shell remained unchanged or failed.
- **Validation rules**:
- Each `ShellId` appears at most once per response.
- `Requested` is true for at most one item.
## Entity: Shell Reload Scope Snapshot
- **Purpose**: Internal planning concept representing the latest provider settings compared with the current cache before orchestration runs.
- **Fields**:
- `CurrentShellIds`: current in-memory shell identifiers from the settings cache.
- `LatestShellSettings`: latest shell settings from the provider.
- `MissingShellIds`: current shells absent from the latest provider view.
- **Why it matters**: The orchestration needs this snapshot to distinguish updates, additions, removals, unknown shell requests, and unchanged shells.
## State Transitions
### Full Reload Command
`Pending` → `Completed`
when all affected shells refresh successfully.
`Pending` → `Partial`
when at least one shell refreshes successfully and at least one shell remains unchanged because of invalid configuration or a shell-specific failure.
`Pending` → `Busy`
when another reload is already in progress.
`Pending` → `Failed`
when the shell settings provider cannot supply usable configuration for the operation.
### Targeted Reload Command
`Pending` → `NotFound`
when the requested shell ID does not exist in the authoritative configuration view.
`Pending` → `Busy`
when another reload is already in progress.
`Pending` → `Completed`
when the current full-reload fallback completes and the requested shell refreshes successfully.
`Pending` → `RequestedShellFailed`
when the fallback full reload updates some shells but the requested shell remains unchanged because its updated configuration could not be applied.
`Pending` → `Failed`
when the shell settings provider cannot supply usable configuration for the operation.