docs(web/blog): add Wheels 4.0.2 release post#2825
Conversation
Publishes the Wheels 4.0.2 release announcement to blog.wheels.dev. 4.0.2 (tagged v4.0.2) centers on shared-database migration reconciliation — orphan-version detection, `migrate doctor`, and `forget`/`pretend` commands — plus native signed apt/yum repos. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: This adds the 4.0.2 release announcement to web/content/blog/posts/. The content is accurate and well-written against the CHANGELOG. One notable editorial omission stands out — the compatibility matrix restoration for BoxLang and Adobe CF 2023/2025 (#2817) goes unmentioned despite being called out in the CHANGELOG summary as a headline deliverable. Two small nits below. Overall: comment (no correctness blockers).
Correctness
Content accuracy — I cross-checked every PR reference in the post against the CHANGELOG.md [4.0.2] section. All cited numbers (#2798, #2799, #2800, #2802, #2804, #2805, #2807, #2809, #2810, #2812, #2813, #2814, #2774, #2776, #2782, #2783, #2786, #2787, #2793, #2794, #2795, #2796) are present and the descriptions faithfully match what was shipped.
RPM package size (web/content/blog/posts/wheels-4-0-2-released.md, line 109):
the `.deb`/`.rpm` are ~80 MBCHANGELOG (#2814) distinguishes: .deb 80 MB, .rpm 81 MB. The ~80 MB approximation is close enough, but noting it in case exact sizing matters downstream.
Docs
Missing: BoxLang + Adobe CF 2023/2025 compatibility restoration — the CHANGELOG summary explicitly calls out "greens the compatibility matrix across BoxLang and Adobe ColdFusion 2023/2025" as part of the 4.0.2 headline. PR #2817 fixed a 17-fail / 72-error BoxLang regression and a full Adobe CF 2023/2025 suite crash (HTTP 404 + corrupted JSON from the test runner). Users on those engines would benefit from knowing 4.0.2 restores full compatibility for them; it is the category of fix most likely to prompt a "should I upgrade now?" decision. The current post is accurate but silent on this.
Suggested addition somewhere near the "Smaller fixes" section:
## Compatibility matrix restored: BoxLang and Adobe CF 2023/2025
4.0.2 also closes the remaining compatibility-matrix regressions for BoxLang (17 fail / 72 error on every database since 4.0.0) and Adobe CF 2023/2025 (full suite crash since the `cfheader` attributeCollection fix in 4.0.1 uncovered a response-already-committed cascade). Both engines now report zero failures across all database drivers ([#2817](https://github.com/wheels-dev/wheels/pull/2817)).Commits
Commit 50b265c — docs(web/blog): add Wheels 4.0.2 release post — passes commitlint (docs type, web/blog scope, subject ≤ 100 chars, sentence case). The Validate Commit Messages CI check confirms it.
DCO sign-off — the commit body carries a Co-Authored-By: trailer but no Signed-off-by: trailer. The DCO App is listed as a required status check in CONTRIBUTING.md; I don't see it in the visible PR check list, so it may be handled separately at merge time. Worth confirming the DCO App is satisfied before merge.
Wheels Bot — Reviewer B (round 1)A's review is accurate and well-grounded. The #2817 omission finding is confirmed against the CHANGELOG — the 4.0.2 summary header explicitly calls out "greens the compatibility matrix across BoxLang and Adobe ColdFusion 2023/2025" as a headline deliverable, and the fix description is substantial (BoxLang root-cause trace to SycophancyNone detected. A used the "comment" review state rather than an eager approve, backed every positive observation with evidence (PR-by-PR CHANGELOG cross-check), and flagged a real editorial gap. The "no correctness blockers" framing is accurate for a content-only diff. False positivesNone detected.
Missed issuesNone detected. The diff is a single new markdown file. Cross-engine invariants do not apply. The base branch is One minor observation A didn't mention: Verdict alignmentA's "comment" verdict is consistent with findings: real editorial gap, no correctness blockers, the decision whether to expand the post rests with the human author. Consistent. ConvergenceAligned with A. The #2817 omission is the one finding that warrants action — a headline CHANGELOG deliverable (full BoxLang + Adobe CF 2023/2025 compatibility restoration) absent from the release announcement is a meaningful gap for users on those engines deciding whether to upgrade. A's suggested section is accurate and ready to apply. Emitting |
Add a "Compatibility matrix restored" section to the 4.0.2 release post covering the BoxLang and Adobe CF 2023/2025 compatibility restoration shipped in #2817 — Reviewer A flagged this as a headline CHANGELOG deliverable that was silent in the post, and Reviewer B explicitly converged on it as the one finding warranting action. - web/content/blog/posts/wheels-4-0-2-released.md: new H2 between "Native apt and yum repositories" and "Smaller fixes" summarizing the BoxLang `variables.local` shadow root cause, the Adobe CF 2023/2025 response-already-committed cascade, and the five companion Adobe-specific traps fixed alongside. Not addressed (out of consensus): - RPM `~80 MB` approximation: A and B both rated as appropriately low-severity; no action. - Missing Signed-off-by on the original commit: not in B's "warrants action" list, and amending another author's commit on a shared branch is out of scope. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Wheels Bot — Address Review (round 1)Applied consensus findings from Reviewer A and Reviewer B's convergence (round 1):
Intentionally skipped (out of consensus):
The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: This PR adds the Wheels 4.0.2 release announcement. The new commit (d7642e22d) addresses the main finding from the previous review round — the "Compatibility matrix restored" section for BoxLang and Adobe CF 2023/2025 is now present and accurate. One minor counting discrepancy surfaces in the new text ("five further" traps listed, but six are enumerated); it is carried from the CHANGELOG rather than introduced here. Overall: comment (no correctness blockers, ready to merge pending the nit below).
Correctness
Previous finding resolved — The ## Compatibility matrix restored: BoxLang and Adobe CF 2023/2025 section is now present (web/content/blog/posts/wheels-4-0-2-released.md, lines 122–125 in the merged file). Technical content cross-checks against CHANGELOG.md [4.0.2] entry for #2817: root cause (BoxLang variables.local shadow), fix ($promoteIncludedGlobalsToThis()), Adobe CF 2023/2025 cascade origin (4.0.1 cfheader fix), and cfsavecontent capture are all accurately represented.
Minor: "five further" vs. six enumerated items (web/content/blog/posts/wheels-4-0-2-released.md, line 123):
five further Adobe-specific traps were fixed alongside (`request`-scope parameter shadowing in middleware, empty-body `cfhttp` POSTs in `TestClient`, array-by-value mutation in `ParallelRunner.$collectFailures`, double-`include` in `$reincludeGlobals`, a `fileWrite`/`fileRead` newline roundtrip on Adobe 2025, and `cf_sql_integer` overflow on CockroachDB's `unique_rowid()` PKs)The parenthetical lists six distinct items; the lead-in says "five further." The same off-by-one appears in CHANGELOG.md [4.0.2] — the blog faithfully mirrors the source, so this is inherited rather than introduced. Suggested fix either way:
six further Adobe-specific traps were fixed alongside (…)Harmless to readers skimming the list, but worth correcting before the post goes live.
Commits
50b265cbd(docs(web/blog): add Wheels 4.0.2 release post) — passes commitlint, authored bybpamiri. The DCO sign-off flag from the previous review stands: this commit carries aCo-Authored-By:trailer but noSigned-off-by:. If the DCO App is a required status check, confirm it passed before merge.d7642e22d(docs(web/blog): address Reviewer A/B consensus findings (round 1)) — passes commitlint, carriesSigned-off-by: claude[bot]. Commit body explains what was and was not addressed and why — good audit trail.
Wheels Bot — Reviewer B (round 1)A's review on the updated SHA is accurate and well-grounded. The one finding — "five further" naming six items — is verified against the diff and against the CHANGELOG source; the count error is genuinely inherited rather than newly introduced. No sycophancy, no false positives. Converging on changes-needed for the single-word copy fix. SycophancyNone detected. A confirmed the previous round's finding is addressed before issuing any positive verdict, and explicitly flagged the remaining nit before commenting "no correctness blockers." False positivesNone detected.
Missed issuesNone detected. The diff is a single new markdown file. No CFML code changes; cross-engine invariants do not apply. The bot-authored commit Verdict alignmentA's "comment" (no correctness blockers) is consistent with findings: one minor numerical error that should be corrected before the post goes live, nothing that affects technical accuracy at a structural level. ConvergenceAligned with A. The only remaining action is a one-word fix: "five further" → "six further" at line 123 of |
- Fix item-count error in the 4.0.2 compatibility-matrix section of web/content/blog/posts/wheels-4-0-2-released.md: "five further Adobe-specific traps" → "six further", matching the six-item list in the parenthetical (request-scope shadowing, empty-body cfhttp POSTs, array-by-value mutation in ParallelRunner, double-include in $reincludeGlobals, fileWrite/fileRead roundtrip on Adobe 2025, cf_sql_integer overflow on CockroachDB PKs). Reviewers A and B converged on this as the only finding for the round; the same miscount appears in CHANGELOG.md but is out of scope for this docs-only PR. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Wheels Bot — Address Review (round 2)Applied consensus findings from Reviewer A and Reviewer B's convergence (round 2):
Intentionally skipped (out of consensus / out of scope):
The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: Round 3 of the Wheels 4.0.2 release post. The round 2 commit (d0f619402) correctly updates "five further" → "six further" in the compatibility-matrix section (line 124), and the six-item parenthetical list now matches the lead-in count — verified against CHANGELOG.md line 41 for #2817. All findings from rounds 1 and 2 are resolved. No correctness, convention, cross-engine, or security issues remain. The post is accurate and ready to publish. Approve.
Correctness
Round 2 fix confirmed (web/content/blog/posts/wheels-4-0-2-released.md, line 124):
six further Adobe-specific traps were fixed alongside (`request`-scope parameter
shadowing in middleware, empty-body `cfhttp` POSTs in `TestClient`, array-by-value
mutation in `ParallelRunner.$collectFailures`, double-`include` in `$reincludeGlobals`,
a `fileWrite`/`fileRead` newline roundtrip on Adobe 2025, and `cf_sql_integer`
overflow on CockroachDB's `unique_rowid()` PKs)Six items in the parenthetical; "six further" in the lead-in — consistent. The CHANGELOG source (CHANGELOG.md line 41) reads "Five further Adobe-specific bugs" while listing the same six items, so the blog is more accurate than the CHANGELOG on this count. The round 2 commit message explicitly notes the CHANGELOG miscount is out of scope for this docs-only PR, which is the correct call.
All PR references in the post (#2798, #2799, #2800, #2802, #2804, #2805, #2807, #2809, #2810, #2812, #2813, #2814, #2774, #2776, #2782, #2783, #2786, #2787, #2793, #2794, #2795, #2796, #2817) continue to cross-check against the [4.0.2] CHANGELOG section. No new accuracy issues.
Commits
All three commits pass commitlint (docs type, web/blog scope, subject ≤ 100 chars, sentence case):
50b265cbd—docs(web/blog): add Wheels 4.0.2 release post(bpamiri —Co-Authored-By:present, noSigned-off-by:)d7642e22d—docs(web/blog): address Reviewer A/B consensus findings (round 1)(claude[bot] —Signed-off-by:present)d0f619402—docs(web/blog): address Reviewer A/B consensus findings (round 2)(claude[bot] —Signed-off-by:present)
The DCO flag on 50b265cbd (raised in rounds 1 and 2) stands: bpamiri's commit carries Co-Authored-By: but no Signed-off-by: trailer. Whether the DCO App considers this satisfied depends on bpamiri's contributor agreement status — no change from prior rounds, and outside the bot's scope to resolve.
Wheels Bot — Reviewer B (round 1)A's round 3 review checks out. All prior findings are resolved, A's APPROVED verdict is well-supported by specific evidence, and the post is accurate as of the current SHA. Converging on approve. SycophancyNone detected. A confirmed the round 2 fix with a direct quote of the corrected text (rather than assuming it was applied), maintained the DCO flag from prior rounds without softening it, and supported the approval with concrete evidence at each step — not a bare "LGTM." False positivesNone detected.
Missed issuesNone detected. The diff is a single new markdown file. Cross-engine invariants and CFML-specific patterns do not apply. All three commits pass commitlint ( Verdict alignmentA's APPROVED verdict is consistent with findings: both prior editorial gaps (missing compatibility-matrix section, miscount) are resolved, no new correctness issues exist in the diff, and the one outstanding item (DCO on the original human-authored commit) is outside the bot's scope and does not change the editorial accuracy of the post. ConvergenceAligned with A. The post is accurate, complete, and ready to publish. The only blocker before merge is the missing |
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>
…#2827) * docs(web): consolidate 4.0 guides/api onto one v4.0 line, drop stale 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> * docs(web): add CHANGELOG entry + 4 extra snapshot redirects + refresh 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> * chore(web): refresh stale blog visual baseline after #2825 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> --------- Signed-off-by: Peter Amiri <peter@alurium.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
web/content/blog/posts/wheels-4-0-2-released.md) to blog.wheels.dev.v4.0.2) centers on shared-database migration reconciliation — orphan-version detection, amigrate doctorhealth report, andforget/pretendreconciliation commands — plus MSSQL silent-rollback fixes and native signed apt.wheels.dev / yum.wheels.dev package repos.web/content/blog/posts/. No code or build changes.Why a PR instead of the auto-deploy path
The post was published via the publishing-admin UI button, which exports the markdown to disk but intentionally does not push — only the scheduled-publish path auto-commits to
develop. A PR keeps the review checkpoint and audit trail for release content.Deploy
develop→ Cloudflare Pages rebuilds and the post goes live at https://blog.wheels.dev/posts/wheels-4-0-2-released🤖 Generated with Claude Code