Skip to content

v2.6.1 - docs: stop publishing duplicate Docker and Windows pages - #1011

Merged
ajslater merged 1 commit into
developfrom
v2.6.1-docs-warts
Nov 8, 2026
Merged

ajslater merged 1 commit into
developfrom
v2.6.1-docs-warts

Conversation

@ajslater

@ajslater ajslater commented Nov 8, 2026

Copy link
Copy Markdown
Owner

The docs site published /docs/DOCKER/ and /docs/WINDOWS/ next to /DOCKER/ and /WINDOWS/ (both pairs were in sitemap.xml with the same content). The site's index page linked to the copies.

Why docs/docs/ existed

It came in with v1.10.0 (#543/#544). It held symlinks to ../DOCKER.md, ../WINDOWS.md and ../strange.jpg. Nothing names docs/docs (git grep across the repo, codex/ and frontend/ included). It existed so the README's repo-relative links (docs/DOCKER.md, docs/WINDOWS.md, docs/strange.jpg) still resolve when docs/README.md (a symlink to the README) is the site index. It's the same trick as docs/img for /img/logo.svg.

What changed

Deleted, not excluded: docs/docs/DOCKER.md and docs/docs/WINDOWS.md. I tried both ways of keeping the README links as they are, and both fail zensical build --strict with "page does not exist" on README.md:104 and :178:

  • excluding the files with exclude_docs, or
  • deleting them and adding redirects.

So the two README links now use the site URL, as the README's own Docker Hub callout (line 17) and DOCKER.md already do. That also fixes them on PyPI, which renders the README and can't follow repo-relative links.

Added redirects: /docs/DOCKER/ and /docs/WINDOWS/ have been public (and in the sitemap) since v1.10.0. Zensical's built-in redirects plugin turns them into stubs that forward to /DOCKER/ and /WINDOWS/, keeping any #anchor. The stubs aren't in the sitemap or the search index. devenv's merge_toml.py keeps a project's own zensical.toml keys, so the table survives update-devenv.

Kept:

  • docs/docs/strange.jpg: it's the README image's path on the site; without it the image breaks there.
  • docs/strange.jpg: the README's image on GitHub, and the target of that symlink.

Also deleted: docs/NEWS/codex (a symlink to ../codex/) and its sdist source-exclude entry in pyproject.toml. It's a MkDocs-era leftover. Zensical rewrites NEWS.md's raw <img src="codex/img/logo.svg"> to ../codex/img/logo.svg, so the only thing the symlink did was publish an unused /NEWS/codex/img/logo.svg.

Left alone:

  • docs/codex and docs/img. They publish only logo.svg (theme logo and the README's /img/logo.svg), no pages.
  • The nav. The README links to WINDOWS.md, so it's reachable without a nav entry.

Version: 2.6.1 in pyproject.toml, frontend/package.json and uv.lock, the same three files the v2.6.0 bump touched. NEWS has a ## v2.6.1 section.

Verification

  • make docs (strict): "No issues found".
  • site/sitemap.xml lists /, /DOCKER/, /NEWS/ and /WINDOWS/, once each. Before: plus /docs/DOCKER/ and /docs/WINDOWS/. search.json has the same four pages.
  • I parsed every built page: every internal href and src resolves, #fragments included.
  • The anchors the app links to are present: /DOCKER/#migrating-from-docker-hub, /#reset-the-admin-password, /#administration.
  • make fix: clean apart from formatter noise in Dockerfile, which I reverted (this PR doesn't touch it).
  • make -k lint: everything passes except dockerfmt --check ./Dockerfile. That fails locally on untouched develop too: both local dockerfmt builds (~/go/bin and Homebrew) disagree with CI's ghcr.io/reteps/dockerfmt:latest, which passed this same Dockerfile on develop.
  • uv build --sdist builds codex-2.6.1.
  • I didn't run the test suite: this is docs and version strings only.

Follow-up (not fixed here)

NEWS.md's logo, <img src="codex/img/logo.svg">, is broken on GitHub, because codex/img/ doesn't exist at the repo root. It works on the site. /img/logo.svg, which the README uses, would work in both places.

🤖 Generated with Claude Code

docs/docs/ held symlinks to DOCKER.md, WINDOWS.md and strange.jpg so the
README's repo-relative links (docs/DOCKER.md) resolved when the README is
the site index. The site published /docs/DOCKER/ and /docs/WINDOWS/ beside
/DOCKER/ and /WINDOWS/, and the index linked to the copies.

Excluding the copies or redirecting them fails the strict build: the
README's links then point at pages that do not exist. So the two links now
use the site URL, as the README's Docker Hub link already does, which also
fixes them on PyPI. The page symlinks go, and redirect stubs keep the old
/docs/ URLs working. docs/docs/strange.jpg stays: it is the README image's
site path, like docs/img.

docs/NEWS/codex went too: Zensical rewrites NEWS.md's raw <img> to
../codex/img/logo.svg, so the symlink only published an unused copy. Its
sdist source-exclude entry goes with it.

Bump to 2.6.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ajslater
ajslater merged commit 195e962 into develop Nov 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant