Conversation
… into adopter projects (cli-3.5.3) devtrail update / update-framework used to walk every file in the extracted release ZIP and copy each one whose path didn't already exist in the target — which silently deposited the framework's internal dist-manifest.yml and dist-templates/ directory at the root of every updated project. devtrail init was already correct: it only extracts paths declared in manifest.files. update_framework.rs now applies the same whitelist via matches_manifest(), so only files declared in the release manifest are copied. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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
devtrail update/devtrail update-frameworkdeposited the framework's internaldist-manifest.ymlanddist-templates/directory into the root of the adopter project. Detected after runningdevtrail updatein a downstream repo and noticing two unexpected artifacts at the project root.update_files()incli/src/commands/update_framework.rswalked every file extracted from the release ZIP and copied any path not already present in the target. The two ad-hoc skips (.devtrail/.checksums.json,.devtrail/dist-manifest.yml) didn't catch the package-rootdist-manifest.ymlor anything underdist-templates/.devtrail initwas already correct — it iterates the patterns declared inmanifest.files— so the two paths had drifted apart.matches_manifest()helper (directory patterns end in/, file patterns are exact), mirroringinit.rs::extract_matching_files. Path comparison normalizes\→/so the whitelist works on Windows too.3.5.3, updatesCHANGELOG.mdand the EN/ES/zh-CN versioning tables inREADME.mdandCLI-REFERENCE.md.Cleanup for already-affected projects
rm dist-manifest.yml rm -rf dist-templates devtrail update-framework # regenerates .devtrail/.checksums.json without orphan entriesTest plan
cargo checkclean.cargo test— all 231 tests pass, including three new unit tests inupdate_framework::teststhat lock in the regression:package_artifacts_are_rejected(assertsdist-manifest.ymlanddist-templates/directives/CLAUDE.mdare filtered out),declared_files_and_directories_match, andundeclared_paths_are_rejected.cli-3.5.3to triggerrelease-cli.ymland verify all 4 platform binaries are published.devtrail update-clithendevtrail update-frameworkand confirmdist-manifest.yml/dist-templates/no longer appear at the project root.🤖 Generated with Claude Code