| .. | ||
| README.md | ||
Contracts (Spec 086)
This spec does not introduce a new public HTTP API surface.
Canonical OperationRun contract (internal)
Spec 086 tightens and standardizes the internal contract for how operations are created, identified, and displayed.
Run creation contract
- Start surfaces must create the
operation_runsrow before dispatching asynchronous work. - Jobs must receive the
OperationRun(or its id) and must not attempt a fallback-create.
Identity / idempotency contract
Operation run identity is enforced by a partial unique index for active states.
Planned identity rules by type:
inventory.syncanddirectory_groups.sync: deterministic identity (while-active dedupe)backup_schedule.run_nowandbackup_schedule.retry: unique-per-click identity (nonce)backup_schedule.scheduled: deterministic identity by(backup_schedule_id, scheduled_for)(strict)
Context contract (selected keys)
The operation_runs.context JSON is used for:
- “Target” display (via
target_scope) - “Related” deep links (via
OperationRunLinks::related) - provenance (trigger source, schedule id, initiating user)
Keys referenced in existing UI code:
provider_connection_idbackup_schedule_idbackup_schedule_run_idrestore_run_idtarget_scope
Graph Contract Registry
All Microsoft Graph calls remain required to go through GraphClientInterface and be modeled in config/graph_contracts.php.
Spec 086 removes Graph calls from Filament render/search/label callbacks (DB-only rendering), and moves those lookups behind cached tables + asynchronous sync operations.