org.anthers.work
Schema Diff
+3 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 0 non-breaking changes.
Breaking Changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "org.anthers.work:body.kind", sort: "knownValues", old_value: "[\"text\",\"video\",\"audio\",\"image\",\"ebook\",\"game\",\"software\",\"physical\",\"service\"]", new_value: "[\"text\",\"video\",\"music\",\"audio\",\"image\",\"comic\",\"ebook\",\"game\",\"software\",\"physical\",\"service\"]" }
Migration Guidance
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "org.anthers.work:body.kind", sort: "knownValues", old_value: "[\"text\",\"video\",\"audio\",\"image\",\"ebook\",\"game\",\"software\",\"physical\",\"service\"]", new_value: "[\"text\",\"video\",\"music\",\"audio\",\"image\",\"comic\",\"ebook\",\"game\",\"software\",\"physical\",\"service\"]" }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"access": {
5
5
"description": "Whether reaching this work costs anything. ⚠️ A display hint and NEVER an authorization: it describes what a stranger would find, not what any particular viewer is entitled to, and a consumer that treats it as permission is wrong. An object rather than a bare string so that further context — such as where access is granted — can be added later without a breaking change.",
6
6
"properties": {
7
7
"state": {
8
8
"description": "`open` — anyone may reach the work at no cost. `gated` — reaching it requires supporting the creator or buying it, on terms shown on the work's own page. Terms themselves are deliberately absent: a price shown apart from the total a person actually pays is misleading, and this record cannot control how a consumer renders it.",
9
9
"knownValues": [
10
10
"open",
11
11
"gated"
12
12
],
13
13
"maxLength": 32,
14
14
"type": "string"
15
15
}
16
16
},
17
17
"required": [
18
18
"state"
19
19
],
20
20
"type": "object"
21
21
},
22
22
"main": {
23
23
"description": "One entry in a creator's Catalog — a game, video, album, essay, or other work they have released. This record is the public LISTING for that work: it says what the work is and where to reach it, and it never carries the work itself. It exists only while the work is publicly listed, and whether a particular person may open the work is decided by the service hosting it, never by this record.",
24
24
"key": "tid",
25
25
"record": {
26
26
"properties": {
27
27
"access": {
28
28
"ref": "#access",
29
29
"type": "ref"
30
30
},
31
31
"description": {
32
32
"description": "The creator's own summary of the work. Plain text, so that every consumer can render it safely without a sanitizer.",
33
33
"maxGraphemes": 3000,
34
34
"maxLength": 30000,
35
35
"type": "string"
36
36
},
37
37
"kind": {
38
-
"description": "What sort of work this is, in the sense of how it is handled — which player or reader opens it. Named `kind` rather than `type` because a record already carries `$type`, and two differently-scoped `type` fields in one object is a needless trap for anyone reading the JSON. This is an open set: consumers must accept values not listed here, because new mediums are added over time.",
38
+
"description": "What sort of work this is, in the sense of how it is handled — which player or reader opens it. Named `kind` rather than `type` because a record already carries `$type`, and two differently-scoped `type` fields in one object is a needless trap for anyone reading the JSON. `comic` and `music` are narrower than `ebook` and `audio`, which mean a book that is not a comic and audio that is not music. This is an open set: consumers must accept values not listed here, because new mediums are added over time.",
39
39
"knownValues": [
40
40
"text",
41
41
"video",
42
+
"music",
42
43
"audio",
43
44
"image",
45
+
"comic",
44
46
"ebook",
45
47
"game",
46
48
"software",
47
49
"physical",
48
50
"service"
49
51
],
50
52
"maxLength": 64,
51
53
"type": "string"
52
54
},
53
55
"releasedAt": {
54
56
"description": "When the work was released to the public. This is the work's own date and the only one the record carries — record-creation time is already encoded in the record key, so a separate field for it would be a second, weaker answer to a question the key already answers.",
55
57
"format": "datetime",
56
58
"type": "string"
57
59
},
58
60
"title": {
59
61
"description": "The work's name, as its creator wrote it. Plain text for the same reason the description is: every consumer should be able to render it without a sanitizer. Required and never empty — a listing that names nothing is worse than no listing, so a work without a title is not published rather than published anonymously.",
60
62
"maxGraphemes": 300,
61
63
"maxLength": 3000,
62
64
"type": "string"
63
65
},
64
66
"url": {
65
67
"description": "Where this work can be reached. Usually its page on the service hosting it; a creator hosting their own Catalog points at their own. Deliberately not assumed to be an anthers.org address, because a creator's work outliving any one host is the point.",
66
68
"format": "uri",
67
69
"type": "string"
68
70
}
69
71
},
70
72
"required": [
71
73
"kind",
72
74
"title",
73
75
"url",
74
76
"releasedAt"
75
77
],
76
78
"type": "object"
77
79
},
78
80
"type": "record"
79
81
}
80
82
},
81
83
"id": "org.anthers.work",
82
84
"lexicon": 1
83
85
}