Repository navigation
aliases: website.case-sensitive-paths opts in to case-only alias/page pairs (#944) - #952
Merged
Merged
Conversation
…/page pairs render (bd-ex8qvuwu) Triage record and minimal repro for GH #944. Q-5-25 reproduces at main @ 49cb226; it implements decision 3 of the 2026-08-12 aliases plan, which the issue deliberately revisits. Direction: keep the error by default, add an affirmative website.* option declaring the deployment target case-sensitive, and document the Quarto 1 discrepancy. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… pairs (#944, bd-ex8qvuwu) Q-5-25 rejected an alias whose stub differs from a rendered page only by case, with no escape hatch. Posit Connect's docs need exactly that pair: served from S3, R/ and r/ are distinct keys and the old URL must redirect. Keep the error as the default; add `website: case-sensitive-paths: true`. With it, plan_alias_stubs compares paths exactly and marks each stub that would have collided with a CaseFoldTwin. write_alias_redirects probes the output directory and, where it folds case, skips the twinned stub with the new Q-5-51 warning instead of overwriting the page. Both Q-5-25 shapes now hint at the option; non-website projects warn that it has no effect. Docs: Q-5-25, new Q-5-51, aliases guide, catalog, sidebar; decision 3 of the 2026-08-12 plan amended. Integration tests branch on a runtime probe of the temp dir so Linux CI exercises the write and macOS/Windows the skip. Triage doc: escape @-mentions and a possessive so claude-notes renders under --strict. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #944. Braid: bd-ex8qvuwu. Triage record:
claude-notes/issue-reports/944/triage.md.What
An alias whose redirect stub differs from a rendered page only by case (
r/index.qmddeclaringaliases: [/R/]) was a hardQ-5-25error with no escape hatch. That implemented decision 3 of the 2026-08-12 aliases plan, whose premise ("no realistic scenario wants a case-only pair") the Posit Connect docs port refuted: the site is served from S3, whereR/andr/are distinct keys and the old URLs must keep redirecting.This PR keeps the error as the default and adds an affirmative option:
With it set:
plan_alias_stubscompares paths exactly, so a case-only pair plans two stubs. Each stub that would have collided carries aCaseFoldTwinnaming the page or earlier stub it folds onto.write_alias_redirectsprobes the output directory (probe file written lowercase, looked up uppercase; only when a twin exists) and, if the directory folds case, skips the twinned stub with the new warningQ-5-51instead of overwriting the page with a redirect. Pages always win; between two stubs the one that sorts first wins.Q-5-25diagnostics now end with a hint naming the option. A non-website project that sets it gets a "no effect" warning, likewebsite.llms-txt.Docs:
Q-5-25.qmdand the aliases guide gain a "hosts that distinguish case" section and an expanded Quarto 1 comparison (Q1 compares exact strings, so it writes both files on Linux and silently replaces the page on macOS/Windows). NewQ-5-51.qmd, catalog entry, sidebar entry. Decision 3 of the plan is amended with a pointer to the triage.Tests — please watch both filesystem kinds in CI
The new integration tests do not gate on
cfg!(target_os). Each probes the temp directory it rendered into and asserts the outcome that directory calls for:Q-5-51, stub redirects to its page;Q-5-51present, no probe file left in_site.Locally both branches ran: default APFS, and a
Case-sensitive APFSdisk image mounted asTMPDIR. This is the first test in the repo whose assertions depend on the runner's filesystem, so the Linux and macOS/Windows jobs are exercising different branches of the same tests.cargo xtask verify --skip-hub-buildgreen locally.cargo clippy -p quarto-core --all-targets -- -D warningsclean. The Windows cross-check (--target x86_64-pc-windows-msvc) cannot run from macOS here becausewasmtime/tree-sitter/aws-lc-sysbuild scripts compile C for the target; the new code uses no platform-specific APIs (SystemRuntimeonly).🤖 Generated with Claude Code