fix(cli): honor --no-sqlite when scaffolding lucee.json#2624
Conversation
Drop the hardcoded SQLite datasource pair from cli/lucli/templates/app/lucee.json
in favor of a {{datasourcesBlock}} placeholder, and thread opts.noSQLite
through scaffoldNewApp's context so the substituted block is either the SQLite
pair (default) or {} when --no-sqlite is set. Lucee no longer auto-creates
db/development.sqlite / db/test.sqlite on first connection. Fixes #2621.
Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
…-project guide The prior description implied only config/app.cfm carried datasource configuration, leaving lucee.json's role undocumented. After #2621 both files honor --no-sqlite: lucee.json now emits an empty datasources object so Lucee never auto-creates db/*.sqlite on first connection. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Wheels Bot — Docs updatedAdded a doc commit to this PR:
The prior description implied only |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: This PR correctly fixes the --no-sqlite / lucee.json regression: the hardcoded SQLite datasource pair is replaced by a {{datasourcesBlock}} placeholder, and scaffoldNewApp() threads opts.noSQLite through to produce either the SQLite pair or {}. The change is narrow and accurate. Two nits worth addressing before merge: multi-line comment blocks violate CLAUDE.md conventions, and the tests are source-inspection only — they confirm the template was restructured but never call buildSQLiteDatasourcesBlock() or verify its output is valid JSON. Overall verdict: comment (no correctness, cross-engine, or security findings).
Conventions
Multi-line comment blocks — violates CLAUDE.md "one short line max"
cli/lucli/Module.cfc, lines 4118–4124:
// Template variable context — all config values flow through here.
// `datasourcesBlock` is the JSON fragment substituted into lucee.json
// at the `"datasources": {{datasourcesBlock}}` site: the SQLite pair
// by default, or an empty `{}` when `--no-sqlite` was passed. Without
// this gate the rendered lucee.json pointed Lucee at jdbc:sqlite
// paths even with `--no-sqlite`, and the engine auto-created empty
// db/*.sqlite files on first connection (GH ##2621).CLAUDE.md: "Only add [a comment] when the WHY is non-obvious … one short line max. Don't write multi-line comment blocks." A single line captures the non-obvious invariant:
// datasourcesBlock: SQLite pair by default; "{}" when --no-sqlite (GH #2621)The same applies to the 7-line docstring on buildSQLiteDatasourcesBlock() (lines 4319–4327).
##2621 in a // comment — harmless but misleading
cli/lucli/Module.cfc, line 4124:
// db/*.sqlite files on first connection (GH ##2621).
## escapes a CFML expression delimiter inside evaluated strings; // comments are never evaluated, so #2621 is fine here. The rendered source just displays GH ##2621 instead of GH #2621.
Trivial double-space
cli/lucli/Module.cfc, line 4341:
block &= pad & "}," & nl;Two spaces before & nl; — style nit only.
Tests
Tests verify template structure, not generated output
vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc has two it() blocks:
- Reads
cli/lucli/templates/app/lucee.jsonas a string and asserts it contains{{datasourcesBlock}}and does not containorg.sqlite.JDBC. - Reads
cli/lucli/Module.cfcas a string and asserts it containsdatasourcesBlock.
These are regression guards that would fail on the pre-fix code — good. But buildSQLiteDatasourcesBlock() is never exercised. A future change that introduced malformed JSON in that function (e.g. a stray comma or missing closing brace) would not be caught by this spec. Consider a follow-up to add a behavioral test: either expose a public test accessor or verify the rendered block can be parsed with deserializeJSON("{\"datasources\": " & block & "}").
Pre-existing gap (not introduced here — noted for visibility)
When --setup-h2 is passed without --no-sqlite, the ternary at line 4132:
"datasourcesBlock": opts.noSQLite ? "{}" : buildSQLiteDatasourcesBlock(opts.datasource)still emits the SQLite JDBC pair into lucee.json. This was also true in the old hardcoded template, so it is not a regression from this PR. With the placeholder machinery now in place, a one-line follow-up would fix it:
"datasourcesBlock": (opts.noSQLite || opts.setupH2) ? "{}" : buildSQLiteDatasourcesBlock(opts.datasource)Commits
Single commit fix(cli): honor --no-sqlite when scaffolding lucee.json — type fix, scope cli, subject ≤ 100 chars, not ALL-CAPS, DCO Signed-off-by: present. All good.
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: The new commit (3fd657346) is a documentation-only follow-up that updates the creating-a-project guide in v4-0-0 and v4-0-1-snapshot to clarify that lucee.json now honors --no-sqlite alongside config/app.cfm. The factual claims are accurate and the change is correctly applied to both doc versions. The prior review's nits (multi-line comment blocks, double-space, test coverage gap) remain open — none were addressed by this commit. Overall verdict: comment.
Docs
Accurate and well-scoped. The new sentence in both MDX files correctly describes the post-fix behavior:
Both files honor
--no-sqlite: the flag emits an emptydatasourcesobject inlucee.jsonso Lucee never auto-createsdb/development.sqliteanddb/test.sqliteon first connection, and omits the datasource block fromconfig/app.cfm.
This directly matches what scaffoldNewApp() now does (lines 4130–4134 of Module.cfc).
Minor completeness nit. The old text said:
config/app.cfmcarries the datasource configuration — SQLite by default, H2 under--setup-h2, or no datasource block under--no-sqlite.
The replacement removes the --setup-h2 mention entirely. A reader now has to look elsewhere to understand what --setup-h2 produces in lucee.json or config/app.cfm. Since the pre-existing --setup-h2 gap (SQLite pair still emitted when --setup-h2 is set — noted in the previous review) is unchanged and undocumented, this is an acceptable omission for now, but worth a follow-up sentence if that gap is fixed.
Commits
| Commit | Message | DCO |
|---|---|---|
71fbbf7c6 |
fix(cli): honor --no-sqlite when scaffolding lucee.json |
Signed-off-by: claude[bot] present |
3fd657346 |
docs(web/guides): clarify lucee.json honors --no-sqlite in creating-a-project guide |
Signed-off-by: claude[bot] present |
Both conform to commitlint: valid fix/docs types, scopes within the suggested list, subjects <= 100 chars, not ALL-CAPS.
Outstanding from prior review (still open)
These were flagged in the previous Reviewer A comment on 71fbbf7c6 and have not been addressed:
- Multi-line comment block —
cli/lucli/Module.cfclines 4118–4124 and the 7-line docstring onbuildSQLiteDatasourcesBlock()(lines 4319–4327) violate CLAUDE.md's "one short line max" guidance. ##2621in a//comment —//comments are never evaluated by CFML so the escape is unnecessary;#2621is fine.- Double-space nit —
cli/lucli/Module.cfcline 4341:block &= pad & "},\" & nl;(two spaces before& nl;). - Test coverage gap —
NoSQLiteScaffoldSpec.cfcverifies source-file structure but never callsbuildSQLiteDatasourcesBlock()or validates the rendered block as parseable JSON.
None of these are blockers, but they should be addressed before the PR moves to ready-for-review.
Wheels Bot — Reviewer B (round 1)A's review is substantively correct — the core bug, fix approach, and commit hygiene assessments are all accurate. One missed instance of the same CLAUDE.md violation A flagged elsewhere, and A's verdict label is inconsistent with A's own wording. On balance the findings are valid and actionable, so I'm converging on changes needed. SycophancyNone detected. A called out real findings, assigned "comment" rather than a rubber-stamp approve, and gave concrete inline suggestions. No unearned praise. False positivesNone detected. I verified each of A's claims against the diff:
Missed issues
A flagged multi-line comment blocks in Module.cfc but didn't apply the same rule to the new test spec. The file opens with a large
The describe-label Verdict alignmentA says the nits are "worth addressing before merge" but chose "comment" rather than "request-changes." That label is inconsistent with the wording. The findings are concrete and actionable; the spec maps "comment with concrete actionable findings" to converged-changes, which is what I'm emitting. ConvergenceAligned on changes needed. Consensus for address-review:
The behavioral test gap for |
- cli/lucli/Module.cfc: collapse 7-line comment on `var context` to a single-line WHY note per CLAUDE.md "one short line max" rule, and fix the unnecessary `##2621` escape inside the `//` comment (#2621) - cli/lucli/Module.cfc: drop the 8-line docstring on buildSQLiteDatasourcesBlock(); the function name plus its single caller's note already explain the WHY - cli/lucli/Module.cfc: remove the stray double-space in `block &= pad & "}," & nl;` - vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc: drop the 17-line component-level docblock; the describe label "wheels new --no-sqlite (issue 2621)" already pins the regression context Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Wheels Bot -- Reviewer B (round 1)A's review of the doc commit is accurate and well-targeted. All findings check out against the diff. I have one missed issue to add -- same pattern A flagged in Module.cfc but overlooked in the spec file -- and agree the nits should be addressed before the PR moves to ready-for-review. Converging on changes. SycophancyNone detected. A gives a False positivesNone detected. Verified each claim against the actual code:
Missed issues
Verdict alignmentA's ConvergenceAligned. A's four findings are all valid; I add one more (the spec file block comment, same pattern). The joint recommendation is that these five nits -- multi-line inline comment in Module.cfc, multi-line docstring on |
Wheels Bot — Address Review (round 1)Applied consensus findings from Reviewer A and Reviewer B's convergence (round 1):
Skipped (not in consensus, per B's note):
Re-ran the CLI spec layer locally against Lucee 7 + SQLite (server already up; The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on |
Wheels Bot — Reviewer B (round 1)A's review 4275878496 has body "test" and zero line comments. That is a placeholder, not a review. A made no findings, no analysis, and no verdict. I re-scanned the address-review diff independently and found no issues, but I cannot converge on a non-review. SycophancyThe review body is the single word "test" with no line comments. This is worse than a rubber-stamp "LGTM" — A provided no analysis of the address-review commit whatsoever, effectively granting a silent pass to every change on the branch. False positivesNone detected. A made no claims to falsify. Missed issuesA provided no analysis. I re-scanned the address-review diff (SHA
No new issues introduced by this commit. Verdict alignmentA's state is "COMMENTED" with body "test". That is not a valid verdict — it provides no assessment of whether the PR should be approved or changed. ConvergenceNot aligned. A needs to submit a substantive review of the address-review commit. The diff appears clean, but B cannot converge on a non-review. A should re-review the current SHA and either approve (all consensus changes are applied, no new issues visible) or flag any remaining concerns. |
Wheels Bot — Reviewer B (round 1)A's review 4275891846 on SHA SycophancyA content-free "COMMENTED" state on a non-trivial diff is implicit approval-without-examination — a rubber-stamp that cited no evidence. That qualifies as sycophancy by omission. False positivesNone — A made no claims. Missed issuesA provided no assessment. From my own scan of the current diff: All five round-1 consensus items are correctly applied in the address-review commit (
No new issues introduced by the address-review commit:
Carry-over (non-blocking, consensus): behavioral test for Verdict alignmentA's "COMMENTED" state carries no verdict. It is not an approval, not a request for changes — it is nothing. ConvergenceNot aligned. A has not submitted a real review on SHA |
There was a problem hiding this comment.
Wheels Bot — Reviewer A response (round 1)
B was entirely correct on all counts. My two reviews on SHA `b2f2296ad` carried placeholder bodies ("test" and "## Header / Sub / body text") with zero code analysis. There is nothing to defend from those submissions. Having now performed an independent review of the full diff, I confirm all five round-1 consensus items are correctly applied, no new issues are present, and the behavioral fix is sound. Converging to approve.
Conceded points
- Placeholder reviews: Both prior reviews on `b2f2296ad` provided no analysis — B was correct that they constituted a failure of the review process and that convergence could not proceed from them.
- All five consensus items applied: B's independent scan was accurate. Verified against the diff:
- `cli/lucli/Module.cfc` — 7-line `//` block on `var context` collapsed to `// datasourcesBlock: SQLite pair by default; "{}" when --no-sqlite (#2621)` ✓
- `cli/lucli/Module.cfc` — `/** ... */` docstring on `buildSQLiteDatasourcesBlock()` removed ✓
- `cli/lucli/Module.cfc` — unnecessary `##` escape corrected; comment now uses `(#2621)` ✓
- `cli/lucli/Module.cfc` — stray double-space in `block &= pad & "}," & nl;` removed ✓
- `vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc` — component-level docblock dropped; `describe` label pins the regression context ✓
Defended points
None — B made no false-positive claims against me since my prior reviews made no claims to dispute.
One minor observation I'm adding for completeness (not a change request): `NoSQLiteScaffoldSpec.cfc` retains a two-line inline comment (// The template must NOT hardcode the SQLite class — emitting it / // has to go through the placeholder so --no-sqlite can suppress.) that technically violates CLAUDE.md's "one short line max" rule. The assertion message immediately below already carries this context, so the comment is redundant. I'm noting it only as a follow-up candidate — it does not block approval.
Updated verdict
Approve: all round-1 consensus changes are correctly applied, the core `--no-sqlite` / `lucee.json` fix is behaviorally sound, the commits conform to commitlint, DCO trailers are present, and no new issues were introduced by the address-review commit.
…s-new-no-sqlite-still-creates-sqlite-database Signed-off-by: Peter Amiri <peter@alurium.com> # Conflicts: # CHANGELOG.md
Status — issues resolved at 2f4328bBringing this PR back to a mergeable state:
Re-running CI now; the convergence loop will pick up the new SHA naturally. |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: The head commit (2f4328b9d) is a merge of origin/develop that brings in PR #2623's Application.cfc changes and resolves a CHANGELOG conflict; it introduces no new PR-specific code. The underlying fix — replacing the hardcoded SQLite block in lucee.json with a {{datasourcesBlock}} placeholder and threading opts.noSQLite through scaffoldNewApp() — is correct. All five round-1 consensus items raised in prior reviews have been addressed. Two minor nits remain open: a two-line inline comment in the spec file that technically violates CLAUDE.md's "one short line max" rule, and a test coverage gap where buildSQLiteDatasourcesBlock() is never exercised. Neither is a blocker. Overall verdict: comment.
Correctness
Fix is behaviorally sound. When opts.noSQLite is truthy, "datasourcesBlock": "{}" is substituted, producing "datasources": {} in the rendered lucee.json (valid JSON). When false, buildSQLiteDatasourcesBlock(opts.datasource) reconstructs the exact same indentation structure as the original hardcoded block: 6-space pad for top-level keys, 8-space inner for properties, 4-space closing brace at " }". The default path is a byte-equivalent replacement.
No correctness issues found.
Conventions
Remaining two-line inline comment — vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc, lines 20–21:
// The template must NOT hardcode the SQLite class — emitting it
// has to go through the placeholder so --no-sqlite can suppress.CLAUDE.md: "one short line max." The toBeFalse() assertion message immediately below already carries this context in full. This was flagged as a follow-up candidate (not a blocker) in the round-1 Reviewer A response; noting it again for completeness.
All other round-1 items are resolved and verified against the current tree:
- 7-line comment on
var contextcollapsed to a single WHY note ✓ buildSQLiteDatasourcesBlock()docstring removed ✓##2621→#2621in the//comment ✓- Stray double-space in
block &= pad & "}," & nl;removed ✓ - 17-line component docblock on
NoSQLiteScaffoldSpec.cfcdropped ✓
Tests
Coverage gap (follow-up candidate, not a blocker) — vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc:
Both it() blocks are source-inspection tests: one reads the template file as a string and checks for the placeholder; the other reads Module.cfc as a string and checks for datasourcesBlock. Neither exercises the rendering path. A malformed JSON output from a future edit to buildSQLiteDatasourcesBlock() — e.g. a stray trailing comma or missing closing brace — would not be caught. A follow-up integration test that invokes scaffoldNewApp() (or the CLI equivalent) and reads the rendered lucee.json would confirm both the --no-sqlite path ("datasources": {}) and the default path produce parseable JSON. This gap has been noted in two prior reviews; filing as a follow-up to address post-merge.
Commits
| SHA | Message | DCO |
|---|---|---|
71fbbf7c6 |
fix(cli): honor --no-sqlite when scaffolding lucee.json |
Signed-off-by: claude[bot] ✓ |
3fd657346 |
docs(web/guides): clarify lucee.json honors --no-sqlite in creating-a-project guide |
Signed-off-by: claude[bot] ✓ |
b2f2296ad |
fix(cli): address Reviewer A/B consensus findings (round 1) |
Signed-off-by: claude[bot] ✓ |
2f4328b9d |
Merge remote-tracking branch origin/develop (merge) |
Signed-off-by: Peter Amiri ✓ |
All PR-authored commits conform to commitlint: valid fix/docs types, scopes within the suggested list (cli, web/guides), subjects ≤ 100 chars, not ALL-CAPS.
Wheels Bot — Reviewer B (round 1)A's review is substantive, accurate, and internally consistent. No sycophancy, no false positives, no meaningful missed issues. A's two remaining findings are both correctly classified as non-blocking follow-up candidates, which makes the "comment" verdict slightly inconsistent — all non-blocking items together warrant an approve. Converging on approve. SycophancyNone detected. A gives a structured analysis with findings, explicitly distinguishes blockers from non-blockers, and does not issue an unearned rubber-stamp. False positivesNone detected. Verified each claim against the diff:
Missed issuesNone of significance.
Verdict alignmentA says both remaining items are "not a blocker" and a "follow-up candidate." That assessment is correct. However, two explicitly non-blocking items together warrant "approve," not "comment" — "comment" in GitHub state leaves the PR in review-limbo without formally approving despite A's own characterization of the code as merge-ready. This is a mild inconsistency, not a substantive dispute. ConvergenceAligned, no changes needed. A's underlying assessment matches mine: the fix is behaviorally correct, all five round-1 consensus items are applied, and both remaining items (two-line comment, coverage gap) are legitimately post-merge follow-ups. Joint recommendation: approve and let the PR proceed to human review. |
The blog homepage baseline (web/tests/visual-baselines/blog.png) drifted when 2b908f6 (Wheels 4.0: Closing the Maturity Gap post) and 4e695b2 (title quote fix) landed on develop — the workflow's post-merge auto-refresh in web-deploy.yml only fires when `blog_content_changed=true` on a PR, and these were direct merges that didn't pre-refresh. This commit refreshes the baseline to match the current rendered blog homepage, unblocking PR #2624 (whose CI failure was inherited drift, not a code change) and develop's last two push runs which fail identically. The broader auto-refresh-race fix lives on peter/fix-blog-baseline-race; this is the immediate unblock. Signed-off-by: Peter Amiri <peter@alurium.com>
Status update — baseline refresh at 83f7f8dReviewers converged on Refreshed This commit is intentionally separate ( After this run completes, all required checks should be green and |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: The head commit (83f7f8d49) adds only a binary visual-baseline refresh (web/tests/visual-baselines/blog.png). All substantive code changes — the {{datasourcesBlock}} placeholder in lucee.json, the buildSQLiteDatasourcesBlock() helper, opts.noSQLite threading in scaffoldNewApp(), the guide doc updates, and the five round-1 consensus fixes — were fully reviewed on prior SHAs. No new findings arise from the incremental diff. Overall verdict: comment (two minor open items remain as follow-up candidates, neither a blocker).
Correctness
The incremental change is a PNG binary — no logic change. The core --no-sqlite fix is correct and has been verified in prior reviews. No new correctness issues.
Conventions
Two items from prior rounds remain open (neither introduced by this commit, both noted as follow-up candidates):
Two-line inline comment — vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc, lines 20-21:
// The template must NOT hardcode the SQLite class — emitting it
// has to go through the placeholder so --no-sqlite can suppress.CLAUDE.md: "one short line max." The toBeFalse() assertion message immediately below carries this context in full — the comment is redundant. Not a blocker.
Tests
Behavioral coverage gap (follow-up candidate) — vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc exercises source-file structure only; buildSQLiteDatasourcesBlock() is never called and its JSON output is never validated as parseable. A stray trailing comma or missing closing brace in a future edit would not be caught. This gap has been noted in three consecutive reviews; filing as a follow-up to address post-merge.
Commits
| SHA | Message | DCO |
|---|---|---|
71fbbf7c6 |
fix(cli): honor --no-sqlite when scaffolding lucee.json |
Signed-off-by: claude[bot] present |
3fd657346 |
docs(web/guides): clarify lucee.json honors --no-sqlite in creating-a-project guide |
Signed-off-by: claude[bot] present |
b2f2296ad |
fix(cli): address Reviewer A/B consensus findings (round 1) |
Signed-off-by: claude[bot] present |
2f4328b9d |
Merge origin/develop (merge commit) |
Signed-off-by: Peter Amiri present |
83f7f8d49 |
test(web/blog): refresh visual baseline after Wheels 4.0 post drift |
Signed-off-by: Peter Amiri present |
All PR-authored commits conform to commitlint: valid types (fix, docs, test), scopes within the suggested list (cli, web/guides, web/blog), subjects no longer than 100 chars, not ALL-CAPS.
Wheels Bot — Reviewer B (round 1)A's review of the head commit is accurate. The incremental change on SHA SycophancyNone detected. A does not rubber-stamp the PNG commit — A explicitly says the substantive code was reviewed on prior SHAs and limits the incremental review to the incremental diff. That is the correct approach for a binary-only head commit. False positivesNone detected. A's two carry-over findings are both accurately scoped:
Missed issuesNone. The only diff on this SHA is Verdict alignmentA's "comment" state is inconsistent with A's own characterization that neither remaining item is a blocker. The prior converged-approve on ConvergenceAligned, no changes needed. The fix is behaviorally correct, all five round-1 consensus items are applied, both remaining items are legitimately post-merge follow-ups, and the head commit changes nothing substantive. Joint recommendation: approve. |
The previous baseline refresh (83f7f8d) was generated on macOS Chromium, which produces noticeably different font hinting and antialiasing from CI's Linux Chromium — the diff measured 43,928 pixels, well above the 300-pixel threshold. Replaced web/tests/visual-baselines/blog.png with blog.actual.png extracted from the visual-regression-diffs artifact of the failing CI run (run 25763885277). This is the Linux-rendered output that subsequent CI runs will diff against, so the comparison should now land at 0 pixels (or well within the threshold). Verified by visual inspection: same content as the macOS render (Wheels 4.0 / LuCLI / Multi-Tenancy posts), just rendered with the CI environment's font stack. Signed-off-by: Peter Amiri <peter@alurium.com>
Baseline retry at 8fb7bf2 — CI-rendered versionMy prior baseline refresh ( Pulled Visually verified: same content as the macOS render (Wheels 4.0 / LuCLI / Multi-Tenancy posts) — just rendered with CI's font stack. Waiting on the new run. |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: The head commit (8fb7bf263) replaces the blog visual-regression baseline (web/tests/visual-baselines/blog.png) with a Linux-CI-rendered version after the previous macOS-rendered baseline produced a 43,928-pixel diff above the 300-pixel threshold. The change is correct and well-explained. All substantive code — the {{datasourcesBlock}} placeholder, buildSQLiteDatasourcesBlock(), opts.noSQLite threading, guide updates, and round-1 consensus fixes — was fully reviewed on prior SHAs and has not changed. Two minor follow-up candidates from those rounds remain open. Overall verdict: comment (no new correctness, cross-engine, or security findings).
Correctness
The PNG swap is appropriate. CI was failing due to macOS-vs-Linux Chromium font-hinting divergence; replacing the baseline with the CI-rendered artifact is the standard fix. The commit message cites the CI run ID (25763885277) and the measured pixel delta for auditability. No logic change.
Conventions
Two-line inline comment (still open — follow-up candidate) — vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc, lines 20–21:
// The template must NOT hardcode the SQLite class — emitting it
// has to go through the placeholder so --no-sqlite can suppress.CLAUDE.md: "one short line max." The toBeFalse() assertion message on line 23 already carries this context in full — the comment is redundant. This has been flagged in three consecutive reviews; noting again as a follow-up to address pre-merge.
Tests
Behavioral coverage gap (still open — follow-up candidate) — vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfc exercises source-file structure only; buildSQLiteDatasourcesBlock() is never called and its JSON output is never validated as parseable. A stray trailing comma or missing closing brace in a future edit would not be caught. This gap has been noted in three consecutive reviews; filing as a follow-up to address post-merge.
Commits
| SHA | Message | DCO |
|---|---|---|
71fbbf7c6 |
fix(cli): honor --no-sqlite when scaffolding lucee.json |
Signed-off-by: claude[bot] present |
3fd657346 |
docs(web/guides): clarify lucee.json honors --no-sqlite in creating-a-project guide |
Signed-off-by: claude[bot] present |
b2f2296ad |
fix(cli): address Reviewer A/B consensus findings (round 1) |
Signed-off-by: claude[bot] present |
2f4328b9d |
Merge origin/develop (merge commit) |
Signed-off-by: Peter Amiri present |
83f7f8d49 |
test(web/blog): refresh visual baseline after Wheels 4.0 post drift |
Signed-off-by: Peter Amiri present |
8fb7bf263 |
test(web/blog): use CI-rendered baseline (macOS Chromium diverges) |
Signed-off-by: Peter Amiri present |
All PR-authored commits conform to commitlint: valid types (fix, docs, test), scopes within the suggested list (cli, web/guides, web/blog), subjects ≤ 100 chars, not ALL-CAPS.
Wheels Bot — Reviewer B (round 1)A's review accurately characterizes the head commit as a PNG-only baseline swap and correctly limits the incremental review to that scope. Both carry-over findings are accurately stated and consistent with three prior rounds. The only issue is a mild verdict inconsistency — A labels both items as follow-up candidates (non-blocking) but issues "comment" rather than "approve." Converging on approve. SycophancyNone detected. A does not rubber-stamp the PNG commit and explicitly limits the review to the incremental diff — the correct approach for a binary-only head commit. False positivesNone detected. Both carry-over findings have been confirmed consistently across prior rounds and predate the head commit:
The head commit changed only Missed issuesNone. The diff on this SHA is a single binary PNG file. There is no logic, no CFML, no configuration to scan. Verdict alignmentA labels both remaining items as "follow-up candidates" — one "pre-merge," one "post-merge" — but issues "comment" rather than "approve." A's own characterization of the items as non-blocking follow-ups makes the "comment" verdict inconsistent. B already converged-approve on ConvergenceAligned, no changes needed. The fix is behaviorally correct, all round-1 consensus items are applied, both remaining follow-ups are legitimately post-merge work, and the head commit is a PNG-only baseline swap. Joint recommendation: approve. |
…baseline Merges origin/develop into the PR branch so CI reruns against the post-#2624 baseline (which refreshed web/tests/visual-baselines/blog.png after the May 12 "Closing the Maturity Gap" post drift). The failed Visual regression check on the prior HEAD was caused by the stale baseline on develop at the time of that CI run, not by anything in this PR. Conflicts resolved (all additive — both sides kept): - CHANGELOG.md: kept ### Changed entry from #2632 and appended the reloadPassword Documentation entry to the existing ### Documentation section (which #2627 had populated on develop), rather than carrying a duplicate top-level ### Documentation header. - web/sites/guides/src/content/docs/v4-0-0/upgrading/3x-to-4x.mdx and v4-0-1-snapshot/upgrading/3x-to-4x.mdx: kept both new Common-issues bullets — the wirebox boot-failure bullet from #2627 and the reloadPassword bullet from this PR. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
…es-to-and-dry-run-flag Bring in latest develop (5 commits including PR #2624's blog visual baseline refresh) so the visual regression check picks up the current baseline. The PR's branch was created before #2624 landed, leaving GitHub's pull/2642/merge ref combining stale PR-side baseline with old develop — the test diffed against the pre-Maturity-Gap-post baseline and failed with 37,668 pixels of drift on the blog index. CHANGELOG.md conflict resolved by keeping both sets of `Fixed` entries — develop's #2630, #2635, #2621 plus this PR's #2629 — and develop's new `Documentation` section for #2627. cli/lucli/Module.cfc auto-merged: PR #2629's upgrade() help-text changes are in a different region than #2624's --no-sqlite scaffolding logic, so both sets of edits coexist cleanly. Signed-off-by: Peter Amiri <peter@alurium.com>
Brings the CI-rendered blog visual-regression baseline (8fb7bf2, landed on develop via #2624's squash merge) into the PR branch so the Visual regression check stops failing on the stale macOS-Chromium baseline this branch forked from. The CI run on 5b656e4 measured 37,668 pixels of font-rendering drift against the old baseline; merging develop in auto-takes the CI-rendered blob (af41788) the PR branch never touched. Three conflicts resolved manually, all in the documentation layer: - CHANGELOG.md: combine #2626 entry (this PR) with develop's #2630, #2635, #2621, plus the Documentation subsection for #2627. PR entry moved to the end of the Fixed list to preserve develop's ordering. - web/sites/guides/.../v4-0-0/upgrading/3x-to-4x.mdx: keep both Common-issues bullets — develop's wirebox boot-failure entry (#2627) and this PR's static-asset 404 entry (#2626). - web/sites/guides/.../v4-0-1-snapshot/upgrading/3x-to-4x.mdx: same resolution as v4-0-0. cli/lucli/Module.cfc auto-merged cleanly — develop's #2624 added a sibling helper, this PR added \$ensureProjectRewriteConfig(); both land side by side. Signed-off-by: Peter Amiri <peter@alurium.com>
Summary
wheels new <app> --no-sqlitepreviously createddb/development.sqliteanddb/test.sqliteand wired both as datasources in the scaffoldedlucee.json. The flag was honored forconfigureSQLiteDatabase()(thedb/*.sqlite+config/app.cfminjection paths) but not for the lucee.json template, which embedded theorg.sqlite.JDBCdatasource pair unconditionally — so Lucee still opened those JDBC URLs on first connection and auto-created the empty database files.This change drops the hardcoded SQLite block from
cli/lucli/templates/app/lucee.jsonin favor of a{{datasourcesBlock}}placeholder, and threadsopts.noSQLitethroughModule.cfc::scaffoldNewApp()'s context so the substituted block is either the SQLite pair (default) or{}when--no-sqliteis set.Related Issue
Fixes #2621
Type of Change
Feature Completeness Checklist
Signed-off-by:(git commit -s)vendor/wheels/tests/specs/cli/NoSQLiteScaffoldSpec.cfcwas added failing, then passes after the fixbot-update-docs.ymlfollow-upbot-update-docs.ymlfollow-upbot-update-docs.ymlfollow-up[Unreleased]Test Plan
wheels new test-app --no-sqlite --reload-password=PLACEHOLDERand confirm:test-app/db/development.sqliteis NOT createdtest-app/db/test.sqliteis NOT createdtest-app/lucee.jsoncontains"datasources": {}(noorg.sqlite.JDBCentries)wheels new test-app2(default, no flag) and confirm the SQLite datasource pair IS present inlucee.jsonanddb/*.sqlitefiles ARE created — the default happy path must not regress.bash tools/test-local.sh(framework suite, Lucee 7 + SQLite) — green.