Fix the release package, and write release notes for upgraders - #15
Merged
Conversation
…tory Two defects in the packaging step, both present in the 3.0 and 2.3 artifacts: --exclude='*.md' stripped README.md and CHANGELOG.md, so the published zip carried no documentation at all - the plugins directory expects both, and README is now the primary operator reference. Only CLAUDE.md and AGENTS.md are dropped now. release-package/ sits inside the directory rsync copies, so the staging tree was copied into itself, leaving an empty local_cleanup/release-package/ local_cleanup/ inside the archive. Verified by running the same rsync locally: README, CHANGELOG and LICENSE present, no .git, .tasks, agent files or nested staging directory. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SrD1CtCf7ERCCtH2k7LzK3
The release body was the whole changelog entry, which is the wrong document for somebody deciding whether to upgrade. The workflow now uses .github/release-notes/<tag>.md when it exists and falls back to the changelog extraction otherwise, so the changelog stays the full record and the release notes say what to do. The 3.0 notes cover the four things a 2.x site has to check, all verified against the code rather than the plan: managers gain read access where 2.x was site-admin-only, nobody but an administrator can delete, unlinked files pause for a week because the new columns are not backfilled and the first scan after upgrade is the first sighting, and any $CFG->cleanup_* lines in config.php are now dead because unset_config cannot reach them. The same four are in README.md, since .github/ is not shipped in the package. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SrD1CtCf7ERCCtH2k7LzK3
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.
Found while verifying the published 3.0 artifact.
The package was missing its documentation
Two defects in the packaging step, both present in the 3.0 and 2.3 zips:
--exclude='*.md'strippedREADME.mdandCHANGELOG.md. The published package carriedno documentation at all. Only
CLAUDE.mdandAGENTS.mdare dropped now.rsync . release-package/local_cleanup/copied the staging tree into itself, leaving anempty
local_cleanup/release-package/local_cleanup/inside the archive.Verified by running the same rsync locally: README, CHANGELOG and LICENSE present; no
.git,.tasks, agent files or nested staging directory.The release body was the wrong document
It was the entire changelog entry — every fix, every rename, five sections. That is the right
content for a changelog and the wrong content for somebody deciding whether to upgrade.
The workflow now prefers
.github/release-notes/<tag>.mdwhen it exists and falls back to thechangelog extraction otherwise. The changelog stays the full record; the release notes say what
to do.
.github/release-notes/3.0.mdcovers the four things a 2.x site has to check. Each wasverified against the code, and two of them I would have got wrong from the plan alone:
is_siteadmin(); 3.0 grantslocal/cleanup:viewtomanager. This is a widening, not a break — worth a deliberate revoke if unwantedlocal/cleanup:deletefileshas no archetype; admins keep it by holding everythingtimeconfirmed = timescanned = now, the grace check reads0 < grace, and nothing is removed until a second scanghostgracedayslater. An operator will otherwise see the list stop shrinking and assume it is broken$CFG->cleanup_*inconfig.phpgoes deadunset_config(), which clears the database row but cannot editconfig.phpTwo things I expected to be breaking and checked instead of asserting:
cli/cleanup.phpisnew in 3.0, so no existing cron entry changes behaviour, and
reinit_modules_cleanup.phpalready required
--forcein 2.3.The same four checks are in
README.md, because.github/is not shipped in the package.Testing
php -lon 8.1 and 7.4, style sweep, YAML parse of the workflow, and the rsync simulationabove. No PHP changes, so CI is a regression check rather than a verification of this diff.
Notes
the follow-up.