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