{
  "type": "record",
  "Aspect": {
    "name": "lifecycleStageTypeInfo"
  },
  "name": "LifecycleStageTypeInfo",
  "namespace": "com.linkedin.pegasus2avro.lifecycle",
  "fields": [
    {
      "Searchable": {
        "boostScore": 10.0,
        "enableAutocomplete": true,
        "fieldType": "WORD_GRAM"
      },
      "type": "string",
      "name": "name",
      "doc": "Display name of the lifecycle stage type."
    },
    {
      "type": [
        "null",
        "string"
      ],
      "name": "description",
      "default": null,
      "doc": "Description of what this lifecycle stage represents."
    },
    {
      "type": [
        "null",
        {
          "type": "array",
          "items": "string"
        }
      ],
      "name": "entityTypes",
      "default": null,
      "doc": "Entity type names this stage applies to (e.g., [\"document\", \"glossaryTerm\"]).\nWhen null/absent, applies to all entity types.\nWhen empty, applies to no entity types (effectively disabled)."
    },
    {
      "type": {
        "type": "record",
        "name": "LifecycleStageSettings",
        "namespace": "com.linkedin.pegasus2avro.lifecycle",
        "fields": [
          {
            "type": "boolean",
            "name": "hideInSearch",
            "default": false,
            "doc": "When true, entities in this stage are excluded from default search results.\nUsers can still discover them by explicitly filtering on the lifecycleStage field."
          }
        ],
        "doc": "Settings that control how entities in a given lifecycle stage behave in the platform."
      },
      "name": "settings",
      "doc": "Settings that control platform behavior for entities in this stage."
    },
    {
      "type": [
        "null",
        {
          "type": "record",
          "name": "LifecycleStageTransitionPolicy",
          "namespace": "com.linkedin.pegasus2avro.lifecycle",
          "fields": [
            {
              "type": [
                "null",
                {
                  "type": "array",
                  "items": "string"
                }
              ],
              "name": "allowedPreviousStages",
              "default": null,
              "doc": "Lifecycle stage type URNs that an entity must currently be in to transition\nINTO this stage. Use the sentinel value \"urn:li:lifecycleStageType:__NONE__\"\nto allow entry from the default active state (no stage set).\n\nnull/absent: any prior stage (or no stage) can transition to this one.\nempty list: nothing can transition to this stage (unreachable).",
              "Urn": "Urn",
              "urn_is_array": true
            }
          ],
          "doc": "Defines which prior stages (or no stage) are allowed to transition INTO this stage.\nEnforced server-side via a MutationHook on the Status aspect.\n\nModeled as entry constraints rather than exit constraints so that adding a new\nstage is self-contained \u2014 you declare its own entry policy without editing\nevery existing stage."
        }
      ],
      "name": "transitionPolicy",
      "default": null,
      "doc": "Optional policy defining which prior stages can transition INTO this stage.\nWhen null, any prior stage can transition to this one (no enforcement)."
    },
    {
      "Searchable": {
        "/actor": {
          "fieldName": "createdBy",
          "fieldType": "URN"
        },
        "/time": {
          "fieldName": "createdAt",
          "fieldType": "DATETIME"
        }
      },
      "type": {
        "type": "record",
        "name": "AuditStamp",
        "namespace": "com.linkedin.pegasus2avro.common",
        "fields": [
          {
            "type": "long",
            "name": "time",
            "doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
          },
          {
            "java": {
              "class": "com.linkedin.pegasus2avro.common.urn.Urn"
            },
            "type": "string",
            "name": "actor",
            "doc": "The entity (e.g. a member URN) which will be credited for moving the resource/association/sub-resource into the specific lifecycle stage. It is also the one used to authorize the change.",
            "Urn": "Urn"
          },
          {
            "java": {
              "class": "com.linkedin.pegasus2avro.common.urn.Urn"
            },
            "type": [
              "null",
              "string"
            ],
            "name": "impersonator",
            "default": null,
            "doc": "The entity (e.g. a service URN) which performs the change on behalf of the Actor and must be authorized to act as the Actor.",
            "Urn": "Urn"
          },
          {
            "type": [
              "null",
              "string"
            ],
            "name": "message",
            "default": null,
            "doc": "Additional context around how DataHub was informed of the particular change. For example: was the change created by an automated process, or manually."
          }
        ],
        "doc": "Data captured on a resource/association/sub-resource level giving insight into when that resource/association/sub-resource moved into a particular lifecycle stage, and who acted to move it into that specific lifecycle stage."
      },
      "name": "created",
      "doc": "Audit stamp capturing the time and actor who created this lifecycle stage type."
    },
    {
      "Searchable": {
        "/actor": {
          "fieldName": "lastModifiedBy",
          "fieldType": "URN"
        },
        "/time": {
          "fieldName": "lastModifiedAt",
          "fieldType": "DATETIME"
        }
      },
      "type": "com.linkedin.pegasus2avro.common.AuditStamp",
      "name": "lastModified",
      "doc": "Audit stamp capturing the time and actor who last modified this lifecycle stage type."
    }
  ],
  "doc": "Information about a lifecycle stage type.\n\nLifecycle stages control entity visibility and behavior in the platform.\nEach stage can apply to specific entity types and define search visibility\nand transition policies.\n\nWhen an entity's Status.lifecycleStage is set to a lifecycle stage type URN,\nthe stage's settings determine how the entity is treated (e.g., hidden from\ndefault search when hideInSearch=true).\n\nThe entityTypes field controls which entity types this stage can be applied to:\n  - null/absent: the stage applies to ALL entity types\n  - empty list: the stage applies to NO entity types (disabled)\n  - explicit list: the stage only applies to those entity types"
}