# SPDX-FileCopyrightText: 2026 PythonWoods <dev@pythonwoods.dev>
# SPDX-License-Identifier: Apache-2.0
#
# Cloudflare Pages — True HTTP 301 Redirects
# Replaces mkdocs-redirects client-side meta-refresh with edge-level 301s.
# Format: /source /destination 301
#
# Legacy Framework routes → New Zensical (MkDocs) routes
# Legacy Framework served docs under /docs/<path>; Zensical serves from site root.
# MkDocs use_directory_urls=true: foo.md → /foo/, index.md → /

# ── User Documentation ─────────────────────────────────────────────────────────

# Root
/docs/index.html / 301

# Legacy Blog Tags fallback
/blog/tags/*  /blog/  301

# Tutorials
/docs/tutorials/first-audit.html /tutorials/first-audit/ 301
/docs/tutorials/examples/index.html /tutorials/examples/ 301

# Tutorials — Z1xx Links
/docs/tutorials/examples/z1xx-links/z101-broken-links.html /tutorials/examples/z1xx-links/z101-broken-links/ 301
/docs/tutorials/examples/z1xx-links/z102-anchor-missing.html /tutorials/examples/z1xx-links/z102-anchor-missing/ 301
/docs/tutorials/examples/z1xx-links/z103-orphan-link.html /tutorials/examples/z1xx-links/z103-orphan-link/ 301
/docs/tutorials/examples/z1xx-links/z104-file-not-found.html /tutorials/examples/z1xx-links/z104-file-not-found/ 301
/docs/tutorials/examples/z1xx-links/z105-absolute-path.html /tutorials/examples/z1xx-links/z105-absolute-path/ 301
/docs/tutorials/examples/z1xx-links/z107-circular-anchor.html /tutorials/examples/z1xx-links/z107-circular-anchor/ 301
/docs/tutorials/examples/z1xx-links/z108-empty-link-text.html /tutorials/examples/z1xx-links/z108-empty-link-text/ 301
/docs/tutorials/examples/z1xx-links/z109-external-link-broken.html /tutorials/examples/z1xx-links/z109-external-link-broken/ 301

# Tutorials — Z2xx Security
/docs/tutorials/examples/z2xx-security/z201-credentials.html /tutorials/examples/z2xx-security/z201-credentials/ 301
/docs/tutorials/examples/z2xx-security/z202-path-traversal.html /tutorials/examples/z2xx-security/z202-path-traversal/ 301
/docs/tutorials/examples/z2xx-security/z204-forbidden-term.html /tutorials/examples/z2xx-security/z204-forbidden-term/ 301

# Tutorials — Z3xx References
/docs/tutorials/examples/z3xx-references/z301-dangling-ref.html /tutorials/examples/z3xx-references/z301-dangling-ref/ 301
/docs/tutorials/examples/z3xx-references/z302-dead-def.html /tutorials/examples/z3xx-references/z302-dead-def/ 301
/docs/tutorials/examples/z3xx-references/z303-duplicate-def.html /tutorials/examples/z3xx-references/z303-duplicate-def/ 301

# Tutorials — Z4xx Topology
/docs/tutorials/examples/z4xx-topology/z401-missing-directory-index.html /tutorials/examples/z4xx-topology/z401-missing-directory-index/ 301
/docs/tutorials/examples/z4xx-topology/z402-orphan-page.html /tutorials/examples/z4xx-topology/z402-orphan-page/ 301
/docs/tutorials/examples/z4xx-topology/z403-missing-alt.html /tutorials/examples/z4xx-topology/z403-missing-alt/ 301
/docs/tutorials/examples/z4xx-topology/z404-config-asset-missing.html /tutorials/examples/z4xx-topology/z404-config-asset-missing/ 301
/docs/tutorials/examples/z4xx-topology/z405-unused-assets.html /tutorials/examples/z4xx-topology/z405-unused-assets/ 301
/docs/tutorials/examples/z4xx-topology/z406-nav-contract.html /tutorials/examples/z4xx-topology/z406-nav-contract/ 301

# Tutorials — Z5xx Content
/docs/tutorials/examples/z5xx-content/z501-placeholder.html /tutorials/examples/z5xx-content/z501-placeholder/ 301
/docs/tutorials/examples/z5xx-content/z502-short-content.html /tutorials/examples/z5xx-content/z502-short-content/ 301
/docs/tutorials/examples/z5xx-content/z503-snippet-error.html /tutorials/examples/z5xx-content/z503-snippet-error/ 301
/docs/tutorials/examples/z5xx-content/z505-untagged-code-block.html /tutorials/examples/z5xx-content/z505-untagged-code-block/ 301

# Tutorials — Z6xx Brand
/docs/tutorials/examples/z6xx-brand/z601-brand-obsolescence.html /tutorials/examples/z6xx-brand/z601-brand-obsolescence/ 301
/docs/tutorials/examples/z6xx-brand/z602-i18n-parity.html /tutorials/examples/z6xx-brand/z602-i18n-parity/ 301

# How-to Guides
/docs/how-to/install.html /how-to/install/ 301
/docs/how-to/initialize-configuration.html /how-to/initialize-configuration/ 301
/docs/how-to/configure-ci-cd.html /how-to/configure-ci-cd/ 301
/docs/how-to/add-badges.html /how-to/add-badges/ 301
/docs/how-to/handle-technical-debt.html /how-to/handle-technical-debt/ 301
/docs/how-to/add-custom-rules.html /how-to/add-custom-rules/ 301
/docs/how-to/configure-adapter.html /how-to/configure-adapter/ 301
/docs/how-to/configure-privacy-gate.html /how-to/configure-privacy-gate/ 301
/docs/how-to/configuration-strategy.html /how-to/configuration-strategy/ 301
/docs/how-to/manage-cross-site-links.html /how-to/manage-cross-site-links/ 301
/docs/how-to/migrate-engines.html /how-to/migrate-engines/ 301
/docs/how-to/use-brand-system.html /how-to/use-brand-system/ 301
/docs/how-to/workflow-integration.html /how-to/workflow-integration/ 301
/docs/how-to/configure-social-metadata.html /how-to/configure-social-metadata/ 301

# Reference
/docs/reference/index.html /reference/ 301
/docs/reference/finding-codes.html /reference/finding-codes/ 301
/docs/reference/checks.html /reference/checks/ 301
/docs/reference/cli.html /reference/cli/ 301
/docs/reference/configuration-reference.html /reference/configuration-reference/ 301
/docs/reference/scoring-algorithm.html /reference/scoring-algorithm/ 301
/docs/reference/suppression-policy.html /reference/suppression-policy/ 301
/docs/reference/engines.html /reference/engines/ 301
/docs/reference/advanced-features.html /reference/advanced-features/ 301
/docs/reference/api-json.html /reference/api-json/ 301
/docs/reference/brand-kit.html /reference/brand-kit/ 301
/docs/reference/brand-system.html /reference/brand-system/ 301
/docs/reference/glossary.html /reference/glossary/ 301
/docs/reference/zenzic-action.html /reference/zenzic-action/ 301

# Explanation
/docs/explanation/why-zenzic.html /explanation/why-zenzic/ 301
/docs/explanation/architecture.html /explanation/architecture/ 301
/docs/explanation/core-mechanics.html /explanation/core-mechanics/ 301
/docs/explanation/scoring-design.html /explanation/scoring-design/ 301
/docs/explanation/scoring-system.html /explanation/scoring-system/ 301
/docs/explanation/discovery.html /explanation/discovery/ 301
/docs/explanation/configuration-loading.html /explanation/configuration-loading/ 301
/docs/explanation/exclusion-design.html /explanation/exclusion-design/ 301
/docs/explanation/structural-integrity.html /explanation/structural-integrity/ 301
/docs/explanation/engine-migration-design.html /explanation/engine-migration-design/ 301
/docs/explanation/the-zenzic-trinity.html /explanation/the-zenzic-trinity/ 301
/docs/explanation/github-action-internals.html /explanation/github-action-internals/ 301
/docs/explanation/privacy-gate.html /explanation/privacy-gate/ 301
/docs/explanation/mineral-path.html /explanation/mineral-path/ 301
/docs/explanation/brand-philosophy.html /explanation/brand-philosophy/ 301
/docs/explanation/community-index.html /explanation/community-index/ 301
/explanation/ecosystem      /explanation/the-zenzic-trinity/  301

# ── Developer Documentation ────────────────────────────────────────────────────

/developers/index.html /developers/ 301
/developers/how-to/contribute/index.html /developers/how-to/contribute/ 301
/developers/how-to/contribute/pull-requests.html /developers/how-to/contribute/pull-requests/ 301
/developers/how-to/contribute/report-a-bug.html /developers/how-to/contribute/report-a-bug/ 301
/developers/how-to/contribute/report-a-docs-issue.html /developers/how-to/contribute/report-a-docs-issue/ 301
/developers/how-to/contribute/request-a-change.html /developers/how-to/contribute/request-a-change/ 301
/developers/how-to/implement-adapter.html /developers/how-to/implement-adapter/ 301
/developers/how-to/release-governance-protocol.html /developers/how-to/release-governance-protocol/ 301
/developers/how-to/write-a-check.html /developers/how-to/write-a-check/ 301
/developers/how-to/write-plugin.html /developers/how-to/write-plugin/ 301
/developers/reference/adapter-api.html /developers/reference/adapter-api/ 301
/developers/reference/adapter-examples.html /developers/reference/adapter-examples/ 301
/developers/reference/cli-architecture.html /developers/reference/cli-architecture/ 301
/developers/reference/credential-scanner-obligations.html /developers/reference/credential-scanner-obligations/ 301
/developers/reference/supply-chain-assurance-profile.html /developers/reference/supply-chain-assurance-profile/ 301
/developers/reference/zenzic-style.html /developers/reference/zenzic-style/ 301
/developers/explanation/adapter-internals.html /developers/explanation/adapter-internals/ 301
/developers/explanation/adr-agnostic-universalism.html /developers/explanation/adr-agnostic-universalism/ 301
/developers/explanation/adr-bilingual-structural.html /developers/explanation/adr-bilingual-structural/ 301
/developers/explanation/adr-decentralized-cli.html /developers/explanation/adr-decentralized-cli/ 301
/developers/explanation/adr-discovery.html /developers/explanation/adr-discovery/ 301
/developers/explanation/adr-lint-source.html /developers/explanation/adr-lint-source/ 301
/developers/explanation/adr-native-telemetry.html /developers/explanation/adr-native-telemetry/ 301
/developers/explanation/adr-parallel-early-termination.html /developers/explanation/adr-parallel-early-termination/ 301
/developers/explanation/adr-path-sovereignty.html /developers/explanation/adr-path-sovereignty/ 301
/developers/explanation/adr-regex-acl.html /developers/explanation/adr-regex-acl/ 301
/developers/explanation/adr-unified-perimeter.html /developers/explanation/adr-unified-perimeter/ 301
/developers/explanation/adr-vault.html /developers/explanation/adr-vault/ 301
/developers/explanation/core-laws.html /developers/explanation/core-laws/ 301
/developers/explanation/mdx-asset-rationale.html /developers/explanation/mdx-asset-rationale/ 301
/developers/explanation/sovereign-verification-model.html /developers/explanation/sovereign-verification-model/ 301
/developers/explanation/governance/index.html /developers/explanation/governance/ 301
/developers/explanation/governance/evolution_policy.html /developers/explanation/governance/evolution_policy/ 301
/developers/explanation/governance/exit_strategy.html /developers/explanation/governance/exit_strategy/ 301
/developers/explanation/governance/licensing.html /developers/explanation/governance/licensing/ 301
/developers/explanation/governance/technical-debt.html /developers/explanation/governance/technical-debt/ 301

# ── Blog (Legacy Framework /blog/<slug> routes) ───────────────────────────────
# MkDocs Material blog plugin generates canonical /blog/YYYY/MM/DD/<title-slug>/
# URLs (title-slugified, full ISO date path). Updated in Sprint 0.14.1.

/blog/welcome.html                                                            /blog/2026/04/28/welcome-to-the-zenzic-blog/ 301
/blog/tutorial-stop-broken-links-60s.html                                     /blog/2026/04/29/tutorial-get-started-with-zenzic/ 301
/blog/engineering-v080-deep-dive.html                                         /blog/2026/05/24/engineering-deep-dive-v080-architecture/ 301
/blog/log-v080.html                                                           /blog/2026/05/24/release-v080-governance-baseline/ 301
/blog/v080-namespace-contract.html                                            /blog/2026/05/24/the-namespace-contract/ 301
/blog/dqs-mathematical-model.html                                             /blog/2026/05/25/the-dqs-mathematical-model-flat-cost-suppressions-and-deterministic-gates/ 301
/blog/terminal-ux-documentation-governance.html                               /blog/2026/05/27/terminal-ux-as-a-governance-interface-how-zenzic-renders-diagnostic-contracts/ 301
/blog/enterprise-use-cases.html                                               /blog/2026/05/28/three-zenzic-deployment-patterns-for-teams/ 301
/blog/log-v090.html                                                           /blog/2026/05/30/release-v090-deterministic-telemetry/ 301
/blog/algorithmic-complexity-and-redos-prevention.html                        /blog/2026/06/03/why-we-banned-pythons-regex-module-the-algorithm-behind-zenzic/ 301
/blog/zenzic-v0.10.0-native-github-annotations-and-progressive-adoption.html /blog/2026/06/06/zenzic-v0100-async-engine-native-annotations-and-progressive-adoption/ 301
/blog/auditing-the-auditors-ast-based-documentation-analysis.html            /blog/2026/06/09/auditing-the-auditors-finding-documentation-defects-with-ast-based-analysis/ 301
/blog/why-we-dropped-docusaurus.html                                          /blog/2026/06/13/why-we-dropped-docusaurus-the-ontological-limits-of-static-analysis/ 301
/blog/obsidian-masterclass  /blog/  301

# ── ADR-020 Deprecation: Italian Locale Splat Redirect ──────────────────────────
# Replaces 80+ individual /it/* → /it/* dead routes with a single edge-level splat.
# All legacy Italian traffic is gracefully degraded to the English source (1:1 path).

# ADR-020 Deprecation: Gracefully degrade all legacy Italian traffic to the English source
/it/*  /:splat  301

# Legacy Docusaurus routing fallback
/docs/*  /:splat  301
