This document describes a workflow for the [[Hyrax]] repository system intended for use with the OTM Gateway API. This workflow is designed to enable active selection and management of content within a distributed digital preservation (DDP) system, in satisfaction of the One to Many User Stories.

Status of This Document

This document is an appendix to a specification, created as part of the One to Many grant, funded by the Andrew W. Mellon Foundation.

Hyrax Preservation Workflow

States

New
The state of objects that are not yet submitted. Objects are in this state before being created and assigned an identifier.
Submitted
The state of object that has been saved in the repository system.
Preserved
The state of object that has been preserved in at least one DDP.

Actions

submit
Submits the item to the repository. Notifies curators of the new content which may be selected for preservation. Transitions the object from New to Submitted.
preserve
Requests deposit in one or more DDPs via the Gateway. Notifies curators and administrators that preservation has been requested. Transitions the object to Preserved.
purge
Requests purge from all DDPs via the Gateway. Notifies curators and administrators that purge has been requested. Transitions the object from Preserved to Submitted.
update preserved content
Triggered when content that has already been preserved in at least one DDP is updated locally. Notifies curators of the new content which may be selected for preservation. Does not transition object state.
comment
Allows curators, administrators, and automated auditors to comment on submitted or preserved objects without triggering other workflow actions. Does not transition object state.

Workflow Specification JSON

{ "workflows": [
    {
      "name": "otm_preservation_deposit",
      "label": "One to Many Mediated Deposit with Preservation",
      "description": "",
      "actions": [
        {
          "name": "submit",
          "from_states": [],
          "transition_to": "submitted",
          "notifications": [
            {
              "notification_type": "email",
              "name": "Hyrax::Workflow::AvailableForPreservation",
              "to": ["curating"]
             }
          ],
          "methods": [
            "Hyrax::Workflow::GrantReadToDepositor",
            "Hyrax::Workflow::DeactivateObject"
          ]
        },
        {
          "name": "preserve",
          "from_states": [{"names": ["submitted", "preserved"], "roles": ["curating"]}],
          "transition_to": "preserved",
          "notifications": [
            {
              "notification_type": "email",
              "name": "Hyrax::Workflow::PreservationRequested",
              "to": ["curating", "admin"]
             }
          ],
          "methods": [
            "Hyrax::Workflow::DepositToOtmGateway"
          ]
        },
        {
          "name": "purge",
          "from_states": [{"names": ["preserved"], "roles": ["curating"]}],
          "transition_to": "submitted",
          "notifications": [
            {
              "notification_type": "email",
              "name": "Hyrax::Workflow::PurgeRequested",
              "to": ["curating", "admin"]
             }
          ],
          "methods": [
            "Hyrax::Workflow::PurgeFromOtmGateway"
          ]
        },
        {
          "name": "update_preserved_content",
          "from_states": [{"names": ["preserved"], "roles": ["curating"]}],
          "notifications": [
            {
              "notification_type": "email",
              "name": "Hyrax::Workflow::PreservedContentChanged",
              "to": ["curating"]
             }
          ]
        },
        {
          "name": "comment",
          "from_states": [
            { "names": ["submitted"], "roles": ["curating", "admin", "auditing"] },
            { "names": ["preserved"], "roles": ["curating", "admin", "auditing] }
          ]
        }
      ]
    }
  ]
}