docs(web/guides): correct production-config claims and stale cites from behavioral audit - #3068
Merged
Merged
Conversation
…ites from behavioral audit Audit of deployment/production-config.mdx against develop (Lucee 7 + Adobe 2023 harness) found seven docs-wrong claims and a batch of stale source citations. All corrections re-verified against the current develop head (post-#3057/#3058 line shifts). - Empty reloadPassword does NOT disable ?reload= — only URL env-switching; a bare ?reload=true still restarts the app unauthenticated (refs #3062) - wheels dbmigrate latest -> wheels migrate latest (no dbmigrate verb) - csrfStore defaults to "session" unconditionally; cookie storage is an explicit opt-in (checklist 5 parenthetical was false) - flash storage selection cite: orm.cfm:57-64, not security.cfm:49-55 - redirectAfterReload cite: orm.cfm:26/:52-54 (also flips for maintenance), not security.cfm:43-45 - wheels doctor scope: structure/files/permissions/datasource only — it does not audit the production checklist items - Refresh all stale line refs (settings cascade, env-switch resolver, migrate-down gate, settings table, dotenv step 5, secure compare, rate limit, maintenance page, boot warning, auto-migrate gate) verify:docs passes (3 tagged blocks, 0 failed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
Contributor
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR: This docs-only PR corrects seven factual claims and refreshes ~20 stale source-line citations in the production-config deployment guide, based on a behavioral audit. I independently re-verified every changed citation and factual claim against the framework source at this PR's head, and all of them check out. Verdict: comment — no blocking findings; one minor pre-existing nit noted below.
Correctness
All verified accurate against source at 93c328f0c:
- Empty
reloadPassworddoes not disable?reload=— confirmed.public/Application.cfc:272-277allows the restart when the password is empty (|| !Len(application.wheels.reloadPassword)in the OR chain), while the env-switch gate atvendor/wheels/events/onapplicationstart.cfc:182-190requiresLen(application.$wheels.reloadPassword)(line 188). The old text ("Empty disables?reload=entirely") was indeed wrong; the new text and the #3062 link state actual behavior. csrfStoreis hardcoded — confirmed:events/init/security.cfm:3setsapplication.$wheels.csrfStore = "session"unconditionally. The deleted parenthetical ("the default whensessionscope isn't enabled") was wrong; cookie storage is opt-in.redirectAfterReload— confirmed: defaultfalseatevents/init/orm.cfm:26, flippedtrueforproduction,maintenanceatorm.cfm:52-54(ListFindNoCase("production,maintenance", ...)). The old cite (security.cfm:43-45) pointed at unrelated code, and the old text omitted maintenance.- Flash storage — confirmed at
orm.cfm:57-64(session-management branch) with cookie attributes at:69-73; the oldsecurity.cfm:49-55cite was wrong. wheels doctorscope — confirmed againstcli/lucli/services/Doctor.cfc::runChecks()(checkRequiredDirs,checkRequiredFiles,checkWritePermissions,checkDatabaseConfig, …). Nothing in it audits environment mode,reloadPassword, error-page settings, the CSRF key, error email, or URL rewriting — "audits most of these" was overstated, and the rewrite is accurate.wheels migrate latest— confirmed:migrateis the Module.cfc verb; there is nodbmigratesubcommand.- Env-switch no-op note — consistent with the
environmentSwitchAlreadyAppliedguard inpublic/Application.cfc(application.wheels.environment == url.reloadshort-circuits the restart, per #3036). - Refreshed line cites — spot-verified all of: settings cascade
onapplicationstart.cfc:325-328; env-switch resolve:360-369+$resolveAllowEnvironmentSwitchViaUrl():516-524(with theproduction,testing,maintenancelist at:523); migrate-down gate:300-304;dataSourceNamelowercased:254-261(LCase(at:258);URLRewriting:245-252; blank-password boot warning:371-376; auto-migrate flag:282+ gate:461-463; rate limit:160-178+:207-231;$secureCompare()Global.cfc:798with call sitesonapplicationstart.cfc:190andpublic/Application.cfc:277; maintenance blockEventMethods.cfc:236-258(503 at:249,onmaintenance.cfmat:253-255,ipExceptionsvia$maintenanceModeExempt); CSRF throwcontroller/csrf.cfc:148-157(Throw(at:152); dotenv steps against the scaffold templatecli/lucli/templates/app/public/Application.cfc(:52-56,:58-73,:75-81,:84, and the moved:103application.env = duplicate(this.env)insideonApplicationStart());reloadPassworddefault atorm.cfm:25;csrfCookieEncryptionSecretKeyatsecurity.cfm:30.
No findings.
Docs
- Minor, non-blocking: the settings table's
subpathrow (production-config.mdx:93) still citesonapplicationstart.cfc:307-342, which spans theevents/init/*.cfmincludes (:307-313) and the settings cascade (:325-328) and truncates before the subpath assignment. The subpath detection actually lives at:330-358(priority comment + detection:337-347,$resolveFrameworkPaths+ assignment:348-358). The row is unchanged in this PR and the PR explicitly scopes itself to audit-established corrections, so this is just a leftover worth sweeping in a follow-up since the rest of that table was refreshed.
Commits
93c328f0c docs(web/guides): correct production-config claims and stale source cites from behavioral audit— conforms tocommitlint.config.js: valid typedocs, free-form scope, header under 100 chars, not ALL-CAPS. No issues.
No Correctness, Cross-engine, Security, or Tests findings — this is a docs-only diff with no code changes, and the corrections it makes are all evidence-backed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Behavioral audit of
deployment/production-config.mdx(Lucee 7 + Adobe 2023 dir-mount harness against develop) surfaced seven docs-wrong claims plus a batch of stale framework source citations. This PR fixes only what the audit established. Every line ref below was re-verified against the current develop head (6c5836bd8, i.e. AFTER the #3057/#3058 line shifts).Corrections (each with evidence cite)
Factual claims
reloadPassworddoes NOT disable?reload=(settings snippet comment + checklist 2). Harness-verified: withreloadPassword=""in production, a bare?reload=truereturned 302 and the app restarted unauthenticated; only URL env-switching is disabled. Evidence:public/Application.cfc:272-277(|| !Len(application.wheels.reloadPassword)permits the reload) vsvendor/wheels/events/onapplicationstart.cfc:182-190(env switch requires non-empty password). Docs now state actual behavior and link the contract-drift issue. Refs Reload-password contract drift: empty password leaves?reload=trueopen to anonymous restarts, warm-app wrong-password attempts are never logged or rate-limited, and the boot warning misstates behavior #3062.wheels dbmigrate latest→wheels migrate latest. Nodbmigrateverb exists — CLI errorsComponent [modules.wheels.Module] has no function with name [dbmigrate];migrateis atcli/lucli/Module.cfc:592.csrfStoreis hardcoded"session"unconditionally (vendor/wheels/events/init/security.cfm:3); nothing flips it by session management. Cookie storage is always an explicit opt-in.vendor/wheels/events/init/orm.cfm:57-64(cookie attrs:69-73), notsecurity.cfm:49-55(that range is unrelated security settings).redirectAfterReload— defaultfalseatorm.cfm:26, flippedtruefor production AND maintenance atorm.cfm:52-54(guide citedsecurity.cfm:43-45, the CORS block, and omitted maintenance). Harness-verified the 302 stripsreload/passwordand preserves other params.wheels doctorscope softened — it checks project structure, required files, write permissions, and datasource presence (cli/lucli/services/Doctor.cfc); it does not audit environment mode,reloadPassword, error-page settings, the CSRF key, error email, or URL rewriting. "Audits most of these" overstated (~1 of 10 checklist items).Stale source cites refreshed (behavior verified correct; pointers were wrong)
onapplicationstart.cfc:325-328(was:271-274):360-369+$resolveAllowEnvironmentSwitchViaUrl():516-524with theproduction,testing,maintenancelist (was:276-284):180-204(was:147-175):300-304(was:252-254)dataSourceName:254-261(lowercased folder name);reloadPasswordorm.cfm:25(wassecurity.cfm:25);csrfCookieEncryptionSecretKeysecurity.cfm:30(was:5);URLRewriting:245-252(was:207-215)application.envcopy at templateApplication.cfc:103, insideonApplicationStart()(was:92)$secureCompare()vendor/wheels/Global.cfc:798, call sitesonapplicationstart.cfc:190+public/Application.cfc:277(was:157-160):160-178, tracking + logs:207-231(was:177-192)EventMethods.cfc:236-258— 503 +onmaintenance.cfm+ipExceptions(was:173):371-376(was:286-291):282, gate:461-463(was:244)controller/csrf.cfc:148-157Not papered over
?reload=trueopen to anonymous restarts, warm-app wrong-password attempts are never logged or rate-limited, and the boot warning misstates behavior #3062 (empty reload password permits anonymous restarts) is cited as current behavior, not "fixed".Verification
Refs #3062.
🤖 Generated with Claude Code