Skip to content

Commit 263f868

Browse files
louis-preclaude
andcommitted
fix: Ensure all redirect targets point to files, not bare directories
Replace bare directory targets with explicit README.md paths and update the validator to reject directories. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 30fc291 commit 263f868

2 files changed

Lines changed: 15 additions & 15 deletions

File tree

.gitbook.yaml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ redirects:
2323
core-concepts/connect-webviews: core-concepts/connect-webviews/README.md
2424
device-guides/4suites-locks: device-and-system-integration-guides/4suites-locks/README.md
2525
device-guides/assa-abloy-visionline-access-control-system-in-development: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
26-
device-guides/assa-abloy-visionline-access-control-system-in-development/credential-types: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
27-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/visionline-credential-metadata: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
26+
device-guides/assa-abloy-visionline-access-control-system-in-development/credential-types: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
27+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/visionline-credential-metadata: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
2828
device-guides/assa-abloy-visionline-access-control-system-in-development/common-use-cases: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/common-use-cases.md
29-
capability-guides/access-systems/understanding-acs-differences: capability-guides/access-systems
29+
capability-guides/access-systems/understanding-acs-differences: capability-guides/access-systems/README.md
3030
capability-guides/thermostats/creating-and-managing-climate-schedules: capability-guides/thermostats/creating-and-managing-thermostat-schedules.md
3131
device-guides/get-started-with-schlage-locks: device-and-system-integration-guides/schlage-locks/get-started-with-schlage-locks.md
3232
api-clients/access-codes/convert-an-unmanaged-access-code: api/access_codes/unmanaged/convert_to_managed.md
@@ -94,7 +94,7 @@ redirects:
9494
api-clients/connected-accounts/list-connected-accounts: api/connected_accounts/list.md
9595
api-clients/connected-accounts/update-a-connected-account: api/connected_accounts/update.md
9696
api-clients/connected-accounts: api/connected_accounts/README.md
97-
api-clients/devices/delete-device: api/devices
97+
api-clients/devices/delete-device: api/devices/README.md
9898
api-clients/devices/get-device-1: api/devices/unmanaged/get.md
9999
api-clients/devices/get-device: api/devices/get.md
100100
api-clients/devices/list-device-providers: api/devices/list_device_providers.md
@@ -113,7 +113,7 @@ redirects:
113113
api-clients/noise-sensors/list-noise-thresholds: api/noise_sensors/noise_thresholds/list.md
114114
api-clients/noise-sensors/update-noise-threshold: api/noise_sensors/noise_thresholds/update.md
115115
api-clients/noise-sensors: api/noise_sensors/README.md
116-
api-clients/thermostats/get-thermostat: api/thermostats
116+
api-clients/thermostats/get-thermostat: api/thermostats/README.md
117117
api-clients/thermostats/list-thermostats: api/thermostats/list.md
118118
api-clients/thermostats/set-fan-mode: api/thermostats/set_fan_mode.md
119119
api-clients/thermostats/set-to-cool-mode: api/thermostats/cool.md
@@ -182,13 +182,13 @@ redirects:
182182
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/visionline-acs-setup-instructions/developing-and-launching-your-visionline-mobile-key-app/launching-your-visionline-mobile-key-app/step-7-purchase-and-import-the-callback-and-mobile-service-options-from-assa-abloy: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/visionline-acs-setup-instructions/developing-and-launching-your-visionline-mobile-key-app/launching-your-visionline-mobile-key-app/step-7-purchase-and-import-the-callback-and-mobile-service-options-from-assa-abloy.md
183183
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/visionline-acs-setup-instructions/developing-and-launching-your-visionline-mobile-key-app/launching-your-visionline-mobile-key-app/step-8-create-a-production-workspace: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/visionline-acs-setup-instructions/developing-and-launching-your-visionline-mobile-key-app/launching-your-visionline-mobile-key-app/step-8-create-a-production-workspace.md
184184
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/visionline-acs-setup-instructions/developing-and-launching-your-visionline-mobile-key-app/launching-your-visionline-mobile-key-app/step-9-connect-your-visionline-production-account-to-seam: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/visionline-acs-setup-instructions/developing-and-launching-your-visionline-mobile-key-app/launching-your-visionline-mobile-key-app/step-9-connect-your-visionline-production-account-to-seam.md
185-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
186-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/issuing-various-types-of-guest-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
187-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/issuing-various-types-of-guest-joiner-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
188-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/retrieving-guest-and-common-entrances: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
189-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/checking-if-a-user-identity-has-a-phone-that-is-set-up-for-a-credential-manager: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
190-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/updating-guest-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
191-
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/revoking-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system
185+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
186+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/issuing-various-types-of-guest-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
187+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/issuing-various-types-of-guest-joiner-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
188+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/retrieving-guest-and-common-entrances: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
189+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/checking-if-a-user-identity-has-a-phone-that-is-set-up-for-a-credential-manager: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
190+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/updating-guest-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
191+
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/credential-types/revoking-mobile-credentials: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/README.md
192192
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/mobile-credential-related-properties: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/mobile-credential-related-properties.md
193193
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/common-use-cases: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/common-use-cases.md
194194
device-and-system-integration-guides/assa-abloy-visionline-access-control-system-in-development/special-requirements-for-android-mobile-access-sdk-development: device-and-system-integration-guides/assa-abloy-visionline-access-control-system/special-requirements-for-android-mobile-access-sdk-development.md

codegen/validate-redirects.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { existsSync, readFileSync } from 'node:fs'
1+
import { existsSync, readFileSync, statSync } from 'node:fs'
22
import { join } from 'node:path'
33

44
import YAML from 'yaml'
@@ -20,8 +20,8 @@ const redirects: Redirect[] = Object.entries(gitbookConfig.redirects ?? {}).map(
2020

2121
// Check if a path resolves to a page as a file, URL slug, or directory index.
2222
function pageExists(fullPath: string): boolean {
23-
// Exact file match (e.g., quickstart.md)
24-
if (existsSync(fullPath)) return true
23+
// Exact file match (e.g., quickstart.md) — must be a file, not a directory
24+
if (existsSync(fullPath) && statSync(fullPath).isFile()) return true
2525
// URL-style target without .md extension (e.g., api/devices → api/devices.md)
2626
if (!fullPath.endsWith('.md') && existsSync(fullPath + '.md')) return true
2727
// README.md targets resolve as directory URLs in GitBook, so check if the

0 commit comments

Comments
 (0)