{
"id": "eu.atcommons.member",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"community",
"countries",
"createdAt"
],
"properties": {
"community": {
"type": "string",
"format": "did",
"description": "DID of the community being joined. A DID rather than a handle so the declaration survives the community changing domains."
},
"countries": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code, lowercase (e.g. \"nl\", \"be\"). Never a region or continent code — an EU-wide item is expressed with a scope field on that item's own record type, not by putting \"eu\" here."
},
"maxLength": 8,
"minLength": 1,
"description": "Countries the member is part of the community in. Accumulating and sticky: joining a second country adds to this list rather than replacing it, and moving away does not remove one. Membership is not residency — someone who moves abroad stays part of the community they joined. There is deliberately no primary country here; current location, including which one is primary, belongs in id.sifa.profile.location, which the member maintains for themselves."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp of when the record was created."
}
}
},
"description": "A self-asserted declaration that the account is part of an AT Protocol community commons, in one or more countries. Written by the member to their own repository; nobody else can add or remove it. Absence of a record means nothing — it is not evidence of non-membership."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}