id.sifa.org.employmentAttestation

sifa.id

Schema Diff

+16 -13

From

CID
bafyreigqixjvidj...
Indexed At
2026-07-16 17:14 UTC
View this version

To

CID
bafyreig6hzxn6bs...
Indexed At
2026-09-30 20:06 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@