Skip to content

Deployment Tracker Demo

Jim Daley edited this page Jul 2, 2026 · 1 revision

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 Contract

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.

Workspace Model

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"]
Loading

Data Model

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
Loading

Workflow Engine

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"]
Loading

Jamf Inventory Preload Demo Path

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
Loading

SD+ and Records Paths

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"]
Loading

Persistence

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.

Important Files

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.

Clone this wiki locally