id.sifa.profile.certification

sifa.id

Schema Diff

+29 -12

From

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

To

CID
bafyreihgb6j3qsj...
Indexed At
2026-09-05 18:31 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 14 non-breaking changes.

Non-Breaking Changes (14)
  • AddedVertex AddedVertex { vertex_id: "id.sifa.defs#agentRef" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.profile.certification:body.agentRef" }
  • AddedVertex AddedVertex { vertex_id: "id.sifa.profile.certification:body.entityRef" }
  • AddedEdge AddedEdge { src: "id.sifa.profile.certification:body", tgt: "id.sifa.profile.certification:body.agentRef", kind: "prop", name: Some("agentRef") }
  • AddedEdge AddedEdge { src: "id.sifa.profile.certification:body", tgt: "id.sifa.profile.certification:body.entityRef", kind: "prop", name: Some("entityRef") }
  • AddedEdge AddedEdge { src: "id.sifa.profile.certification:body.agentRef", tgt: "id.sifa.defs#agentRef", kind: "ref", name: None }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.certification:body.issuedAt", sort: "format" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.authority", sort: "maxLength", old_value: "1000", new_value: "2560" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.authority", sort: "maxGraphemes", old_value: "100", new_value: "256" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.name", sort: "maxGraphemes", old_value: "100", new_value: "256" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.name", sort: "maxLength", old_value: "1000", new_value: "2560" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.credentialId", sort: "maxGraphemes", old_value: "100", new_value: "256" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.credentialId", sort: "maxLength", old_value: "1000", new_value: "2560" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.certification:body.expiresAt", sort: "format" }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "id.sifa.defs#agentRef" }
  • AddedVertex { vertex_id: "id.sifa.profile.certification:body.agentRef" }
  • AddedVertex { vertex_id: "id.sifa.profile.certification:body.entityRef" }

Constraint Changes

  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.name", sort: "maxLength", old_value: "1000", new_value: "2560" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.name", sort: "maxGraphemes", old_value: "100", new_value: "256" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.certification:body.expiresAt", sort: "format" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.credentialId", sort: "maxLength", old_value: "1000", new_value: "2560" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.credentialId", sort: "maxGraphemes", old_value: "100", new_value: "256" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.authority", sort: "maxGraphemes", old_value: "100", new_value: "256" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "id.sifa.profile.certification:body.authority", sort: "maxLength", old_value: "1000", new_value: "2560" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "id.sifa.profile.certification:body.issuedAt", sort: "format" }

Additional Notes

  • Non-breaking: AddedEdge { src: "id.sifa.profile.certification:body", tgt: "id.sifa.profile.certification:body.agentRef", kind: "prop", name: Some("agentRef") }
  • Non-breaking: AddedEdge { src: "id.sifa.profile.certification:body", tgt: "id.sifa.profile.certification:body.entityRef", kind: "prop", name: Some("entityRef") }
  • Non-breaking: AddedEdge { src: "id.sifa.profile.certification:body.agentRef", tgt: "id.sifa.defs#agentRef", 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 certification or license.",
6 6
      "key": "tid",
7 7
      "record": {
8 8
        "properties": {
9 +
          "agentRef": {
10 +
            "description": "The issuing authority, as a single nested reference mirroring the flat authority / authorityDid / entityRef fields. Additive dual-write: the flat fields remain the source of truth for existing consumers.",
11 +
            "ref": "id.sifa.defs#agentRef",
12 +
            "type": "ref"
13 +
          },
9 14
          "authority": {
10 15
            "description": "Issuing organization or authority.",
11 -
            "maxGraphemes": 100,
12 -
            "maxLength": 1000,
16 +
            "maxGraphemes": 256,
17 +
            "maxLength": 2560,
13 18
            "type": "string"
14 19
          },
15 20
          "authorityDid": {
16 21
            "description": "DID of the issuing authority's ATproto account, if one exists.",
17 22
            "format": "did",
18 23
            "type": "string"
19 24
          },
20 25
          "createdAt": {
21 26
            "description": "Client-declared timestamp when this record was originally created.",
22 27
            "format": "datetime",
23 28
            "type": "string"
24 29
          },
25 30
          "credentialId": {
26 31
            "description": "Credential ID or license number.",
27 -
            "maxGraphemes": 100,
28 -
            "maxLength": 1000,
32 +
            "maxGraphemes": 256,
33 +
            "maxLength": 2560,
29 34
            "type": "string"
30 35
          },
31 36
          "credentialUrl": {
32 37
            "description": "URL to verify the credential.",
33 38
            "format": "uri",
39 +
            "type": "string",
40 +
            "x-skos:exactMatch": [
41 +
              "schema:url"
42 +
            ]
43 +
          },
44 +
          "entityRef": {
45 +
            "description": "Portable, app-neutral identifier for the issuing organization the user selected from a resolver dropdown: a Wikidata Q-ID URI (http://www.wikidata.org/entity/Q...), a ROR URI, or an LEI URI. Enables deterministic resolution to a canonical entity even before the organization claims an ATproto account. Absent for free-text entries.",
46 +
            "format": "uri",
34 47
            "type": "string"
35 48
          },
36 49
          "expiresAt": {
37 -
            "description": "Expiry date. Omit if the certification does not expire.",
38 -
            "format": "datetime",
39 -
            "type": "string"
50 +
            "description": "Expiry date in YYYY-MM or YYYY-MM-DD format. Omit if the certification does not expire.",
51 +
            "type": "string",
52 +
            "x-skos:exactMatch": [
53 +
              "schema:validUntil"
54 +
            ]
40 55
          },
41 56
          "issuedAt": {
42 -
            "description": "Date the certification was issued.",
43 -
            "format": "datetime",
57 +
            "description": "Date the certification was issued, in YYYY-MM or YYYY-MM-DD format.",
44 58
            "type": "string"
45 59
          },
46 60
          "labels": {
47 61
            "description": "Self-label values for this certification record.",
48 62
            "refs": [
49 63
              "com.atproto.label.defs#selfLabels"
50 64
            ],
51 65
            "type": "union"
52 66
          },
53 67
          "name": {
54 68
            "description": "Certification or license name.",
55 -
            "maxGraphemes": 100,
56 -
            "maxLength": 1000,
69 +
            "maxGraphemes": 256,
70 +
            "maxLength": 2560,
57 71
            "minLength": 1,
58 72
            "type": "string"
59 73
          }
60 74
        },
61 75
        "required": [
62 76
          "name",
63 77
          "createdAt"
64 78
        ],
65 79
        "type": "object"
66 80
      },
67 -
      "type": "record"
81 +
      "type": "record",
82 +
      "x-skos:exactMatch": [
83 +
        "schema:EducationalOccupationalCredential"
84 +
      ]
68 85
    }
69 86
  },
70 87
  "description": "A professional certification or license held by the user.",
71 88
  "id": "id.sifa.profile.certification",
72 89
  "lexicon": 1
73 90
}

Compare Other Versions

Lexicon Garden

@