id.sifa.profile.position

sifa.id

Schema Diff

+16 -13

From

CID
bafyreiei6d5sb2w...
Indexed At
2026-03-27 23:46 UTC
View this version

To

CID
bafyreiblguoexne...
Indexed At
2026-05-27 12:05 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@