{
"id": "app.gainforest.evaluator.service",
"defs": {
"main": {
"key": "literal:self",
"type": "record",
"record": {
"type": "object",
"required": [
"policies",
"createdAt"
],
"properties": {
"policies": {
"ref": "#evaluatorPolicies",
"type": "ref",
"description": "The evaluator's policies including supported evaluation types and access model."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp of when this evaluator service was declared."
}
}
},
"description": "An evaluator service declaration. Publish at /app.gainforest.evaluator.service/self to declare this account as an evaluator."
},
"evaluatorPolicies": {
"type": "object",
"required": [
"evaluationTypes"
],
"properties": {
"accessModel": {
"type": "string",
"description": "Whether this evaluator requires user subscription ('subscription') or processes all matching records ('open').",
"knownValues": [
"open",
"subscription"
],
"maxGraphemes": 64
},
"evaluationTypes": {
"type": "array",
"items": {
"type": "string",
"maxGraphemes": 64
},
"maxLength": 20,
"description": "List of evaluation type identifiers this evaluator produces (e.g., 'species-id', 'data-quality')."
},
"subjectCollections": {
"type": "array",
"items": {
"type": "string",
"maxGraphemes": 128
},
"maxLength": 20,
"description": "NSIDs of record collections this evaluator can evaluate (e.g., 'app.gainforest.dwc.occurrence')."
},
"evaluationTypeDefinitions": {
"type": "array",
"items": {
"ref": "#evaluationTypeDefinition",
"type": "ref"
},
"maxLength": 20,
"description": "Detailed definitions for each evaluation type, including human-readable descriptions."
}
},
"description": "Policies declaring what this evaluator does and how it operates."
},
"evaluationTypeLocale": {
"type": "object",
"required": [
"lang",
"name",
"description"
],
"properties": {
"lang": {
"type": "string",
"description": "Language code (BCP-47, e.g., 'en', 'pt-BR').",
"maxGraphemes": 16
},
"name": {
"type": "string",
"description": "Short human-readable name for this evaluation type.",
"maxGraphemes": 128
},
"description": {
"type": "string",
"description": "Longer description of what this evaluation type does.",
"maxGraphemes": 2048
}
},
"description": "Localized name and description for an evaluation type."
},
"evaluationTypeDefinition": {
"type": "object",
"required": [
"identifier",
"resultType"
],
"properties": {
"method": {
"ref": "app.gainforest.evaluator.defs#methodInfo",
"type": "ref",
"description": "Default method info for this evaluation type (can be overridden per-evaluation)."
},
"locales": {
"type": "array",
"items": {
"ref": "#evaluationTypeLocale",
"type": "ref"
},
"maxLength": 20,
"description": "Human-readable names and descriptions in various languages."
},
"identifier": {
"type": "string",
"description": "The evaluation type identifier (must match an entry in evaluationTypes).",
"maxGraphemes": 64
},
"resultType": {
"type": "string",
"description": "The lexicon reference for the result type (e.g., 'app.gainforest.evaluator.defs#speciesIdResult').",
"maxGraphemes": 128
}
},
"description": "Definition of a single evaluation type produced by this evaluator."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "Declaration record published at rkey 'self' to register an account as an evaluator service. Analogous to app.bsky.labeler.service for labelers."
}