docs: record the verification traps this stack has - #87
Conversation
Four facts that are not derivable from the code and each cost a wrong conclusion while the 5.2.3 upgrade was being done. Three Moodle checks cannot return the answer you are looking for unless they are set up correctly, and all three reported the opposite of the truth before that was noticed: configrw calls is_writable(), which is true for root and docker exec defaults to root; publicpaths fetches $CFG->wwwroot over HTTP, so a wwwroot the container cannot resolve makes every path look unreachable rather than refused; and get_update_info() only compares versions for core, returning the cached API response unfiltered for a plugin, so it kept reporting an update that had just been installed. The fourth is the discriminator that found two regressions in the nginx deny rules before they shipped: a status code does not say who answered, the X-Powered-By header does. Also writes down what the deny rules must keep - the (?!.*\.php/) guard that keeps them off Moodle's slash arguments, and why they refuse the tests/ tree rather than anything named behat - and that routerconfigured and the r.php fallback are one setting in two places. Assisted-by: claude-code:claude-opus-5 Agent-Session: https://claude.ai/code/session_01FRHeDxbgUnv868eNhVCCsr Agent-Host: 32116e Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe PR adds Priority: ⬇️ Low Change: Other Merge Risk: ⚪ Minimal · up to The documentation change introduces no runtime behavior or repository-contract violation and is ready to merge. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
|
@coderabbitai review |
|
|
Bot review: CodeRabbit ran on request and posted a walkthrough with zero inline comments and no findings count. Copilot is out of review quota for the month, account-wide. Reviewed the diff myself. This file makes six factual claims, and a documentation file that is wrong is worse than none, so each was re-checked against
Assisted by claude-code:claude-opus-5 — Session |
|
Self-review: 7a94e56 The review this pull request demands is unsatisfiable (Copilot quota wall or repeated bot failures on this head). Per the documented fallback, the diff on this head was reviewed by the PR author; this comment is the on-the-record attestation the merge gate reads back. It stops matching on the next push. |



Merging this gives the repository an
AGENTS.mdholding four facts that are not derivable from the code and that each cost a wrong conclusion during the 5.2.3 upgrade.Three of Moodle's own checks cannot return the answer you are looking for unless they are set up correctly, and all three reported the opposite of the truth before that was noticed:
configrwis_writable(), true for root — anddocker execdefaults to rootpublicpaths$CFG->wwwrootover HTTP, so a wwwroot the container cannot resolve makes every path look unreachable rather than refusedget_update_info()core; for a plugin it returns the cached API response unfiltered, so it kept reporting an update that had just been installedThe fourth is the discriminator that caught two regressions in the nginx deny rules before they shipped: a status code does not say who answered, the
X-Powered-Byheader does — apluginfile.phpURL for a file that does not exist is a 404 whether nginx refused it or PHP handled it.It also records what the deny rules must keep (the
(?!.*\.php/)guard that keeps them off Moodle's slash arguments, and why they refuse thetests/tree rather than anything namedbehat—admin/tool/behatis a real admin tool), and that$CFG->routerconfiguredand thetry_files … /r.phpfallback are one setting in two places.npx markdownlint-cli2 '*.md'reports 0 issues, the scope and config the CI job uses.Assisted by claude-code:claude-opus-5 — Session