# Forge Server CAD ## Overview The CAD addon coordinates dispatch-facing operational state: groups, assignments, dispatch orders, support requests, task assignment, permissions, hydrate payloads, and recent activity. CAD state is extension-backed but intentionally transient. It is scoped to the active server or mission lifecycle and starts fresh after restart. ## Dependencies - `forge_server_main` - `forge_server_common` - `forge_server_actor` - `forge_server_org` - `forge_server_task` - `forge_server_extension` at runtime for CAD extension calls - `forge_client_cad` and `forge_client_notifications` for response RPCs ## Main Components - `fnc_initCadStore.sqf` coordinates repositories and request handling. - `fnc_initActivityRepository.sqf` records recent CAD activity. - `fnc_initAssignmentRepository.sqf` manages task assignments and dispatch orders. - `fnc_initGroupRepository.sqf` manages group membership, role, and status. - `fnc_initPermissionService.sqf` resolves dispatch permissions. - `fnc_initPersistenceService.sqf` bridges SQF state to extension hot CAD storage. - `fnc_initRequestRepository.sqf` manages support requests. ## Event Surface The addon listens to and emits events through the event bus: **Listens to:** - Task lifecycle events (`task.started`, `task.completed`, `task.failed`) - Task reward events to sync assignments - Client notification/sync request events **Emits:** - `cad.assignment.assigned` - task assigned to group - `cad.assignment.created` - new assignment created - `cad.assignment.acknowledged` - assignment acknowledged - `cad.assignment.declined` - assignment declined - `cad.assignment.closed` - assignment completed - `cad.request.submitted` - support request submitted - `cad.request.closed` - support request resolved - `cad.group.updated` - group status updated Successful mutations may invalidate CAD state globally so clients refresh their views. ## Contract Lifecycle CAD assignment and task acceptance are intentionally separate. Dispatch assignment reserves a contract for a group and marks the CAD assignment `assigned`; it does not start task logic. The assigned group leader must acknowledge the assignment before the task is accepted and ownership is bound. If the leader declines, CAD removes the assignment and the contract returns to the open board. Task status follows the same lifecycle: `available` on creation, `assigned` after dispatch assignment, and `active` after acknowledgement. ## Notes CAD hydrate payloads include assignable task catalog entries from `TaskStore` and organization context from `ActorStore`.