id.sifa.profile.involvement

sifa.id

Schema Diff

+5 -0

From

CID
bafyreifqcqn2edx...
Indexed At
2026-09-05 16:00 UTC
View this version

To

CID
bafyreigghpacyr3...
Indexed At
2026-09-05 18:31 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 4 non-breaking changes.

Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "id.sifa.defs#agentRef" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.profile.involvement:body.agentRef" }
  • AddedEdge AddedEdge { src: "id.sifa.profile.involvement:body", tgt: "id.sifa.profile.involvement:body.agentRef", kind: "prop", name: Some("agentRef") }
  • AddedEdge AddedEdge { src: "id.sifa.profile.involvement:body.agentRef", tgt: "id.sifa.defs#agentRef", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "id.sifa.defs#agentRef" }
  • AddedVertex { vertex_id: "id.sifa.profile.involvement:body.agentRef" }

Additional Notes

  • Non-breaking: AddedEdge { src: "id.sifa.profile.involvement:body", tgt: "id.sifa.profile.involvement:body.agentRef", kind: "prop", name: Some("agentRef") }
  • Non-breaking: AddedEdge { src: "id.sifa.profile.involvement:body.agentRef", tgt: "id.sifa.defs#agentRef", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "Record representing one involvement — an ongoing role and/or a body of discrete contributions to a single upstream.",
6 6
      "key": "tid",
7 7
      "record": {
8 8
        "properties": {
9 +
          "agentRef": {
10 +
            "description": "The upstream project, community, event, or cause, as a single nested reference mirroring the flat upstream / upstreamDid / entityRef fields. Additive dual-write: the flat fields remain the source of truth for existing consumers.",
11 +
            "ref": "id.sifa.defs#agentRef",
12 +
            "type": "ref"
13 +
          },
9 14
          "collaborators": {
10 15
            "description": "Other people who worked on this alongside you. Each entry is a claim by the record author and is not self-verifying: the named person supplies the other half by publishing an id.sifa.confirmation record whose subject is this record and whose relation is id.sifa.defs#collaborator. Until they do, consumers must render the entry without their display name, avatar, or profile link. Confirming never puts this record on their profile: it lives in the author's repository and the author can rename it at any time.",
11 16
            "items": {
12 17
              "ref": "id.sifa.defs#projectMemberRef",
13 18
              "type": "ref"
14 19
            },
15 20
            "maxLength": 50,
16 21
            "type": "array"
17 22
          },
18 23
          "createdAt": {
19 24
            "description": "Client-declared timestamp when this record was originally created.",
20 25
            "format": "datetime",
21 26
            "type": "string"
22 27
          },
23 28
          "description": {
24 29
            "description": "What the user did and why it mattered.",
25 30
            "maxGraphemes": 5000,
26 31
            "maxLength": 50000,
27 32
            "type": "string"
28 33
          },
29 34
          "endedAt": {
30 35
            "description": "End date in YYYY-MM or YYYY-MM-DD format. Omit if ongoing.",
31 36
            "type": "string"
32 37
          },
33 38
          "entityRef": {
34 39
            "description": "Portable, app-neutral identifier for the upstream the user selected from a resolver dropdown: a Wikidata Q-ID URI (http://www.wikidata.org/entity/Q...), a ROR URI, or an LEI URI. Enables deterministic resolution to a canonical entity even before the upstream claims an ATproto account. Absent for free-text or one-off entries.",
35 40
            "format": "uri",
36 41
            "type": "string"
37 42
          },
38 43
          "isPrimary": {
39 44
            "description": "Whether this is the user's primary current involvement, surfaced in profile Highlights. Only ongoing entries may be primary.",
40 45
            "type": "boolean"
41 46
          },
42 47
          "kind": {
43 48
            "description": "The nature of the involvement. Drives the display heading (Open Source / Community / Volunteering / Civic).",
44 49
            "knownValues": [
45 50
              "id.sifa.defs#involvementOpenSource",
46 51
              "id.sifa.defs#involvementCommunity",
47 52
              "id.sifa.defs#involvementCharity",
48 53
              "id.sifa.defs#involvementCivic",
49 54
              "id.sifa.defs#involvementOther"
50 55
            ],
51 56
            "type": "string"
52 57
          },
53 58
          "labels": {
54 59
            "description": "Self-label values for this record.",
55 60
            "refs": [
56 61
              "com.atproto.label.defs#selfLabels"
57 62
            ],
58 63
            "type": "union"
59 64
          },
60 65
          "links": {
61 66
            "description": "Public artifacts proving the involvement (PRs, releases, talk recordings, published translations).",
62 67
            "items": {
63 68
              "ref": "id.sifa.defs#artifactLink",
64 69
              "type": "ref"
65 70
            },
66 71
            "maxLength": 50,
67 72
            "type": "array"
68 73
          },
69 74
          "location": {
70 75
            "description": "Where the involvement takes place. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer.",
71 76
            "ref": "community.lexicon.location.address",
72 77
            "type": "ref"
73 78
          },
74 79
          "role": {
75 80
            "description": "The user's role (e.g. 'Maintainer', 'Translator', 'Organizer', 'Contributor').",
76 81
            "maxGraphemes": 256,
77 82
            "maxLength": 2560,
78 83
            "type": "string"
79 84
          },
80 85
          "sameAs": {
81 86
            "description": "The same involvement as recorded on another person's profile. Set when you keep your own entry for work someone else has also recorded, so consumers can tell the two describe one thing rather than showing it twice. Each side stays its own record: the other person cannot edit yours, and yours does not change theirs. Resolve by AT-URI, since they will keep editing their copy.",
82 87
            "ref": "id.sifa.defs#externalRecordRef",
83 88
            "type": "ref"
84 89
          },
85 90
          "skills": {
86 91
            "description": "Skills demonstrated by this involvement. Each entry is a URI reference to an id.sifa.profile.skill record owned by the same DID.",
87 92
            "items": {
88 93
              "ref": "id.sifa.defs#skillRef",
89 94
              "type": "ref"
90 95
            },
91 96
            "maxLength": 50,
92 97
            "type": "array"
93 98
          },
94 99
          "startedAt": {
95 100
            "description": "Start date in YYYY-MM or YYYY-MM-DD format. Freeform (NOT strict datetime) to allow partial dates and importer writes.",
96 101
            "type": "string"
97 102
          },
98 103
          "upstream": {
99 104
            "description": "Name of the project, community, event, or cause (e.g. 'atproto', 'Linux kernel', 'PyCon NL'). Optional — a one-off contribution need not name an organization.",
100 105
            "maxGraphemes": 256,
101 106
            "maxLength": 2560,
102 107
            "type": "string"
103 108
          },
104 109
          "upstreamDid": {
105 110
            "description": "DID of the upstream's ATproto account, if one exists.",
106 111
            "format": "did",
107 112
            "type": "string"
108 113
          },
109 114
          "upstreamUrl": {
110 115
            "description": "Primary URL of the upstream (project homepage, repo, event site).",
111 116
            "format": "uri",
112 117
            "type": "string"
113 118
          }
114 119
        },
115 120
        "required": [
116 121
          "kind",
117 122
          "createdAt"
118 123
        ],
119 124
        "type": "object"
120 125
      },
121 126
      "type": "record",
122 127
      "x-skos:broadMatch": [
123 128
        "org:Membership"
124 129
      ],
125 130
      "x-skos:note": "The kind known values have no external equivalent."
126 131
    }
127 132
  },
128 133
  "description": "Uncompensated involvement with an external project, community, event, or cause the user does not own or run — open-source, community, charity, or civic work. Distinct from paid roles (position), things you own (project), and paid employment.",
129 134
  "id": "id.sifa.profile.involvement",
130 135
  "lexicon": 1
131 136
}

Compare Other Versions

Lexicon Garden

@