space.highport.sites.defs

lexicons.highport.space

Schema Diff

+14 -1

From

CID
bafyreidpbkq4zfs...
Indexed At
2026-09-04 22:52 UTC
View this version

To

CID
bafyreicnlisqk5t...
Indexed At
2026-09-11 23:53 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 6 non-breaking changes.

Non-Breaking Changes (6)
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#access.audience" }
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#access.audience:variant0" }
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#spaceMembers" }
  • AddedEdge AddedEdge { src: "space.highport.sites.defs#access", tgt: "space.highport.sites.defs#access.audience", kind: "prop", name: Some("audience") }
  • AddedEdge AddedEdge { src: "space.highport.sites.defs#access.audience", tgt: "space.highport.sites.defs#access.audience:variant0", kind: "variant", name: Some("space.highport.sites.defs#spaceMembers") }
  • AddedEdge AddedEdge { src: "space.highport.sites.defs#access.audience:variant0", tgt: "space.highport.sites.defs#spaceMembers", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "space.highport.sites.defs#access.audience" }
  • AddedVertex { vertex_id: "space.highport.sites.defs#access.audience:variant0" }
  • AddedVertex { vertex_id: "space.highport.sites.defs#spaceMembers" }

Additional Notes

  • Non-breaking: AddedEdge { src: "space.highport.sites.defs#access", tgt: "space.highport.sites.defs#access.audience", kind: "prop", name: Some("audience") }
  • Non-breaking: AddedEdge { src: "space.highport.sites.defs#access.audience", tgt: "space.highport.sites.defs#access.audience:variant0", kind: "variant", name: Some("space.highport.sites.defs#spaceMembers") }
  • Non-breaking: AddedEdge { src: "space.highport.sites.defs#access.audience:variant0", tgt: "space.highport.sites.defs#spaceMembers", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "access": {
5 -
      "description": "Which parts of a site require a signed-in reader. Absent means none of it: the domain's owner budget decides every path, which is the arrangement almost every site wants. This is content policy rather than a billing arrangement — it says which parts of a publication are premium, it survives moving to another host, and a reader of the record can see it without asking the host.",
5 +
      "description": "Which parts of a site require a signed-in reader, and which readers count. Absent means none of it: the domain's owner budget decides every path, which is the arrangement almost every site wants. This is content policy rather than a billing arrangement — it says which parts of a publication are premium and to whom, it survives moving to another host, and a reader of the record can see it without asking the host.",
6 6
      "properties": {
7 +
        "audience": {
8 +
          "closed": true,
9 +
          "description": "Who the paths in requireAuth are for. Absent means any signed-in reader, which is what requireAuth alone has always meant. Meaningful only alongside requireAuth: an audience with nothing gated narrows a gate that is not there. The union is closed because a host that cannot evaluate an audience must refuse the record rather than serve it to everybody — an unrecognized audience that fell open would be a gate quietly removed by a schema it did not understand.",
10 +
          "refs": [
11 +
            "space.highport.sites.defs#spaceMembers"
12 +
          ],
13 +
          "type": "union"
14 +
        },
7 15
        "requireAuth": {
8 16
          "description": "Path prefixes that always require a signed-in reader and always bill that reader, whatever the owner budget says and whether or not it is spent. Matched against the normalized request path, so a prefix covers everything beneath it. A prefix of \"/\" is the whole site and says the same thing as an owner budget of zero.",
9 17
          "items": {
10 18
            "maxLength": 1024,
11 19
            "type": "string"
12 20
          },
13 21
          "maxLength": 64,
14 22
          "type": "array"
15 23
        }
16 24
      },
17 25
      "type": "object"
18 26
    },
19 27
    "manifest": {
20 28
      "description": "A path-keyed bundle of resources — bard's camelCase subset of a MASL bundle-mode document. The inline source of a site, or the content of a tile.",
21 29
      "properties": {
22 30
        "name": {
23 31
          "description": "Bundle name. Required when the manifest is a tile's content; optional for an inline site source.",
24 32
          "maxGraphemes": 100,
25 33
          "maxLength": 1000,
26 34
          "type": "string"
27 35
        },
28 36
        "resources": {
29 37
          "description": "Map of absolute request path (beginning with '/') to space.highport.sites.defs#resource. Lexicon has no map type. A '/' entry is required for tile content and recommended for sites.",
30 38
          "type": "unknown"
31 39
        }
32 40
      },
33 41
      "required": [
34 42
        "resources"
35 43
      ],
36 44
      "type": "object"
37 45
    },
38 46
    "redirect": {
39 47
      "properties": {
40 48
        "from": {
41 49
          "description": "The request path to match, optionally including a query string. Matching is exact.",
42 50
          "maxLength": 2048,
43 51
          "type": "string"
44 52
        },
45 53
        "status": {
46 54
          "description": "Redirect status. Defaults to 302.",
47 55
          "knownValues": [
48 56
            301,
49 57
            302,
50 58
            307,
51 59
            308
52 60
          ],
53 61
          "type": "integer"
54 62
        },
55 63
        "to": {
56 64
          "description": "Destination path. Must be an absolute path on this site that exists as a manifest key.",
57 65
          "maxLength": 2048,
58 66
          "type": "string"
59 67
        }
60 68
      },
61 69
      "required": [
62 70
        "from",
63 71
        "to"
64 72
      ],
65 73
      "type": "object"
66 74
    },
67 75
    "resource": {
68 76
      "description": "A single addressable resource within a manifest.",
69 77
      "properties": {
70 78
        "contentEncoding": {
71 79
          "description": "Declares the stored blob is already encoded with this algorithm; the origin serves it as-is with a matching Content-Encoding header.",
72 80
          "knownValues": [
73 81
            "gzip",
74 82
            "br",
75 83
            "zstd",
76 84
            "identity"
77 85
          ],
78 86
          "type": "string"
79 87
        },
80 88
        "contentType": {
81 89
          "description": "Serve the asset with this content type instead of the blob's mimeType.",
82 90
          "maxLength": 255,
83 91
          "type": "string"
84 92
        },
85 93
        "src": {
86 94
          "description": "The blob holding this resource's bytes.",
87 95
          "type": "blob"
88 96
        },
89 97
        "status": {
90 98
          "description": "Response status. Defaults to 200 for manifest entries and 404 for the notFound resource.",
91 99
          "knownValues": [
92 100
            200,
93 101
            404,
94 102
            410
95 103
          ],
96 104
          "type": "integer"
97 105
        }
98 106
      },
99 107
      "required": [
100 108
        "src"
101 109
      ],
102 110
      "type": "object"
103 111
    },
112 +
    "spaceMembers": {
113 +
      "description": "The members of the space this site is held in, as its host answers for them. Valid only on a site served from a space; a site published to a repository has no space to ask about and the field is refused there rather than ignored. Carries no member list and names no identity: the space's own host is asked, and the answer is not part of the record.",
114 +
      "properties": {},
115 +
      "type": "object"
116 +
    },
104 117
    "wellKnown": {
105 118
      "description": "Controls the responses bard synthesizes under /.well-known/. Every field defaults to true; the object exists only to turn things off.",
106 119
      "properties": {
107 120
        "atproto": {
108 121
          "description": "Serve GET /.well-known/atproto-did with the site's owning DID. Default true.",
109 122
          "type": "boolean"
110 123
        },
111 124
        "rasl": {
112 125
          "description": "Serve GET /.well-known/rasl/{cid} for every CID this site references. Default true.",
113 126
          "type": "boolean"
114 127
        }
115 128
      },
116 129
      "type": "object"
117 130
    }
118 131
  },
119 132
  "id": "space.highport.sites.defs",
120 133
  "lexicon": 1
121 134
}

Compare Other Versions

Lexicon Garden

@