TenantAtlas/specs/059-unified-badges/data-model.md
ahmido 0b6600b926 059-unified-badges (#71)
## Summary
- centralize all status-like badge semantics via `BadgeCatalog`/`BadgeRenderer` and new per-domain mappings plus coverage for every affected entity
- replace ad-hoc badge colors in Filament tables/views with the shared catalog and add a guard test that blocks new inline semantics
- stabilize restore views by avoiding `@php(...)` shorthand so Blade compiles cleanly, and document BADGE-001 in the constitution/templates

## Testing
- `vendor/bin/sail php vendor/bin/pint --dirty`
- `vendor/bin/sail artisan test tests/Unit/Badges tests/Feature/Guards/NoAdHocStatusBadgesTest.php`
- `vendor/bin/sail artisan test tests/Feature/Monitoring/OperationsDbOnlyTest.php tests/Feature/Monitoring/OperationsTenantScopeTest.php`
- `vendor/bin/sail artisan test tests/Feature/RestoreRunWizardMetadataTest.php tests/Feature/Filament/SettingsCatalogRestoreApplySettingsPatchTest.php`

Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local>
Reviewed-on: #71
2026-01-22 23:44:51 +00:00

67 lines
2.3 KiB
Markdown
Raw Permalink 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 — Unified Badge System (Single Source of Truth) v1
This feature is UI-only. It introduces no database schema changes.
## Entities (existing)
### Tenant
- **Role**: scope boundary for all queries and UI rendering.
- **Status-like fields used**:
- `status` (for example, `active`, `archived`)
- `is_current` (boolean)
### OperationRun
- **Role**: canonical operations/run observability.
- **Status-like fields used**:
- `status` (`queued|running|completed`)
- `outcome` (for example, `pending|succeeded|partial|failed|cancelled|...`)
### InventorySyncRun
- **Role**: inventory synchronization history and last-sync indicators.
- **Status-like fields used**:
- `status` (`pending|running|success|partial|failed|skipped`)
### BackupScheduleRun
- **Role**: scheduled backup history and status indicators.
- **Status-like fields used**:
- `status` (`running|success|partial|failed|canceled|skipped`)
### EntraGroupSyncRun
- **Role**: Entra group cache synchronization history.
- **Status-like fields used**:
- `status` (`pending|running|succeeded|partial|failed`)
- `safety_stop_triggered` (boolean)
### RestoreRun
- **Role**: restore orchestration progress and outcomes.
- **Status-like fields used**:
- `status` (enum-like string; see `RestoreRunStatus`)
### Finding
- **Role**: drift/risk indicators and triage workflow.
- **Status-like fields used**:
- `status` (`new|acknowledged`)
- `severity` (`low|medium|high`)
## Entities (code-only)
### Badge Domain
- **Role**: a named namespace for status-like values that must render consistently (for example, “inventory sync run status”, “drift finding severity”).
- **Uniqueness**: domain name is unique within the application.
### Badge Definition
- **Role**: the central mapping for a domains values → badge meaning.
- **Behavior**:
- Must be pure (no DB queries, no HTTP, no side effects).
- Must provide a safe default for unknown values.
## State transitions (existing)
### RestoreRunStatus (selected)
The restore run lifecycle is defined in code and must not be changed by this feature:
- Pre-flight states: draft → scoped → checked → previewed
- Execution: pending/queued → running → completed/partial/failed/cancelled
This feature standardizes how these values render; it does not change transitions.