From 6901893008a790e6cfd183ff1fb6ae1650779238 Mon Sep 17 00:00:00 2001 From: Corey Thomas <125082303+Corey-T1000@users.noreply.github.com> Date: Thu, 13 Aug 2026 12:49:50 -0400 Subject: [PATCH 1/2] fix(docs): repair 7 broken internal links Relative MDX hrefs are emitted raw into the HTML and resolved by the browser against a URL with no trailing slash, so `./x` is a sibling and `../` climbs one level higher than expected. Materialize (introduced in #574): - overview: `../../concepts/permission-sets` and `../../concepts/permission-set-lifecycle` resolved to `/docs/concepts/*`, which redirects to the SpiceDB FAQ. - download-permission-sets: two `./concepts/permission-set-lifecycle` links resolved to `/docs/materialize/api/concepts/*` (404). The `../concepts/ snapshots` link in the same file was already correct. SpiceDB (pre-existing): - protecting-a-blog: `[running instance]` pointed at the removed `getting-started/installing-spicedb`. - ops/data/migrations: `../getting-started/installing-zed` resolved to `/spicedb/ops/getting-started/installing-zed` (404); made absolute. - tutorials/federated-authorization: `/spicedb/getting-started/install` has no index page, only per-OS children. Points at `install/docker`, matching the first-steps card. Verified against the live site and with a full sweep of all 93 pages; the only remaining relative-link report is a false positive on a footnote. --- app/materialize/api/download-permission-sets/page.mdx | 4 ++-- app/materialize/getting-started/overview/page.mdx | 2 +- app/spicedb/getting-started/protecting-a-blog/page.mdx | 2 +- app/spicedb/ops/data/migrations/page.mdx | 2 +- app/spicedb/tutorials/federated-authorization/page.mdx | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/materialize/api/download-permission-sets/page.mdx b/app/materialize/api/download-permission-sets/page.mdx index 4c9b3532..212ef933 100644 --- a/app/materialize/api/download-permission-sets/page.mdx +++ b/app/materialize/api/download-permission-sets/page.mdx @@ -9,7 +9,7 @@ import { Callout } from "nextra/components"; -For large datasets, `DownloadPermissionSets` is a faster alternative to [LookupPermissionSets] for the initial [backfill](./concepts/permission-set-lifecycle): instead of streaming individual events over a single connection, it hands you a manifest of files you can fetch directly from blob storage, in parallel. +For large datasets, `DownloadPermissionSets` is a faster alternative to [LookupPermissionSets] for the initial [backfill](../concepts/permission-set-lifecycle): instead of streaming individual events over a single connection, it hands you a manifest of files you can fetch directly from blob storage, in parallel. ## Request @@ -23,7 +23,7 @@ The request maps to [`DownloadPermissionSetsRequest`]: If `optional_at_revision` is omitted, Materialize returns files for the latest fully-published revision. If provided, Materialize returns files for that specific revision if they're still available (see [Snapshot rotation](../concepts/snapshots#snapshot-lifecycle-events)). -Once you've backfilled from the downloaded files, switch to [WatchPermissionSets] to keep your copy current. See [The Permission Set Lifecycle](./concepts/permission-set-lifecycle) for the full flow. +Once you've backfilled from the downloaded files, switch to [WatchPermissionSets] to keep your copy current. See [The Permission Set Lifecycle](../concepts/permission-set-lifecycle) for the full flow. ## Response diff --git a/app/materialize/getting-started/overview/page.mdx b/app/materialize/getting-started/overview/page.mdx index ca783e3f..7d613200 100644 --- a/app/materialize/getting-started/overview/page.mdx +++ b/app/materialize/getting-started/overview/page.mdx @@ -42,7 +42,7 @@ Accelerated Queries use Materialize's precomputed permissions cache to answer th Event Streams let you take Materialize's precomputed permission data out of SpiceDB and keep your own copy of it — either colocated alongside the data it protects in your application database, or in a secondary index like a search engine. -- Download the current state of every [permission set](../../concepts/permission-sets) with `LookupPermissionSets`, then keep it current in real time with `WatchPermissionSets`. See [The Permission Set Lifecycle](../../concepts/permission-set-lifecycle). +- Download the current state of every [permission set](../concepts/permission-sets) with `LookupPermissionSets`, then keep it current in real time with `WatchPermissionSets`. See [The Permission Set Lifecycle](../concepts/permission-set-lifecycle). - Build authorization-aware UIs — sort, filter, and paginate over many thousands of authorized objects natively in your own database by colocating computed permissions next to your application data. - Perform ACL filtering in secondary indexes too, like a search index (e.g. Elasticsearch) — authorization-aware UIs and search-index filtering are the same idea (ACL filtering) applied to different stores. diff --git a/app/spicedb/getting-started/protecting-a-blog/page.mdx b/app/spicedb/getting-started/protecting-a-blog/page.mdx index 32792dad..83508206 100644 --- a/app/spicedb/getting-started/protecting-a-blog/page.mdx +++ b/app/spicedb/getting-started/protecting-a-blog/page.mdx @@ -28,7 +28,7 @@ docker run --rm -p 50051:50051 authzed/spicedb serve --grpc-preshared-key "t_you [Authzed Cloud]: https://authzed.com/cloud/signup [SpiceDB]: https://github.com/authzed/spicedb -[running instance]: /spicedb/getting-started/installing-spicedb +[running instance]: /spicedb/getting-started/install/docker ## Installing the Client diff --git a/app/spicedb/ops/data/migrations/page.mdx b/app/spicedb/ops/data/migrations/page.mdx index 83dacc5f..89eb4df6 100644 --- a/app/spicedb/ops/data/migrations/page.mdx +++ b/app/spicedb/ops/data/migrations/page.mdx @@ -28,7 +28,7 @@ This section covers migrating data from one SpiceDB instance to another with min ## Pre-requisites -- [zed](../getting-started/installing-zed) +- [zed](/spicedb/getting-started/installing-zed) ## Options diff --git a/app/spicedb/tutorials/federated-authorization/page.mdx b/app/spicedb/tutorials/federated-authorization/page.mdx index af23fbfd..cc076c3b 100644 --- a/app/spicedb/tutorials/federated-authorization/page.mdx +++ b/app/spicedb/tutorials/federated-authorization/page.mdx @@ -14,7 +14,7 @@ Point them at an internal user you own, and bind each external account to it. ## Prerequisites - A running SpiceDB instance. - [Install SpiceDB](/spicedb/getting-started/install) and start it. + [Install SpiceDB](/spicedb/getting-started/install/docker) and start it. - The [`zed` CLI](/spicedb/getting-started/installing-zed), pointed at your instance: ```sh From 77f4e019a64ce7950c51a42863a4bd92fbd34193 Mon Sep 17 00:00:00 2001 From: Corey Thomas <125082303+Corey-T1000@users.noreply.github.com> Date: Thu, 13 Aug 2026 14:31:56 -0400 Subject: [PATCH 2/2] fix(docs): make materialize cross-section links open in the same tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Materialize pages referenced SpiceDB and AuthZed concepts with fully-qualified https://authzed.com/docs/... URLs, carried over from the original authzed/concepts/authzed-materialize page. Nextra's anchor component treats any http(s) href as external, so those links rendered with target="_blank" and an external-link arrow — while links within the Materialize section stayed in-tab. Rewrites the 10 affected link definitions to root-relative paths, matching how app/spicedb already links across sections. Also fixes preview deploys, where the absolute URLs navigated away to production. --- app/materialize/concepts/snapshots/page.mdx | 2 +- app/materialize/concepts/watched-permissions/page.mdx | 6 +++--- app/materialize/getting-started/limitations/page.mdx | 10 +++++----- app/materialize/getting-started/overview/page.mdx | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/materialize/concepts/snapshots/page.mdx b/app/materialize/concepts/snapshots/page.mdx index 7d21e2ae..fba99a11 100644 --- a/app/materialize/concepts/snapshots/page.mdx +++ b/app/materialize/concepts/snapshots/page.mdx @@ -18,7 +18,7 @@ A permission set snapshot is a further step removed: it's what Materialize has c Internally, AuthZed engineers sometimes call this a **groupstore**. On this page, "snapshot" always refers to the permission set snapshot unless stated otherwise. -[spicedb-revision]: https://authzed.com/docs/spicedb/concepts/consistency#zedtokens +[spicedb-revision]: /spicedb/concepts/consistency#zedtokens Permission set snapshots underpin both Materialize features: they're what Materialize [hydrates](./hydration) in order to answer Accelerated Queries, and they're what make the Event Streams APIs compose safely: diff --git a/app/materialize/concepts/watched-permissions/page.mdx b/app/materialize/concepts/watched-permissions/page.mdx index b22ca832..4221dff3 100644 --- a/app/materialize/concepts/watched-permissions/page.mdx +++ b/app/materialize/concepts/watched-permissions/page.mdx @@ -48,6 +48,6 @@ The permission's path also can't cross any of the schema features Materialize do permissions. -[Caveats]: https://authzed.com/docs/spicedb/concepts/caveats -[Wildcard]: https://authzed.com/docs/spicedb/concepts/schema#wildcards -[.all intersections]: https://authzed.com/docs/spicedb/concepts/schema#all-intersection-arrow +[Caveats]: /spicedb/concepts/caveats +[Wildcard]: /spicedb/concepts/schema#wildcards +[.all intersections]: /spicedb/concepts/schema#all-intersection-arrow diff --git a/app/materialize/getting-started/limitations/page.mdx b/app/materialize/getting-started/limitations/page.mdx index e903e35e..f1d60df4 100644 --- a/app/materialize/getting-started/limitations/page.mdx +++ b/app/materialize/getting-started/limitations/page.mdx @@ -15,8 +15,8 @@ description: "Current limitations of AuthZed Materialize, including caveats, wil - [Expiring relationships] aren't supported. - Materialize takes time to compute the denormalized relationship updates, so if you are streaming the changes to your database, your application must be able to tolerate some lag. -[Caveats]: https://authzed.com/docs/spicedb/concepts/caveats -[Wildcard]: https://authzed.com/docs/spicedb/concepts/schema#wildcards -[.all intersections]: https://authzed.com/docs/spicedb/concepts/schema#all-intersection-arrow -[expiring relationships]: https://authzed.com/docs/spicedb/concepts/expiring-relationships -[Dedicated]: https://authzed.com/docs/authzed/guides/picking-a-product#dedicated +[Caveats]: /spicedb/concepts/caveats +[Wildcard]: /spicedb/concepts/schema#wildcards +[.all intersections]: /spicedb/concepts/schema#all-intersection-arrow +[expiring relationships]: /spicedb/concepts/expiring-relationships +[Dedicated]: /authzed/guides/picking-a-product#dedicated diff --git a/app/materialize/getting-started/overview/page.mdx b/app/materialize/getting-started/overview/page.mdx index 7d613200..de97d7d8 100644 --- a/app/materialize/getting-started/overview/page.mdx +++ b/app/materialize/getting-started/overview/page.mdx @@ -46,4 +46,4 @@ Event Streams let you take Materialize's precomputed permission data out of Spic - Build authorization-aware UIs — sort, filter, and paginate over many thousands of authorized objects natively in your own database by colocating computed permissions next to your application data. - Perform ACL filtering in secondary indexes too, like a search index (e.g. Elasticsearch) — authorization-aware UIs and search-index filtering are the same idea (ACL filtering) applied to different stores. -[Dedicated]: https://authzed.com/docs/authzed/guides/picking-a-product#dedicated +[Dedicated]: /authzed/guides/picking-a-product#dedicated