at.locale.project

locale.at

Schema Diff

+30 -0

From

CID
bafyreih2d766k3e...
Indexed At
2026-06-24 00:18 UTC
View this version

To

CID
bafyreidwywky4j4...
Indexed At
2026-06-26 11:21 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 7 non-breaking changes.

Breaking Changes (2)
  • ConstraintAdded ConstraintAdded { vertex_id: "at.locale.project#permissions.policy", sort: "default", value: "closed" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.locale.project#permissions.defaultRole", sort: "default", value: "translator" }
Non-Breaking Changes (7)
  • AddedVertex AddedVertex { vertex_id: "at.locale.project#permissions" }
  • AddedVertex AddedVertex { vertex_id: "at.locale.project#permissions.defaultRole" }
  • AddedVertex AddedVertex { vertex_id: "at.locale.project#permissions.policy" }
  • AddedVertex AddedVertex { vertex_id: "at.locale.project:body.permissions" }
  • AddedEdge AddedEdge { src: "at.locale.project#permissions", tgt: "at.locale.project#permissions.defaultRole", kind: "prop", name: Some("defaultRole") }
  • AddedEdge AddedEdge { src: "at.locale.project#permissions", tgt: "at.locale.project#permissions.policy", kind: "prop", name: Some("policy") }
  • AddedEdge AddedEdge { src: "at.locale.project:body", tgt: "at.locale.project:body.permissions", kind: "prop", name: Some("permissions") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "at.locale.project#permissions" }
  • AddedVertex { vertex_id: "at.locale.project#permissions.defaultRole" }
  • AddedVertex { vertex_id: "at.locale.project#permissions.policy" }
  • AddedVertex { vertex_id: "at.locale.project:body.permissions" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "at.locale.project#permissions.policy", sort: "default", value: "closed" }
  • ConstraintAdded ConstraintAdded { vertex_id: "at.locale.project#permissions.defaultRole", sort: "default", value: "translator" }

Additional Notes

  • Non-breaking: AddedEdge { src: "at.locale.project#permissions", tgt: "at.locale.project#permissions.defaultRole", kind: "prop", name: Some("defaultRole") }
  • Non-breaking: AddedEdge { src: "at.locale.project#permissions", tgt: "at.locale.project#permissions.policy", kind: "prop", name: Some("policy") }
  • Non-breaking: AddedEdge { src: "at.locale.project:body", tgt: "at.locale.project:body.permissions", kind: "prop", name: Some("permissions") }
1 1
{
2 2
  "id": "at.locale.project",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "any",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "name",
11 11
          "slug",
12 12
          "sourceLocale",
13 13
          "source",
14 14
          "createdAt"
15 15
        ],
16 16
        "properties": {
17 17
          "name": {
18 18
            "type": "string",
19 19
            "maxLength": 1000,
20 20
            "minLength": 1,
21 21
            "description": "Display name.",
22 22
            "maxGraphemes": 200
23 23
          },
24 24
          "slug": {
25 25
            "type": "string",
26 26
            "maxLength": 128,
27 27
            "minLength": 1,
28 28
            "description": "Stable, URL-safe slug used to address the project."
29 29
          },
30 30
          "source": {
31 31
            "ref": "#source",
32 32
            "type": "ref"
33 33
          },
34 34
          "createdAt": {
35 35
            "type": "string",
36 36
            "format": "datetime"
37 37
          },
38 38
          "description": {
39 39
            "type": "string",
40 40
            "maxLength": 6000,
41 41
            "maxGraphemes": 2000
42 42
          },
43 +
          "permissions": {
44 +
            "ref": "#permissions",
45 +
            "type": "ref",
46 +
            "description": "Default access policy for the project."
47 +
          },
43 48
          "sourceLocale": {
44 49
            "type": "string",
45 50
            "maxLength": 35,
46 51
            "minLength": 2,
47 52
            "description": "BCP-47 language tag of the source strings, e.g. \"en-US\"."
48 53
          },
49 54
          "targetLocales": {
50 55
            "type": "array",
51 56
            "items": {
52 57
              "type": "string",
53 58
              "maxLength": 35,
54 59
              "minLength": 2
55 60
            },
56 61
            "maxLength": 1000,
57 62
            "description": "BCP-47 tags the project is translated into."
58 63
          }
59 64
        }
60 65
      }
61 66
    },
62 67
    "source": {
63 68
      "type": "object",
64 69
      "required": [
65 70
        "type",
66 71
        "url",
67 72
        "format"
68 73
      ],
69 74
      "properties": {
70 75
        "url": {
71 76
          "type": "string",
72 77
          "format": "uri",
73 78
          "maxLength": 2048
74 79
        },
75 80
        "type": {
76 81
          "type": "string",
77 82
          "default": "git",
78 83
          "knownValues": [
79 84
            "git"
80 85
          ]
81 86
        },
82 87
        "paths": {
83 88
          "type": "array",
84 89
          "items": {
85 90
            "type": "string",
86 91
            "maxLength": 1024
87 92
          },
88 93
          "maxLength": 100,
89 94
          "description": "Glob(s) matching the translation files inside the repo."
90 95
        },
91 96
        "branch": {
92 97
          "type": "string",
93 98
          "default": "main",
94 99
          "maxLength": 255
95 100
        },
96 101
        "format": {
97 102
          "type": "string",
98 103
          "knownValues": [
99 104
            "json",
100 105
            "yaml",
101 106
            "po",
102 107
            "xliff",
103 108
            "arb",
104 109
            "strings",
105 110
            "properties",
106 111
            "androidxml",
107 112
            "csv",
108 113
            "ini"
109 114
          ]
110 115
        }
111 116
      },
112 117
      "description": "Where the source strings live and how to read them — the content host (the \"knot\")."
118 +
    },
119 +
    "permissions": {
120 +
      "type": "object",
121 +
      "properties": {
122 +
        "policy": {
123 +
          "type": "string",
124 +
          "default": "closed",
125 +
          "description": "Who can contribute translations.",
126 +
          "knownValues": [
127 +
            "closed",
128 +
            "open"
129 +
          ]
130 +
        },
131 +
        "defaultRole": {
132 +
          "type": "string",
133 +
          "default": "translator",
134 +
          "description": "Role assigned to authenticated users in open projects.",
135 +
          "knownValues": [
136 +
            "viewer",
137 +
            "translator",
138 +
            "reviewer"
139 +
          ]
140 +
        }
141 +
      },
142 +
      "description": "Default access policy for the project."
113 143
    }
114 144
  },
115 145
  "$type": "com.atproto.lexicon.schema",
116 146
  "lexicon": 1,
117 147
  "description": "A localization project container. Maintainer-owned. Points at the source content (a git repo); it does NOT contain the strings themselves."
118 148
}

Compare Other Versions

Lexicon Garden

@