Repository navigation
Conversation
digest() hashed an .xcarchive's whole Info.plist. A real `just upload` runs xcodebuild -exportArchive with destination=upload, and Xcode records the distribution in that file (a Distributions key), so the digest changed and projectctl exited 1 with "Upload modified the archive" after a successful upload. The reviewed runtime from AdamXweb/dev#19 now hashes the archive's Info.plist by its archive keys and the app's identity keys, and every other file byte for byte. Vendored with dev's install.py; only projectctl.py, its vendored test and the runtime lock change, and the justfile regenerates unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
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.
What
Re-vendors the project-command runtime from AdamXweb/dev main (which carries AdamXweb/dev#19) with dev's
standards/project-management/install.py. Only.project/projectctl.py, its vendored test and.project/runtime.lock.jsonchange;install.pyand thejustfileregenerate unchanged. The diff is line-for-line the same as AdamXweb/Orbari#121 and adamXbot/orgorbari#35.Lock hashes now match the canonical copy:
projectctl.py904c215b… → de877635…,tests/test_projectctl.py24da0579… → 485d1e5c…,install.py68d74f7b… (unchanged).Why
digest()hashed an.xcarchive's wholeInfo.plist.just uploadrunsxcodebuild -exportArchivewithdestination=upload, and Xcode records the distribution in that file (aDistributionskey). The digest then changed and projectctl exited 1 withUpload modified the archiveafter a successful upload, so the centralApple buildtestflightoperation would report a failed run for an upload that worked.The runtime now hashes an archive's
Info.plistby its archive keys and the app's identity keys (bundle ID, versions, signing identity, team, path, architectures), and every other file byte for byte. The previous vendoring (ruleset-only release gate fix) landed before dev#19, so this repository had the ruleset fix but not this one.Local checks
just check(lint, security, docs and contract tests): 56 tests pass, 54 before; the two new ones aretest_xcode_upload_bookkeeping_is_not_an_archive_changeandtest_upload_that_changes_the_app_or_its_identity_fails.CI drift step, run on the committed branch:
Full
just checkoutputCI on this PR
Observed after opening: this repository is public, so the Actions billing hold does not apply. The hosted
Command contract(which runsjust checkand the drift step) andidentityjobs pass;Native app compile(macos-latest),ci / Build & test (unsigned)andbuild + test (SPM)(macos-15) run on GitHub-hosted runners and were still in progress when this was written.Not exercised: a real signed upload, because no signing credentials are available to this work.
🤖 Generated with Claude Code