Repository navigation
Conversation
…auto-deploy) The scheduled auto-deploy for this post failed at 2026-05-11 08:19:00 with a rebase conflict on an unrelated file (multi-tenancy-built-in.md). Root cause: GitDeployer rebases the current branch onto origin/develop without ensuring the working tree is on develop first; when the wheels repo was left on a feature branch (peter/bot-convergence-loop) that had already-merged commits, the rebase replayed them and hit add/add. The export ran successfully (lastExportedAt=2026-05-11 08:19:00, body matches DB), so this is purely the missing commit. Same recovery pattern as #2551 (multi-tenancy). Companion PR in wheels-publishing-admin hardens GitDeployer to ensure develop checkout before deploy, so tomorrow's launch article does not hit the same trap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer A
This PR recovers a failed auto-deploy of a new blog post: web/content/blog/posts/lucli-zero-docker-developer-experience.md. There are no code changes — single markdown file addition. The recovery rationale (GitDeployer rebasing the wrong branch) is explained clearly. However, the PR has a commitlint violation and two factual inaccuracies in the article content that should be corrected before merge.
Correctness
1. wheels server start|stop|status does not exist — should be wheels start|stop|status
In the "What ships in the 4.0 CLI" section:
- `wheels server start | stop | status` wraps the LuCLI server lifecycle.
CLAUDE.md (line 26) gives the canonical form:
| Server | `wheels_server(action="status")` | `wheels start|stop|status` |
The top-level commands are wheels start, wheels stop, and wheels status. There is no wheels server subcommand namespace for the lifecycle actions. A reader who copies wheels server start will get an error.
Suggested fix (web/content/blog/posts/lucli-zero-docker-developer-experience.md, line 115):
-- `wheels server start | stop | status` wraps the LuCLI server lifecycle.
+- `wheels start | stop | status` wraps the LuCLI server lifecycle.2. wheels dbmigrate is not the correct surface for latest|up|down|info
Also in "What ships in the 4.0 CLI":
- `wheels dbmigrate latest | up | down | info | diff` handles migrations...
CLAUDE.md distinguishes two separate surfaces: wheels migrate for the standard migration lifecycle (line 23: wheels migrate latest|up|down|info) and wheels dbmigrate diff exclusively for the auto-migration diff feature (lines 712-716). Collapsing both under wheels dbmigrate documents a command form that does not exist for the first four verbs.
Suggested fix (web/content/blog/posts/lucli-zero-docker-developer-experience.md, line 116):
-- `wheels dbmigrate latest | up | down | info | diff` handles migrations, including auto-diff for model-versus-schema drift.
+- `wheels migrate latest | up | down | info` handles migrations; `wheels dbmigrate diff` generates auto-migration files from model-versus-schema drift.3. Lucee 5 and CF 2018/2021 described as supported
In "Why Docker was the wrong default":
The framework supports Lucee 5, 6, 7, Adobe ColdFusion 2018, 2021, 2023, 2025, plus BoxLang...
CLAUDE.md is explicit: "compose.yml also defines lucee5, adobe2018, adobe2021 services for historical reasons; they are NOT in the CI matrix and should be considered unsupported for new development." Calling them supported in a public blog post overstates the compatibility promise. Suggested rewording:
The framework targets Lucee 6 and 7, Adobe ColdFusion 2023 and 2025, and BoxLang across seven databases, with Lucee 7 + SQLite as the primary inner-loop combination.
Commits
The single commit uses the type blog:
blog: LuCLI and the Zero-Docker Developer Experience (recover failed auto-deploy)
blog is not an allowed type. commitlint.config.js enumerates the valid set: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert. For new prose content under web/content/, the correct choice is docs with optional scope web/blog.
docs(web/blog): LuCLI and the Zero-Docker Developer Experience
Fix with:
git commit --amend -m "docs(web/blog): LuCLI and the Zero-Docker Developer Experience"
git push --force-with-leaseSummary
Three blocking items before merge:
- Fix
wheels server start|stop|statustowheels start|stop|status— readers copy CLI commands verbatim. - Fix
wheels dbmigrate latest|up|down|infotowheels migrate latest|up|down|info(reservewheels dbmigrate difffor auto-diff only). - Amend the commit type from
blogtodocs(ordocs(web/blog)) — commitlint will reject the current commit on CI.
The Lucee 5/CF 2018/CF 2021 claim is a non-blocking accuracy nit but worth correcting in the same pass.
|
Superseded — commitlint flagged the |
Summary
Recovery PR for today's scheduled blog post that failed to auto-deploy. Same pattern as #2551 (Multi-Tenancy recovery).
What happened
The publishing-admin scheduler ran at
2026-05-11 08:19:00, successfully exported the markdown for this post, and then asked GitDeployer to commit + push it todevelop. The deploy step failed:```
2026-05-11 08:19:00 ok lucli-zero-docker-developer-experience
2026-05-11 08:19:00 deploy-fail lucli-zero-docker-developer-experience rebase-failed: Rebasing (1/1)
```
The rebase conflict was on a different file (
multi-tenancy-built-in.md), not the lucli file. Root cause: GitDeployer naively runsgit rebase origin/developon whatever branch the wheels repo working tree happens to be on. At the time, that waspeter/bot-convergence-loop, which carried already-merged commits — rebasing replayed them onto develop and hit add/add conflicts. The lucli commit GitDeployer was about to make never landed.Article content
The post body was already up to date in SQLite (
posts.id=875, body=12776 chars). After the failed deploy I made five follow-up edits today that the auto-deploy never had a chance to ship:brew install lucliinstall steps (the binary is shipped aswheelsvia Homebrew/Scoop — there is noluclion a normal install).scoop-wheelsbucket, including thewheels-bechannel that resolves cleanly pre-GA.dnf/yum/aptas the next packaging frontier.updatedAtto reflect the editing pass.Why this is safe to merge
web/content/blog/posts/lucli-zero-docker-developer-experience.md.posts.id=875) and the .md body match byte-for-byte.status=publishedin SQLite, so the scheduler will not retry the deploy (idempotent by design — seePost.scheduledDue()).Companion PR
A separate PR in wheels-publishing-admin hardens
GitDeployer.cfcto switch to develop before deploying, which is the structural fix that prevents tomorrow's launch article from hitting the same trap.Test plan
🤖 Generated with Claude Code