space.highport.sites.defs

lexicons.highport.space

Schema Diff

+29 -11

From

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

To

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

Compatibility Analysis

Backward Compatible

Backward compatible. 8 non-breaking changes.

Non-Breaking Changes (8)
  • 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" }
  • 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.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#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.audience" }
  • AddedVertex { vertex_id: "space.highport.sites.defs#access.audience:variant0" }
  • 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.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#wellKnown", tgt: "space.highport.sites.defs#wellKnown.standardSitePublication", kind: "prop", name: Some("standardSitePublication") }
1 1
{
2 2
  "id": "space.highport.sites.defs",
3 3
  "defs": {
4 4
    "access": {
5 5
      "type": "object",
6 6
      "properties": {
7 +
        "audience": {
8 +
          "refs": [
9 +
            "space.highport.sites.defs#spaceMembers"
10 +
          ],
11 +
          "type": "union",
12 +
          "closed": true,
13 +
          "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."
14 +
        },
7 15
        "requireAuth": {
8 16
          "type": "array",
9 17
          "items": {
10 18
            "type": "string",
11 19
            "maxLength": 1024
12 20
          },
13 21
          "maxLength": 64,
14 -
          "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."
22 +
          "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."
15 23
        }
16 24
      },
17 -
      "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."
25 +
      "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."
18 26
    },
19 27
    "manifest": {
20 28
      "type": "object",
21 29
      "required": [
22 30
        "resources"
23 31
      ],
24 32
      "properties": {
25 33
        "name": {
26 34
          "type": "string",
27 35
          "maxLength": 1000,
28 -
          "description": "Bundle name. Required when the manifest is a tile's content; optional for an inline site source.",
36 +
          "description": "Bundle name. Required for tile content, optional for an inline site source.",
29 37
          "maxGraphemes": 100
30 38
        },
31 39
        "resources": {
32 40
          "type": "unknown",
33 -
          "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."
41 +
          "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."
34 42
        }
35 43
      },
36 -
      "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."
44 +
      "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."
37 45
    },
38 46
    "redirect": {
39 47
      "type": "object",
40 48
      "required": [
41 49
        "from",
42 50
        "to"
43 51
      ],
44 52
      "properties": {
45 53
        "to": {
46 54
          "type": "string",
47 55
          "maxLength": 2048,
48 -
          "description": "Destination path. Must be an absolute path on this site that exists as a manifest key."
56 +
          "description": "Destination path. Must be an absolute path that exists as a manifest key on this site."
49 57
        },
50 58
        "from": {
51 59
          "type": "string",
52 60
          "maxLength": 2048,
53 -
          "description": "The request path to match, optionally including a query string. Matching is exact."
61 +
          "description": "The request path to match, optionally with a query string. Must match exactly."
54 62
        },
55 63
        "status": {
56 64
          "type": "integer",
57 65
          "description": "Redirect status. Defaults to 302.",
58 66
          "knownValues": [
59 67
            301,
60 68
            302,
61 69
            307,
62 70
            308
63 71
          ]
64 72
        }
65 73
      }
66 74
    },
67 75
    "resource": {
68 76
      "type": "object",
69 77
      "required": [
70 78
        "src"
71 79
      ],
72 80
      "properties": {
73 81
        "src": {
74 82
          "type": "blob",
75 83
          "description": "The blob holding this resource's bytes."
76 84
        },
77 85
        "status": {
78 86
          "type": "integer",
79 87
          "description": "Response status. Defaults to 200 for manifest entries and 404 for the notFound resource.",
80 88
          "knownValues": [
81 89
            200,
82 90
            404,
83 91
            410
84 92
          ]
85 93
        },
86 94
        "contentType": {
87 95
          "type": "string",
88 96
          "maxLength": 255,
89 -
          "description": "Serve the asset with this content type instead of the blob's mimeType."
97 +
          "description": "Content type to serve instead of the blob's mimeType."
90 98
        },
91 99
        "contentEncoding": {
92 100
          "type": "string",
93 -
          "description": "Declares the stored blob is already encoded with this algorithm; the origin serves it as-is with a matching Content-Encoding header.",
101 +
          "description": "The encoding the stored blob already has. The origin serves it unchanged, with a matching Content-Encoding header.",
94 102
          "knownValues": [
95 103
            "gzip",
96 104
            "br",
97 105
            "zstd",
98 106
            "identity"
99 107
          ]
100 108
        }
101 109
      },
102 -
      "description": "A single addressable resource within a manifest."
110 +
      "description": "One addressable resource in a manifest."
103 111
    },
104 112
    "wellKnown": {
105 113
      "type": "object",
106 114
      "properties": {
107 115
        "rasl": {
108 116
          "type": "boolean",
109 117
          "description": "Serve GET /.well-known/rasl/{cid} for every CID this site references. Default true."
110 118
        },
111 119
        "atproto": {
112 120
          "type": "boolean",
113 121
          "description": "Serve GET /.well-known/atproto-did with the site's owning DID. Default true."
122 +
        },
123 +
        "standardSitePublication": {
124 +
          "type": "string",
125 +
          "format": "at-uri",
126 +
          "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."
114 127
        }
115 128
      },
116 -
      "description": "Controls the responses bard synthesizes under /.well-known/. Every field defaults to true; the object exists only to turn things off."
129 +
      "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."
130 +
    },
131 +
    "spaceMembers": {
132 +
      "type": "object",
133 +
      "properties": {},
134 +
      "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."
117 135
    }
118 136
  },
119 137
  "$type": "com.atproto.lexicon.schema",
120 138
  "lexicon": 1
121 139
}

Compare Other Versions

Lexicon Garden

@