space.highport.sites.defs

lexicons.highport.space

Schema Diff

+42 -9

From

CID
bafyreiheh3kw6lo...
Indexed At
2026-09-01 13:02 UTC
View this version

To

CID
bafyreienlmjm6gg...
Indexed At
2026-09-17 17:52 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 13 non-breaking changes.

Non-Breaking Changes (13)
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#access" }
  • 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#access.requireAuth" }
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#access.requireAuth:items" }
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#spaceMembers" }
  • AddedVertex AddedVertex { vertex_id: "space.highport.sites.defs#wellKnown.standardSitePublication" }
  • 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", tgt: "space.highport.sites.defs#access.requireAuth", kind: "prop", name: Some("requireAuth") }
  • 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 }
  • AddedEdge AddedEdge { src: "space.highport.sites.defs#access.requireAuth", tgt: "space.highport.sites.defs#access.requireAuth:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "space.highport.sites.defs#wellKnown", tgt: "space.highport.sites.defs#wellKnown.standardSitePublication", kind: "prop", name: Some("standardSitePublication") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "space.highport.sites.defs#access" }
  • 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#access.requireAuth" }
  • AddedVertex { vertex_id: "space.highport.sites.defs#access.requireAuth:items" }
  • AddedVertex { vertex_id: "space.highport.sites.defs#spaceMembers" }
  • AddedVertex { vertex_id: "space.highport.sites.defs#wellKnown.standardSitePublication" }

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", tgt: "space.highport.sites.defs#access.requireAuth", kind: "prop", name: Some("requireAuth") }
  • 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 }
  • Non-breaking: AddedEdge { src: "space.highport.sites.defs#access.requireAuth", tgt: "space.highport.sites.defs#access.requireAuth:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "space.highport.sites.defs#wellKnown", tgt: "space.highport.sites.defs#wellKnown.standardSitePublication", kind: "prop", name: Some("standardSitePublication") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 +
    "access": {
5 +
      "description": "Which parts of a site require a signed-in reader, and which readers qualify. Absent means nothing is gated and the owner budget decides every path, which suits most sites. This is content policy, not billing: it lives in the record, so it moves with the site and anyone can read it.",
6 +
      "properties": {
7 +
        "audience": {
8 +
          "closed": true,
9 +
          "description": "Who the requireAuth paths are for. Absent means any signed-in reader. Only meaningful alongside requireAuth. The union is closed so that a host which does not recognize an audience rejects the record instead of opening the gate to everyone.",
10 +
          "refs": [
11 +
            "space.highport.sites.defs#spaceMembers"
12 +
          ],
13 +
          "type": "union"
14 +
        },
15 +
        "requireAuth": {
16 +
          "description": "Path prefixes that always require a signed-in reader and always bill that reader, whatever the owner budget says. Matched against the normalized request path, so a prefix covers everything under it. \"/\" gates the whole site, the same as an owner budget of zero.",
17 +
          "items": {
18 +
            "maxLength": 1024,
19 +
            "type": "string"
20 +
          },
21 +
          "maxLength": 64,
22 +
          "type": "array"
23 +
        }
24 +
      },
25 +
      "type": "object"
26 +
    },
4 27
    "manifest": {
5 -
      "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.",
28 +
      "description": "A bundle of resources keyed by path, using bard's camelCase subset of a MASL bundle-mode document. It is a site's inline source or a tile's content.",
6 29
      "properties": {
7 30
        "name": {
8 -
          "description": "Bundle name. Required when the manifest is a tile's content; optional for an inline site source.",
31 +
          "description": "Bundle name. Required for tile content, optional for an inline site source.",
9 32
          "maxGraphemes": 100,
10 33
          "maxLength": 1000,
11 34
          "type": "string"
12 35
        },
13 36
        "resources": {
14 -
          "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.",
37 +
          "description": "Map of absolute request path (starting with '/') to space.highport.sites.defs#resource, since Lexicon has no map type. Tile content must have a '/' entry, and sites should.",
15 38
          "type": "unknown"
16 39
        }
17 40
      },
18 41
      "required": [
19 42
        "resources"
20 43
      ],
21 44
      "type": "object"
22 45
    },
23 46
    "redirect": {
24 47
      "properties": {
25 48
        "from": {
26 -
          "description": "The request path to match, optionally including a query string. Matching is exact.",
49 +
          "description": "The request path to match, optionally with a query string. Must match exactly.",
27 50
          "maxLength": 2048,
28 51
          "type": "string"
29 52
        },
30 53
        "status": {
31 54
          "description": "Redirect status. Defaults to 302.",
32 55
          "knownValues": [
33 56
            301,
34 57
            302,
35 58
            307,
36 59
            308
37 60
          ],
38 61
          "type": "integer"
39 62
        },
40 63
        "to": {
41 -
          "description": "Destination path. Must be an absolute path on this site that exists as a manifest key.",
64 +
          "description": "Destination path. Must be an absolute path that exists as a manifest key on this site.",
42 65
          "maxLength": 2048,
43 66
          "type": "string"
44 67
        }
45 68
      },
46 69
      "required": [
47 70
        "from",
48 71
        "to"
49 72
      ],
50 73
      "type": "object"
51 74
    },
52 75
    "resource": {
53 -
      "description": "A single addressable resource within a manifest.",
76 +
      "description": "One addressable resource in a manifest.",
54 77
      "properties": {
55 78
        "contentEncoding": {
56 -
          "description": "Declares the stored blob is already encoded with this algorithm; the origin serves it as-is with a matching Content-Encoding header.",
79 +
          "description": "The encoding the stored blob already has. The origin serves it unchanged, with a matching Content-Encoding header.",
57 80
          "knownValues": [
58 81
            "gzip",
59 82
            "br",
60 83
            "zstd",
61 84
            "identity"
62 85
          ],
63 86
          "type": "string"
64 87
        },
65 88
        "contentType": {
66 -
          "description": "Serve the asset with this content type instead of the blob's mimeType.",
89 +
          "description": "Content type to serve instead of the blob's mimeType.",
67 90
          "maxLength": 255,
68 91
          "type": "string"
69 92
        },
70 93
        "src": {
71 94
          "description": "The blob holding this resource's bytes.",
72 95
          "type": "blob"
73 96
        },
74 97
        "status": {
75 98
          "description": "Response status. Defaults to 200 for manifest entries and 404 for the notFound resource.",
76 99
          "knownValues": [
77 100
            200,
78 101
            404,
79 102
            410
80 103
          ],
81 104
          "type": "integer"
82 105
        }
83 106
      },
84 107
      "required": [
85 108
        "src"
86 109
      ],
87 110
      "type": "object"
88 111
    },
112 +
    "spaceMembers": {
113 +
      "description": "The members of the space this site lives in, as the space's host reports them. Only valid on a site served from a space, and rejected (not ignored) anywhere else. The record lists no members; the space's host is asked.",
114 +
      "properties": {},
115 +
      "type": "object"
116 +
    },
89 117
    "wellKnown": {
90 -
      "description": "Controls the responses bard synthesizes under /.well-known/. Every field defaults to true; the object exists only to turn things off.",
118 +
      "description": "Controls the responses bard generates under /.well-known/. Both flags default to true and exist only to turn things off. standardSitePublication is absent unless the publisher sets it.",
91 119
      "properties": {
92 120
        "atproto": {
93 121
          "description": "Serve GET /.well-known/atproto-did with the site's owning DID. Default true.",
94 122
          "type": "boolean"
95 123
        },
96 124
        "rasl": {
97 125
          "description": "Serve GET /.well-known/rasl/{cid} for every CID this site references. Default true.",
98 126
          "type": "boolean"
127 +
        },
128 +
        "standardSitePublication": {
129 +
          "description": "Serve GET /.well-known/site.standard.publication with this AT-URI. It must name a site.standard.publication record in the site owner's repository whose url host is this domain, or the site record is rejected at indexing. While set, a manifest entry at that path is rejected.",
130 +
          "format": "at-uri",
131 +
          "type": "string"
99 132
        }
100 133
      },
101 134
      "type": "object"
102 135
    }
103 136
  },
104 137
  "id": "space.highport.sites.defs",
105 138
  "lexicon": 1
106 139
}

Compare Other Versions

Lexicon Garden

@