at.locale.project

locale.at

Schema Diff

+31 -1

From

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

To

CID
bafyreifptpxlm4i...
Indexed At
2026-07-26 20:15 UTC
View this version

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 -
  "description": "A localization project container. Maintainer-owned. Points at the source content (a git repo); it does NOT contain the strings themselves.",
145 +
  "description": "A localization project pointing at a source repo. Maintainer-owned.",
116 146
  "id": "at.locale.project",
117 147
  "lexicon": 1
118 148
}

Compare Other Versions

Lexicon Garden

@