id.sifa.profile.position

sifa.id

Schema Diff

+5 -0

From

CID
bafyreibdrpq3ag4...
Indexed At
2026-08-07 11:35 UTC
View this version

To

CID
bafyreigbzpsbixx...
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.position:body.agentRef" }
  • AddedEdge AddedEdge { src: "id.sifa.profile.position:body", tgt: "id.sifa.profile.position:body.agentRef", kind: "prop", name: Some("agentRef") }
  • AddedEdge AddedEdge { src: "id.sifa.profile.position: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.position:body.agentRef" }

Additional Notes

  • Non-breaking: AddedEdge { src: "id.sifa.profile.position:body", tgt: "id.sifa.profile.position:body.agentRef", kind: "prop", name: Some("agentRef") }
  • Non-breaking: AddedEdge { src: "id.sifa.profile.position: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 a single work position or role.",
6 6
      "key": "tid",
7 7
      "record": {
8 8
        "properties": {
9 +
          "agentRef": {
10 +
            "description": "The employer, as a single nested reference mirroring the flat company / companyDid / 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
          "company": {
10 15
            "description": "Company or organization name. Optional: omit for self-employed, freelance, contract, or independent work that has no separately named or registered entity.",
11 16
            "maxGraphemes": 256,
12 17
            "maxLength": 2560,
13 18
            "minLength": 1,
14 19
            "type": "string",
15 20
            "x-skos:exactMatch": [
16 21
              "org:organization",
17 22
              "schema:worksFor"
18 23
            ]
19 24
          },
20 25
          "companyDid": {
21 26
            "description": "DID of the company's ATproto account, if one exists. Enables verified company linking.",
22 27
            "format": "did",
23 28
            "type": "string"
24 29
          },
25 30
          "createdAt": {
26 31
            "description": "Client-declared timestamp when this record was originally created.",
27 32
            "format": "datetime",
28 33
            "type": "string"
29 34
          },
30 35
          "description": {
31 36
            "description": "Description of responsibilities, achievements, and duties.",
32 37
            "maxGraphemes": 5000,
33 38
            "maxLength": 50000,
34 39
            "type": "string",
35 40
            "x-skos:exactMatch": [
36 41
              "dcterms:description"
37 42
            ]
38 43
          },
39 44
          "employmentType": {
40 45
            "description": "Type of employment (full-time, part-time, contract, etc.).",
41 46
            "knownValues": [
42 47
              "id.sifa.defs#fullTime",
43 48
              "id.sifa.defs#partTime",
44 49
              "id.sifa.defs#temporary",
45 50
              "id.sifa.defs#seasonal",
46 51
              "id.sifa.defs#contract",
47 52
              "id.sifa.defs#freelance",
48 53
              "id.sifa.defs#selfEmployed",
49 54
              "id.sifa.defs#independentWork",
50 55
              "id.sifa.defs#internship",
51 56
              "id.sifa.defs#apprenticeship",
52 57
              "id.sifa.defs#fellowship",
53 58
              "id.sifa.defs#trainee",
54 59
              "id.sifa.defs#volunteer",
55 60
              "id.sifa.defs#boardMember",
56 61
              "id.sifa.defs#boardObserver",
57 62
              "id.sifa.defs#advisor"
58 63
            ],
59 64
            "type": "string",
60 65
            "x-skos:closeMatch": [
61 66
              "schema:employmentType"
62 67
            ],
63 68
            "x-skos:note": "schema:employmentType is free text. ESCO is the better value anchor."
64 69
          },
65 70
          "endedAt": {
66 71
            "description": "End date of the position in YYYY-MM or YYYY-MM-DD format. Omit if this is a current position.",
67 72
            "type": "string",
68 73
            "x-skos:exactMatch": [
69 74
              "schema:endDate"
70 75
            ]
71 76
          },
72 77
          "entityRef": {
73 78
            "description": "Portable, app-neutral identifier for the organization 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 org claims an ATproto account. Absent for free-text or independent/self-employed positions.",
74 79
            "format": "uri",
75 80
            "type": "string",
76 81
            "x-skos:closeMatch": [
77 82
              "schema:sameAs"
78 83
            ]
79 84
          },
80 85
          "isPrimary": {
81 86
            "description": "Whether this is the user's primary current position, displayed on the identity card.",
82 87
            "type": "boolean"
83 88
          },
84 89
          "labels": {
85 90
            "description": "Self-label values for this position record.",
86 91
            "refs": [
87 92
              "com.atproto.label.defs#selfLabels"
88 93
            ],
89 94
            "type": "union"
90 95
          },
91 96
          "location": {
92 97
            "description": "Work location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer.",
93 98
            "ref": "community.lexicon.location.address",
94 99
            "type": "ref",
95 100
            "x-skos:exactMatch": [
96 101
              "schema:jobLocation"
97 102
            ]
98 103
          },
99 104
          "onBehalfOf": {
100 105
            "description": "Name of the party this role is held on behalf of, when the person represents someone else — most often a fund whose board seat this is. A disclosure, not a role type. Omit for independent seats.",
101 106
            "maxGraphemes": 256,
102 107
            "maxLength": 2560,
103 108
            "type": "string"
104 109
          },
105 110
          "onBehalfOfDid": {
106 111
            "description": "DID of the represented party's ATproto account, if one exists. May resolve to an organization or to a person (e.g. a family-office principal).",
107 112
            "format": "did",
108 113
            "type": "string"
109 114
          },
110 115
          "onBehalfOfEntityRef": {
111 116
            "description": "Portable, app-neutral identifier for the represented party selected from a resolver dropdown: a Wikidata Q-ID URI, a ROR URI, or an LEI URI. Absent for free-text entries.",
112 117
            "format": "uri",
113 118
            "type": "string"
114 119
          },
115 120
          "skills": {
116 121
            "description": "Skills used in this position. Each entry is a URI reference to an id.sifa.profile.skill record owned by the same DID.",
117 122
            "items": {
118 123
              "ref": "id.sifa.defs#skillRef",
119 124
              "type": "ref"
120 125
            },
121 126
            "maxLength": 50,
122 127
            "type": "array"
123 128
          },
124 129
          "startedAt": {
125 130
            "description": "Start date of the position in YYYY-MM or YYYY-MM-DD format.",
126 131
            "type": "string",
127 132
            "x-skos:exactMatch": [
128 133
              "schema:startDate"
129 134
            ]
130 135
          },
131 136
          "title": {
132 137
            "description": "Job title or role name.",
133 138
            "maxGraphemes": 256,
134 139
            "maxLength": 2560,
135 140
            "minLength": 1,
136 141
            "type": "string",
137 142
            "x-skos:exactMatch": [
138 143
              "org:role",
139 144
              "schema:roleName"
140 145
            ]
141 146
          },
142 147
          "workplaceType": {
143 148
            "description": "Workplace arrangement (on-site, remote, hybrid).",
144 149
            "knownValues": [
145 150
              "id.sifa.defs#onSite",
146 151
              "id.sifa.defs#remote",
147 152
              "id.sifa.defs#hybrid"
148 153
            ],
149 154
            "type": "string",
150 155
            "x-skos:narrowMatch": [
151 156
              "schema:jobLocationType"
152 157
            ],
153 158
            "x-skos:note": "schema.org models only a remote flag; Sifa distinguishes onSite, remote, and hybrid."
154 159
          }
155 160
        },
156 161
        "required": [
157 162
          "title",
158 163
          "startedAt",
159 164
          "createdAt"
160 165
        ],
161 166
        "type": "object"
162 167
      },
163 168
      "type": "record",
164 169
      "x-skos:closeMatch": [
165 170
        "org:Membership",
166 171
        "schema:OrganizationRole"
167 172
      ]
168 173
    }
169 174
  },
170 175
  "description": "A work experience entry in the user's professional profile.",
171 176
  "id": "id.sifa.profile.position",
172 177
  "lexicon": 1
173 178
}

Compare Other Versions

Lexicon Garden

@