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