-
-
Notifications
You must be signed in to change notification settings - Fork 0
Deployment Tracker Demo
Deployment Tracker Demo is an interactive preview of a deployment workflow system. The installed configuration is demo-safe: it uses dummy data, deterministic local services, and disabled live external writes.
| Safety rule | Current behavior |
|---|---|
| Runtime mode |
.demo for installed demo configuration. |
| Live Jamf actions | Disabled by default. |
| Live SD+ actions | Disabled by default. |
| Preload client | Demo client is selected in demo mode. |
| External simulation | Returns no external data changed for supported systems. |
| User copy | Module subtitle and demo banner state that dummy data is used and no live Jamf actions run. |
Deployment Tracker organizes work into dashboard, workbench, imports, Jamf preload, SD+ export, records, and guide surfaces.
flowchart LR
Root["DeploymentTrackerRootView"] --> Dashboard["Dashboard"]
Root --> Workbench["In-progress workbench"]
Root --> Imports["Intake imports"]
Root --> JamfPreload["Jamf Inventory Preload"]
Root --> SDPlus["SD+ export"]
Root --> Records["Demo Records Management"]
Root --> Guide["Guide"]
erDiagram
DeploymentProject ||--o{ DeploymentDevice : contains
DeploymentDevice ||--o{ DeploymentWorkflowEvent : records
DeploymentDevice ||--o{ DeploymentException : may_have
DeploymentDevice ||--o{ JamfInventoryPreloadSubmission : may_submit
DeploymentDevice ||--o{ SDPlusExportJob : may_export
DeploymentDevice ||--o{ RecordsExportJob : may_archive
DeploymentWorkflowStatusDefinition ||--o{ DeploymentWorkflowEvent : classifies
DeploymentFieldDefinition ||--o{ DeploymentWorkbenchColumnProjection : renders
WorkbenchLayout ||--o{ DeploymentWorkbenchColumnProjection : orders
Deployment Tracker uses seeded workflow statuses and transitions. Gates keep transitions explicit.
flowchart TD
Intake["Intake"] --> QA["QA ready"]
QA --> Configured["Configured"]
Configured --> ReadyPreload["Ready for Jamf Inventory Preload"]
ReadyPreload --> Submitted["Jamf Inventory Preload Submitted"]
ReadyPreload --> Failed["Jamf Inventory Preload Failed"]
Submitted --> Reconciled["Jamf Inventory Preload Reconciled"]
Submitted --> Failed
Failed --> ReadyPreload
Reconciled --> ReadySD["Ready for SD+ Export"]
ReadySD --> SDExported["SD+ Exported"]
SDExported --> RecordsReady["Ready for Records Archive"]
RecordsReady --> Archived["Archived"]
QA -. gate .-> QAGate["QA gate"]
Configured -. gate .-> PreloadGate["Preload readiness gate"]
ReadyPreload -. gate .-> SubmitGate["Preload submission gate"]
Reconciled -. gate .-> SDGate["SD+ export gate"]
sequenceDiagram
participant User as Operator
participant VM as DeploymentTrackerViewModel
participant Validator as JamfInventoryPreloadValidator
participant Renderer as JamfInventoryPreloadCSVRenderer
participant Client as DemoJamfInventoryPreloadClient
participant Store as DeploymentTrackerStore
participant Diag as Diagnostics
User->>VM: preview preload
VM->>Validator: validate selected devices
Validator-->>VM: validation result
VM->>Renderer: render CSV
Renderer-->>VM: preload CSV bytes
User->>VM: submit demo preload
VM->>Client: submitMultipart
Client-->>VM: deterministic demo response
VM->>Store: record submission
VM->>Diag: preload diagnostics
Deployment Tracker includes renderers and services for:
- SD+ CSV export with template validation.
- Records Management export with archive-first policy.
- Demo integration simulator that reports no live external mutation in installed demo mode.
flowchart LR
Devices["Selected deployment devices"] --> Projection["Workbench projection"]
Projection --> SDRenderer["SDPlusCSVRenderer"]
Projection --> RecordsRenderer["RecordsManagementExportService"]
SDRenderer --> SDValidation["SD+ validation result"]
SDValidation --> SDJob["SD+ export job"]
RecordsRenderer --> RecordsJob["Records export job"]
SDJob --> Simulator["Demo integration simulator"]
RecordsJob --> Simulator
Simulator --> Result["No external data changed"]
The module resolves a DeploymentTrackerStore during view-model initialization. If persistent storage cannot open, the module falls back to in-memory storage and surfaces a user-facing integration error plus diagnostics because changes may not persist after shutdown.
| Path | Role |
|---|---|
ForsettiApp/Modules/DeploymentTracker/DeploymentTrackerModule.swift |
Module composition root and main view model. |
ForsettiApp/Modules/DeploymentTracker/Services/DeploymentTrackerSeedData.swift |
Field definitions, statuses, transitions, templates, and reference values. |
ForsettiApp/Modules/DeploymentTracker/Workflow/DeploymentWorkflowEngine.swift |
Transition and gate behavior. |
ForsettiApp/Modules/DeploymentTracker/Integrations/JamfPreload |
Preload render, validation, service, and demo client. |
ForsettiApp/Modules/DeploymentTracker/Integrations/SDPlus |
SD+ export model, renderer, and service. |
ForsettiApp/Modules/DeploymentTracker/Records |
Records Management models and export service. |
ForsettiTests/DeploymentTrackerDemoSafetyTests.swift |
Demo safety assertions. |
Forsetti Jamf Pro documentation. Keep module IDs, build commands, and security behavior aligned with the repository source before changing this wiki.