at.locale.project
Schema Diff
+30 -0
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
}