2026-05-23 09:23:12 -05:00

2.5 KiB

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.