id.sifa.profile.position
Schema Diff
+16 -13
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 8 non-breaking changes.
Breaking Changes (4)
- RemovedVertex RemovedVertex { vertex_id: "com.atproto.repo.strongRef" }
- RemovedEdge RemovedEdge { src: "id.sifa.profile.position:body.skills:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- ConstraintTightened ConstraintTightened { vertex_id: "id.sifa.profile.position:body.employmentType", sort: "knownValues", old_value: "[\"id.sifa.defs#fullTime\",\"id.sifa.defs#partTime\",\"id.sifa.defs#contract\",\"id.sifa.defs#freelance\",\"id.sifa.defs#internship\",\"id.sifa.defs#apprenticeship\",\"id.sifa.defs#volunteer\",\"id.sifa.defs#selfEmployed\"]", new_value: "[\"id.sifa.defs#fullTime\",\"id.sifa.defs#partTime\",\"id.sifa.defs#temporary\",\"id.sifa.defs#seasonal\",\"id.sifa.defs#contract\",\"id.sifa.defs#freelance\",\"id.sifa.defs#selfEmployed\",\"id.sifa.defs#independentWork\",\"id.sifa.defs#internship\",\"id.sifa.defs#apprenticeship\",\"id.sifa.defs#fellowship\",\"id.sifa.defs#trainee\",\"id.sifa.defs#volunteer\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "id.sifa.profile.position:body.skills:items", sort: "ref", old_value: "com.atproto.repo.strongRef", new_value: "id.sifa.defs#skillRef" }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "id.sifa.defs#skillRef" }
- AddedEdge AddedEdge { src: "id.sifa.profile.position:body.skills:items", tgt: "id.sifa.defs#skillRef", kind: "ref", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.position:body.startedAt", sort: "format" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.company", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.company", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.position:body.endedAt", sort: "format" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.title", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.title", sort: "maxLength", old_value: "1000", new_value: "2560" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "com.atproto.repo.strongRef" }
Added Elements
AddedVertex { vertex_id: "id.sifa.defs#skillRef" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "id.sifa.profile.position:body.skills:items", sort: "ref", old_value: "com.atproto.repo.strongRef", new_value: "id.sifa.defs#skillRef" }
- ConstraintTightened ConstraintTightened { vertex_id: "id.sifa.profile.position:body.employmentType", sort: "knownValues", old_value: "[\"id.sifa.defs#fullTime\",\"id.sifa.defs#partTime\",\"id.sifa.defs#contract\",\"id.sifa.defs#freelance\",\"id.sifa.defs#internship\",\"id.sifa.defs#apprenticeship\",\"id.sifa.defs#volunteer\",\"id.sifa.defs#selfEmployed\"]", new_value: "[\"id.sifa.defs#fullTime\",\"id.sifa.defs#partTime\",\"id.sifa.defs#temporary\",\"id.sifa.defs#seasonal\",\"id.sifa.defs#contract\",\"id.sifa.defs#freelance\",\"id.sifa.defs#selfEmployed\",\"id.sifa.defs#independentWork\",\"id.sifa.defs#internship\",\"id.sifa.defs#apprenticeship\",\"id.sifa.defs#fellowship\",\"id.sifa.defs#trainee\",\"id.sifa.defs#volunteer\"]" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.title", sort: "maxLength", old_value: "1000", new_value: "2560" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.title", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.position:body.startedAt", sort: "format" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.position:body.endedAt", sort: "format" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.company", sort: "maxGraphemes", old_value: "100", new_value: "256" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.position:body.company", sort: "maxLength", old_value: "1000", new_value: "2560" }
Additional Notes
- Breaking: RemovedEdge { src: "id.sifa.profile.position:body.skills:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "id.sifa.profile.position:body.skills:items", tgt: "id.sifa.defs#skillRef", 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
9
"company": {
10
10
"description": "Company or organization name.",
11
-
"maxGraphemes": 100,
12
-
"maxLength": 1000,
11
+
"maxGraphemes": 256,
12
+
"maxLength": 2560,
13
13
"minLength": 1,
14
14
"type": "string"
15
15
},
16
16
"companyDid": {
17
17
"description": "DID of the company's ATproto account, if one exists. Enables verified company linking.",
18
18
"format": "did",
19
19
"type": "string"
20
20
},
21
21
"createdAt": {
22
22
"description": "Client-declared timestamp when this record was originally created.",
23
23
"format": "datetime",
24
24
"type": "string"
25
25
},
26
26
"description": {
27
27
"description": "Description of responsibilities, achievements, and duties.",
28
28
"maxGraphemes": 5000,
29
29
"maxLength": 50000,
30
30
"type": "string"
31
31
},
32
32
"employmentType": {
33
33
"description": "Type of employment (full-time, part-time, contract, etc.).",
34
34
"knownValues": [
35
35
"id.sifa.defs#fullTime",
36
36
"id.sifa.defs#partTime",
37
+
"id.sifa.defs#temporary",
38
+
"id.sifa.defs#seasonal",
37
39
"id.sifa.defs#contract",
38
40
"id.sifa.defs#freelance",
41
+
"id.sifa.defs#selfEmployed",
42
+
"id.sifa.defs#independentWork",
39
43
"id.sifa.defs#internship",
40
44
"id.sifa.defs#apprenticeship",
41
-
"id.sifa.defs#volunteer",
42
-
"id.sifa.defs#selfEmployed"
45
+
"id.sifa.defs#fellowship",
46
+
"id.sifa.defs#trainee",
47
+
"id.sifa.defs#volunteer"
43
48
],
44
49
"type": "string"
45
50
},
46
51
"endedAt": {
47
-
"description": "End date of the position. Omit if this is a current position.",
48
-
"format": "datetime",
52
+
"description": "End date of the position in YYYY-MM or YYYY-MM-DD format. Omit if this is a current position.",
49
53
"type": "string"
50
54
},
51
55
"isPrimary": {
52
56
"description": "Whether this is the user's primary current position, displayed on the identity card.",
53
57
"type": "boolean"
54
58
},
55
59
"labels": {
56
60
"description": "Self-label values for this position record.",
57
61
"refs": [
58
62
"com.atproto.label.defs#selfLabels"
59
63
],
60
64
"type": "union"
61
65
},
62
66
"location": {
63
-
"description": "Work location. Uses community location lexicon.",
67
+
"description": "Work location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer.",
64
68
"ref": "community.lexicon.location.address",
65
69
"type": "ref"
66
70
},
67
71
"skills": {
68
-
"description": "Skills used in this position. Each entry is a strongRef to an id.sifa.profile.skill record owned by the same DID.",
72
+
"description": "Skills used in this position. Each entry is a URI reference to an id.sifa.profile.skill record owned by the same DID.",
69
73
"items": {
70
-
"ref": "com.atproto.repo.strongRef",
74
+
"ref": "id.sifa.defs#skillRef",
71
75
"type": "ref"
72
76
},
73
77
"maxLength": 50,
74
78
"type": "array"
75
79
},
76
80
"startedAt": {
77
-
"description": "Start date of the position. For month-precision imports, use first day of month at midnight UTC.",
78
-
"format": "datetime",
81
+
"description": "Start date of the position in YYYY-MM or YYYY-MM-DD format.",
79
82
"type": "string"
80
83
},
81
84
"title": {
82
85
"description": "Job title or role name.",
83
-
"maxGraphemes": 100,
84
-
"maxLength": 1000,
86
+
"maxGraphemes": 256,
87
+
"maxLength": 2560,
85
88
"minLength": 1,
86
89
"type": "string"
87
90
},
88
91
"workplaceType": {
89
92
"description": "Workplace arrangement (on-site, remote, hybrid).",
90
93
"knownValues": [
91
94
"id.sifa.defs#onSite",
92
95
"id.sifa.defs#remote",
93
96
"id.sifa.defs#hybrid"
94
97
],
95
98
"type": "string"
96
99
}
97
100
},
98
101
"required": [
99
102
"company",
100
103
"title",
101
104
"startedAt",
102
105
"createdAt"
103
106
],
104
107
"type": "object"
105
108
},
106
109
"type": "record"
107
110
}
108
111
},
109
112
"description": "A work experience entry in the user's professional profile.",
110
113
"id": "id.sifa.profile.position",
111
114
"lexicon": 1
112
115
}