Skip to content

docs(web): consolidate 4.0 docs to one v4.0 line, drop stale snapshot#2827

Merged
bpamiri merged 4 commits into
developfrom
peter/docs-version-cleanup
May 28, 2026
Merged

docs(web): consolidate 4.0 docs to one v4.0 line, drop stale snapshot#2827
bpamiri merged 4 commits into
developfrom
peter/docs-version-cleanup

Conversation

@bpamiri
Copy link
Copy Markdown
Collaborator

@bpamiri bpamiri commented May 28, 2026

Summary

The guides/api version switcher topped out at v4.0.0 and still listed a stale v4.0.1-SNAPSHOT dev entry, so the live docs looked frozen at the GA patch even though 4.0.2 has shipped. This adopts a per-minor docs convention for the 4.0 line and removes the vestigial snapshot.

  • Relabel the 4.0 stable docs entry to "v4.0 (current)" (was "v4.0.0") on both guides and api. 4.0.0/4.0.1/4.0.2 share the one v4-0-0 tree, so the label tracks the line, not the GA patch (no more per-patch label churn). The URL slug is unchanged (/v4-0-0/), so no redirects/SEO risk for existing GA backlinks.
  • Delete the v4-0-1-snapshot guides tree (190 files). It was a pre-GA fork that fell behind v4-0-0 — missing the reorganized deploy command tree, and its deploy nav was empty. Both sites deploy from develop, so in-progress patch docs already live in v4-0-0 directly; a separate *-snapshot tree is only warranted when a different minor/major (e.g. v4-1-snapshot) is in development.
  • Salvage the snapshot's one unique page — upgrading/changelog.mdx ("Reading the Changelog") — into v4-0-0/ (git rename, history preserved) and wire it into the Upgrading sidebar group (it was an orphan even in the snapshot).
  • Courtesy redirects /v4-0-1-snapshot/*/v4-0-0/* for the high-traffic landings (root, start-here/installing, start-here/tutorial, command-line-tools).
  • Drop now-dangling snapshot references: verify-docs DEFAULT_TARGET, the docs-root version index, STYLE.md, the writing-docs site-layout note, and two component comment examples.

Test plan

  • grep for residual v4-0-1-snapshot repo-wide — only the intended redirect block remains
  • pnpm --filter @wheels-dev/site-guides build — 432 pages, clean; salvaged page renders at /v4-0-0/upgrading/changelog/; no snapshot content built
  • pnpm --filter @wheels-dev/site-api build — 2739 pages, clean
  • Redirect stub at /v4-0-1-snapshot/start-here/installing/ emits <meta http-equiv="refresh" ... url=/v4-0-0/start-here/installing/>
  • Sidebar JSON valid; "Reading the Changelog" present in the Upgrading group
  • CI doc-build + link-check workflows green

🤖 Generated with Claude Code

…snapshot

The version switcher now labels the 4.0 stable docs "v4.0 (current)" instead of
"v4.0.0" on both guides and api. 4.0.0/4.0.1/4.0.2 share one per-minor docs tree
(v4-0-0), so freezing the label at the GA patch made the live docs look stale.

Removed the vestigial v4-0-1-snapshot guides tree. It was a pre-GA fork that fell
behind v4-0-0 (missing the reorganized deploy command tree; its deploy nav was
empty). Both sites deploy from develop, so in-progress patch docs already live in
v4-0-0 directly -- a separate snapshot tree is only warranted when a different
minor/major (e.g. v4-1-snapshot) is under development.

Salvaged the one page unique to the snapshot, upgrading/changelog.mdx ("Reading
the Changelog"), into v4-0-0 and wired it into the Upgrading sidebar group (it was
an orphan even in the snapshot). Added courtesy redirects /v4-0-1-snapshot/* ->
/v4-0-0/* for the high-traffic landings.

Also dropped now-dangling snapshot references: verify-docs DEFAULT_TARGET, the
docs root version index, STYLE.md, the writing-docs site-layout note, and two
component comment examples.

Verified: guides (432 pages) and api (2739 pages) build clean; the salvaged page
renders at /v4-0-0/upgrading/changelog/; redirect stubs emit meta-refresh to
/v4-0-0/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
@github-actions github-actions Bot added docs javascript Pull requests that update javascript code labels May 28, 2026
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: This is a docs-only housekeeping PR that removes the stale pre-GA v4-0-1-snapshot guides tree, relabels the version switcher to "v4.0 (current)", salvages the one unique snapshot page into v4-0-0, and cleans up all dangling references. The rationale is sound, the execution is thorough, and no CFML code is touched. Verdict: comment — two minor nits below, nothing blocking.


Correctness

Everything in the PR body checks out against the diff:

  • web/packages/ui/src/data/versions.ts — snapshot entry dropped, both GUIDES_VERSIONS and API_VERSIONS relabeled to v4.0
  • web/sites/guides/astro.config.mjs — five courtesy redirects added ✓
  • web/sites/guides/src/content/docs/v4-0-0/upgrading/changelog.mdx — salvaged page present, wired in v4-0-0.json sidebar under Upgrading ✓
  • Dangling refs cleaned up in STYLE.md, writing-docs.mdx, verify-docs.mjs, index.md, EditLink.astro, PageTitle.astro
  • No v4-0-1-snapshot references remain anywhere under web/packages/ or web/sites/guides/src/ (grep confirms) ✓

One item to watch: the test plan has [ ] CI doc-build + link-check workflows green unchecked. Not a blocker for review, but don't merge before that goes green.


Docs

Nit 1 — Redirect coverage is thinner than the GA rename.

web/sites/guides/astro.config.mjs lines 97–104 add five v4-0-1-snapshot redirects. The prior v4-0-0-snapshot → v4-0-0 rename added nine (root, installing, tutorial, first-15-minutes, release-channels, cfml-engines, installation, two cli-reference entries). The snapshot set omits start-here/first-15-minutes, start-here/release-channels, start-here/cfml-engines, and command-line-tools/installation.

The PR author explains the asymmetry: the dev channel had "little backlink equity." That is a reasonable call given the snapshot was never listed in the stable version-switcher entry. But if you want parity with the GA rename, four more entries would do it:

'/v4-0-1-snapshot/start-here/first-15-minutes': '/v4-0-0/start-here/first-15-minutes/',
'/v4-0-1-snapshot/start-here/release-channels': '/v4-0-0/start-here/release-channels/',
'/v4-0-1-snapshot/start-here/cfml-engines':     '/v4-0-0/start-here/cfml-engines/',
'/v4-0-1-snapshot/command-line-tools/installation': '/v4-0-0/command-line-tools/installation/',

Not required — the existing comment in astro.config.mjs already acknowledges the limitation — just flagging in case any of those paths ever got indexed.

Nit 2 — No CHANGELOG entry.

The project tracks docs fixes in CHANGELOG.md (see the #2777 and #2801 entries for comparable docs-only work). The version-switcher relabel and snapshot retirement have no entry. A one-liner under ### Changed would keep the log consistent:

- Version switcher now labels the 4.0 stable docs "v4.0 (current)" (was "v4.0.0"); the
  vestigial pre-GA v4-0-1-snapshot guides tree is removed and its one unique page,
  "Reading the Changelog", is salvaged into v4-0-0/upgrading/. (#2827)

Not a blocker — purely a consistency nit given existing docs-fix CHANGELOG precedent.


Commits

Single commit docs(web): consolidate 4.0 guides/api onto one v4.0 line, drop stale snapshot — valid type + scope per commitlint.config.js, 64-char subject (under the 100-char limit), sentence-case, DCO-signed (Signed-off-by: Peter Amiri). Commit body accurately describes the motivation and full scope of the change.


@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 28, 2026

Wheels Bot — Reviewer B (round 1)

A's review is clean. Both nits are factually grounded, no false positives detected, no missed issues on re-scan. A's "comment" verdict is appropriate given the explicitly non-blocking nature of the findings, and I concur. Marking converged-approve.

Sycophancy

None detected. A gave a "comment" verdict (not approve), and every positive statement in the Correctness section is backed by a specific file/line verification.

False positives

One minor count discrepancy: A says the prior v4-0-0-snapshot rename added "nine" redirects; the actual file has 10 entries for that slug (the root appears as both /v4-0-0-snapshot and /v4-0-0-snapshot/). A appears to be counting the two root variants as one logical entry. This does not affect any recommendation — A's enumeration of the four entries missing from the v4-0-1-snapshot set is accurate against the file.

All other claims check out:

Missed issues

None. This is a docs-only PR. No CFML touched, so cross-engine invariants are not in scope. No security surface. No migrations.

Verdict alignment

A's "comment" verdict is consistent with the findings: two explicitly non-blocking nits and one pending CI checkbox. Requesting changes for optional improvements the author already explained would be disproportionate.

Convergence

Aligned. A's nits are accurate and non-blocking; I have no remaining disputes or missed-issue findings. The PR is review-clean for this SHA pending CI green. The human author can choose whether to add the CHANGELOG entry or the four extra redirects — neither is required to merge.

… guides baseline

Addresses wheels-bot review feedback on #2827.

CHANGELOG: add an [Unreleased] section with a one-liner under ### Changed, matching
the docs-fix precedent set by #2777 / #2801. Restores the [Unreleased] heading
that #2824's promote-to-4.0.2 removed.

Redirects: four additional /v4-0-1-snapshot landings for parity with the GA
v4-0-0-snapshot rename precedent -- first-15-minutes, release-channels,
cfml-engines, command-line-tools/installation. Verified each stub emits
meta-refresh to the matching /v4-0-0/ URL.

Visual baseline: refresh web/tests/visual-baselines/guides.png to reflect the
intended UI changes from the prior commit -- the version switcher now reads
"v4.0 (current)" and the Upgrading sidebar group has a new "Reading the
Changelog" entry. Diff inspected against the CI artifact; the actual.png
shows the expected changes (switcher label + sidebar item).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 28, 2026

Addressed both review nits in bdcf4f3:

Also refreshed web/tests/visual-baselines/guides.png to clear the failing Visual regression check. Downloaded the CI diff artifact, confirmed the change is exactly the intended UI from the prior commit (switcher relabel v4.0.0v4.0 + new "Reading the Changelog" entry in the Upgrading sidebar group), and copied the actual.png over the baseline. Local rebuild: 432 pages, 4 new redirect stubs landed (Pagefind index 448 → 452 HTML files).

wheels-bot[bot]
wheels-bot Bot previously approved these changes May 28, 2026
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: This is the follow-up commit addressing both nits from the prior round. Both have been resolved cleanly: the four missing snapshot redirects are now present and the CHANGELOG [Unreleased] entry is in place. The visual baseline was also refreshed to match the new version-switcher label and salvaged sidebar item. Verdict: approve -- no remaining issues.


Correctness

The new commit (bdcf4f341) addresses exactly what was flagged:

Nit 1 -- Redirect parity (addressed). The four redirects suggested in the previous review are present in web/sites/guides/astro.config.mjs:

'/v4-0-1-snapshot/start-here/first-15-minutes': '/v4-0-0/start-here/first-15-minutes/',
'/v4-0-1-snapshot/start-here/release-channels': '/v4-0-0/start-here/release-channels/',
'/v4-0-1-snapshot/start-here/cfml-engines':     '/v4-0-0/start-here/cfml-engines/',
'/v4-0-1-snapshot/command-line-tools/installation': '/v4-0-0/command-line-tools/installation/',

The order within the block is logical (root, then start-here/* paths, then command-line-tools/*), and the existing comment noting the "little backlink equity" rationale is unchanged.

Nit 2 -- CHANGELOG (addressed). CHANGELOG.md now opens with an [Unreleased] section containing a ### Changed entry. The placement is correct: [Unreleased] sits above [4.0.2], restoring the heading that the promote-to-4.0.2 commit (#2824) had removed. The prose entry accurately describes the relabel, the snapshot retirement, the salvaged page, and the redirect coverage.

Visual baseline. web/tests/visual-baselines/guides.png is updated (166,955 bytes -> 166,693 bytes). The commit message states the diff was inspected against the CI artifact before committing. The baseline must track the new version-switcher label ("v4.0 (current)") and the salvaged "Reading the Changelog" sidebar entry or the visual-regression step will fail on merge.


Commits

Two commits in this PR, both conformant with commitlint.config.js:

SHA Message Valid?
87c1b5f docs(web): consolidate 4.0 guides/api onto one v4.0 line, drop stale snapshot Yes -- type docs, scope web, 64 chars, DCO-signed
bdcf4f3 docs(web): add CHANGELOG entry + 4 extra snapshot redirects + refresh guides baseline Yes -- type docs, scope web, 85 chars (under 100), DCO-signed

Both carry Signed-off-by: Peter Amiri <peter@alurium.com>. DCO is satisfied.


Remaining pre-merge gate

The PR test plan still shows [ ] CI doc-build + link-check workflows green unchecked. Do not merge until that passes -- the visual-baseline update makes it especially important that CI confirms the actual rendered output matches the refreshed PNG.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 28, 2026

Wheels Bot — Reviewer B (round 1)

A's review of the follow-up commit is clean in substance. One minor factual error in the commit-length table, but it does not affect A's conclusion or verdict. Aligned on APPROVED; marking converged-approve.

Sycophancy

None detected. Every positive statement in A's review is backed by a specific file, line, or binary diff entry.

False positives

One minor factual error: A's commit table states the first commit (87c1b5f) is "64 chars". The actual subject line is docs(web): consolidate 4.0 guides/api onto one v4.0 line, drop stale snapshot which is 77 characters (verified via git log --format=%s). The commit is still well under the 100-char limit, so A's "valid" conclusion is correct. This is a wrong number in supporting evidence, not a wrong conclusion.

All other claims verified against the diff: four new redirect entries (first-15-minutes, release-channels, cfml-engines, command-line-tools/installation) present in astro.config.mjs; CHANGELOG.md opens with [Unreleased] / Changed above [4.0.2] in correct format; visual baseline Bin 166955 -> 166693 bytes matches diff header; second commit 85 chars; both commits DCO-signed.

Missed issues

None. Docs-only follow-up (3 files: CHANGELOG.md, astro.config.mjs, guides.png). No CFML, no migrations, no security surface.

Verdict alignment

A's APPROVED verdict is consistent with the findings: both prior nits verifiably addressed, no new issues introduced, CI gate noted rather than waved past.

Convergence

Aligned. The one factual error (character count) does not affect the verdict. PR is review-clean for this SHA pending CI green.

The committed web/tests/visual-baselines/blog.png predates #2825 (the 4.0.2
release post), so any PR that doesn't itself touch web/content/blog/posts/
trips Visual regression on the blog canary -- the live blog index now has the
4.0.2 post as the top entry, shifting older posts down by one position.

The workflow's intended develop-side auto-refresh apparently did not land on
the #2825 push (likely the same branch-rule push rejection that bites the
pre-refresh-commit step on PR runs -- see the separate workflow-fix task).
Updating the baseline here unblocks this PR; the underlying workflow gate
fix is out-of-scope.

Diff inspected against the CI artifact -- the change is exactly the new
top-post reflow, no unintended layout shift.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 28, 2026

Pushed dab3a94db — a one-PNG refresh of web/tests/visual-baselines/blog.png to unblock the Visual regression check.

Diagnosis: the prior fixup (bdcf4f341) ran on a branch that was 1 commit behind develop, so detect-scope saw the 4.0.2 blog post (#2825) as "changed", flagged blog_content_changed=true, the pre-refresh step regenerated blog.png locally for the regression check (which then passed), and the buggy auto-commit step exit-1'd on a push-to-develop attempt. I merged develop in (391f20f67) to fix the false-positive — which it did (BLOG_CONTENT_CHANGED: false this run, commit step correctly skipped). But that also meant the pre-refresh skipped, so the actual regression compared against the committed blog baseline — which is stale on develop (last updated at 1f4d729bd, well before #2825). The diff was exactly the expected reflow from the new top post, no unintended layout shift.

So this PR now also carries the blog-baseline refresh that the develop-side auto-push apparently failed to land on #2825. Slightly off-topic for a docs-versioning PR, but it's the documented unblock path ("Download the visual-regression-diffs artifact and update baselines as needed") and once this lands, develop is no longer stale.

The underlying workflow bug (the Commit pre-refreshed blog baseline step needs github.event_name == 'push' gating) is tracked separately.

Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: This is a follow-up to the previously approved round at `bdcf4f341`. Two new commits have landed since then: a merge from `develop` that brings in the 4.0.2 blog post (#2825), and a binary PNG update to refresh the blog visual baseline that the merge displaced. Both are clean and narrowly scoped. Verdict: comment — everything looks good; holding off on a formal approve only because the Visual regression CI check is still pending on the new head.


Correctness

Merge commit `391f20f67` — merges `origin/develop` (specifically `fc90371a3`, the 4.0.2 release post) into the PR branch. The merge introduces one file: web/content/blog/posts/wheels-4-0-2-released.md (+153 lines). No snapshot content, no conflict markers, no unintended files. Clean.

Commit `dab3a94db` — updates web/tests/visual-baselines/blog.png from 129,877 → 131,766 bytes. The commit message explains the causality correctly: the merged 4.0.2 post now heads the blog index, shifting older posts down by one position, which invalidates the prior baseline. The author states the diff was inspected against the CI artifact. No text files were touched.


Commits

SHA Message Valid?
391f20f67 Merge remote-tracking branch 'origin/develop' into worktree-peter+docs-version-cleanup Merge commit — exempt from type requirement; Validate Commit Messages passes ✓
dab3a94db chore(web): refresh stale blog visual baseline after #2825 Type chore, scope web, 44-char subject, DCO-signed (Signed-off-by: Peter Amiri) ✓

Pre-merge gate

The Visual regression check is still pending on the current head. This is the single check that the baseline update is designed to fix — do not merge before it completes and goes green. All other checks that have finished are passing.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 28, 2026

Wheels Bot — Reviewer B (round 1)

A's review is accurate in substance on this follow-up. One repeated false positive (character count, wrong again), no missed issues on a docs/binary-only pair of commits. Aligned on the "comment" verdict; marking converged-approve since A's only hold is a pending CI gate, not an actionable change request.

Sycophancy

None detected. A's positive statements are each backed by a specific file, byte count, or commit attribute.

False positives

One factual error: A's commit table states dab3a94db has a "44-char subject". The actual subject is chore(web): refresh stale blog visual baseline after #2825 which is 58 characters (wc -c on the git log --format=%s output gives 59, minus the newline = 58). The commit is still well under the 100-char limit and A's "valid" conclusion is correct.

This is the third round in a row where A has miscounted subject lengths (round 2 on SHA bdcf4f34: A said 64 chars, actual was 77). The pattern is harmless given the 100-char limit, but it is a recurring verification error.

All other claims verified:

  • dab3a94db stat: blog.png | Bin 129877 -> 131766 bytes — confirmed via git show --stat.
  • 391f20f67 is a merge commit — exempt from conventional-commits type requirement; A correctly notes this.
  • DCO: Signed-off-by: Peter Amiri on dab3a94db — consistent with the git author.

Missed issues

None. Both commits in scope are narrowly scoped: one merge commit bringing in a blog post (no CFML, no migrations, no config), one binary PNG update. Cross-engine invariants, security surface, and migration concerns are not in scope.

Verdict alignment

A's "comment" verdict (holding off on formal approve pending the Visual regression check) is appropriate. The check is a gate condition, not a change request, and it is exactly the check the dab3a94db commit is designed to resolve.

Convergence

Aligned. A has no actionable findings requiring author changes — the sole hold is a CI gate that the author cannot control. The one false positive (character count) does not affect A's recommendation. No missed issues remain. The PR is review-clean pending CI green.

@bpamiri bpamiri merged commit d8e920a into develop May 28, 2026
14 checks passed
@bpamiri bpamiri deleted the peter/docs-version-cleanup branch May 28, 2026 12:17
bpamiri added a commit that referenced this pull request May 28, 2026
The "Commit pre-refreshed blog baseline" step pushes to develop, which
branch protection rejects (GH013) on PR runs — failing the whole
visual-regression job even when the regression check itself passed
(observed on #2827).

The workflow's own comments at lines 205-210 already document the
post-merge blog-baseline auto-refresh as a push-only contract; this
brings the step's `if:` into line with that intent.

Trigger pattern: a PR behind develop where develop has merged a
`web/content/blog/posts/` change since the branch point. detect-scope
sees that file as "changed" in the PR diff, sets blog_content_changed,
the pre-refresh regenerates the baseline, the regression check passes,
and then the commit step fires and the push is rejected.

Signed-off-by: Peter Amiri <peter@alurium.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant