id.sifa.org.employmentAttestation
Schema Diff
+16 -13
Compatibility Analysis
Breaking Changes Detected
5 breaking changes, 6 non-breaking changes.
Breaking Changes (5)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "id.sifa.org.employmentAttestation:body", src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.title", kind: "prop", name: Some("title") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "id.sifa.org.employmentAttestation:body", src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.position", kind: "prop", name: Some("position") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "id.sifa.org.employmentAttestation:body", src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.startedAt", kind: "prop", name: Some("startedAt") }
- KindChanged KindChanged { vertex_id: "id.sifa.org.employmentAttestation:body.status", old_kind: "string", new_kind: "ref" }
- ConstraintAdded ConstraintAdded { vertex_id: "id.sifa.org.employmentAttestation:body.status", sort: "ref", value: "id.sifa.defs#employmentStatus" }
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "id.sifa.defs#attestationSource" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.defs#employmentStatus" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.org.employmentAttestation:body.source" }
- AddedEdge AddedEdge { src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.source", kind: "prop", name: Some("source") }
- AddedEdge AddedEdge { src: "id.sifa.org.employmentAttestation:body.source", tgt: "id.sifa.defs#attestationSource", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "id.sifa.org.employmentAttestation:body.status", tgt: "id.sifa.defs#employmentStatus", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "id.sifa.defs#attestationSource" }AddedVertex { vertex_id: "id.sifa.defs#employmentStatus" }AddedVertex { vertex_id: "id.sifa.org.employmentAttestation:body.source" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "id.sifa.org.employmentAttestation:body.status", sort: "ref", value: "id.sifa.defs#employmentStatus" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "id.sifa.org.employmentAttestation:body", src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.title", kind: "prop", name: Some("title") }
- Breaking: RequiredEdgeRemoved { vertex_id: "id.sifa.org.employmentAttestation:body", src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.position", kind: "prop", name: Some("position") }
- Breaking: RequiredEdgeRemoved { vertex_id: "id.sifa.org.employmentAttestation:body", src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.startedAt", kind: "prop", name: Some("startedAt") }
- Breaking: KindChanged { vertex_id: "id.sifa.org.employmentAttestation:body.status", old_kind: "string", new_kind: "ref" }
- Non-breaking: AddedEdge { src: "id.sifa.org.employmentAttestation:body", tgt: "id.sifa.org.employmentAttestation:body.source", kind: "prop", name: Some("source") }
- Non-breaking: AddedEdge { src: "id.sifa.org.employmentAttestation:body.source", tgt: "id.sifa.defs#attestationSource", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "id.sifa.org.employmentAttestation:body.status", tgt: "id.sifa.defs#employmentStatus", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "Record representing an organization's attestation of a person's employment.",
5
+
"description": "Record representing an organization's attestation that a person is or was employed at its entity. Deleting the record is a revocation. Updating status from current to past with an end date is offboarding, which keeps the history.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"comment": {
10
10
"description": "Optional brief comment from the organization.",
11
11
"maxGraphemes": 300,
12
12
"maxLength": 3000,
13
13
"type": "string"
14
14
},
15
15
"companyDid": {
16
-
"description": "DID of the company's ATproto account snapshot from the position record. Pin this when the position carried a companyDid but no entityRef. Part of the identity triple.",
16
+
"description": "Deprecated. The attesting organization is the repository owner, so this field carries no information; readers ignore it. Kept so existing schema readers do not break.",
17
17
"format": "did",
18
18
"type": "string"
19
19
},
20
20
"createdAt": {
21
21
"description": "Client-declared timestamp when this attestation was created.",
22
22
"format": "datetime",
23
23
"type": "string"
24
24
},
25
25
"endedAt": {
26
-
"description": "End date in YYYY-MM or YYYY-MM-DD format. Required context when status is 'past'.",
26
+
"description": "End date in YYYY-MM or YYYY-MM-DD format. Required context when status is past.",
27
27
"type": "string"
28
28
},
29
29
"entityRef": {
30
-
"description": "Portable entity identifier snapshot (Wikidata Q-ID URI, ROR URI, or LEI URI) from the position record. Pin this when the position carried an entityRef. Part of the identity triple. Never pin the free-text company name.",
30
+
"description": "Portable entity identifier (Wikidata Q-ID URI, ROR URI, or LEI URI) of the employing legal entity. Omit it when the organization account itself is the anchor. Never the free-text company name.",
31
31
"format": "uri",
32
32
"type": "string"
33
33
},
34
34
"labels": {
35
35
"description": "Self-label values for this attestation record.",
36
36
"refs": [
37
37
"com.atproto.label.defs#selfLabels"
38
38
],
39
39
"type": "union"
40
40
},
41
41
"position": {
42
-
"description": "StrongRef to the id.sifa.profile.position record being attested. The AT-URI identifies the position, and the CID pins the version for provenance.",
42
+
"description": "StrongRef to the id.sifa.profile.position record being attested. It must belong to subject. Resolve by AT-URI: the CID is the version the organization saw and must not be used as a join key, because the subject editing the position changes its CID. Omit it to attest employment at the entity as a whole, which then matches every position of the subject at that entity with an overlapping period.",
43
43
"ref": "com.atproto.repo.strongRef",
44
44
"type": "ref"
45
45
},
46
+
"source": {
47
+
"description": "How the attestation was written. Absent means an account holder confirmed it by hand.",
48
+
"ref": "id.sifa.defs#attestationSource",
49
+
"type": "ref"
50
+
},
46
51
"startedAt": {
47
-
"description": "Start date snapshot in YYYY-MM or YYYY-MM-DD format, mirroring the position lexicon's freeform date shape. Part of the identity triple.",
52
+
"description": "Optional start date snapshot in YYYY-MM or YYYY-MM-DD format, mirroring the position lexicon's freeform date shape. Compared at month precision; a later difference makes the attestation stale.",
48
53
"type": "string"
49
54
},
50
55
"status": {
51
-
"description": "Whether the employment is current or past. Accepted values: 'current' or 'past'.",
52
-
"type": "string"
56
+
"description": "Whether the employment is current or past.",
57
+
"ref": "id.sifa.defs#employmentStatus",
58
+
"type": "ref"
53
59
},
54
60
"subject": {
55
61
"description": "DID of the employee whose employment is being attested.",
56
62
"format": "did",
57
63
"type": "string"
58
64
},
59
65
"title": {
60
-
"description": "Job title snapshot from the position record at attestation time. Part of the identity triple: if the position's title later changes, this attestation is voided (the role identity changed).",
66
+
"description": "Optional job title snapshot from the position at attestation time. If the position's title later differs, the attestation is stale until the organization re-attests.",
61
67
"maxGraphemes": 256,
62
68
"maxLength": 2560,
63
69
"minLength": 1,
64
70
"type": "string"
65
71
}
66
72
},
67
73
"required": [
68
74
"subject",
69
-
"position",
70
75
"status",
71
-
"title",
72
-
"startedAt",
73
76
"createdAt"
74
77
],
75
78
"type": "object"
76
79
},
77
80
"type": "record"
78
81
}
79
82
},
80
-
"description": "An organization's attestation that a person is or was employed in a specific position. Lives in the organization's PDS; the organization is implicit (whoever owns the repository). The org asserts this person held the described role. The position identity is pinned via a snapshot triple (title, startedAt, and the entity identifier) so editing the pinned identity fields on the referenced position record voids this attestation. Never pins the free-text company name, which can change in a rebrand without invalidating the attestation.",
83
+
"description": "An organization's attestation that a person is or was employed by it. Lives in the organization's PDS; the organization is whoever owns the repository. The organization attests employment at the entity, not a job title. The optional title and start-date snapshots let a consumer notice when the referenced position was edited afterwards: a mismatch makes the attestation stale, never void. Never pins the free-text company name, which can change in a rebrand without affecting the attestation.",
81
84
"id": "id.sifa.org.employmentAttestation",
82
85
"lexicon": 1
83
86
}