Repository navigation
Manifest resolution: app region = release's firmware-<slug>.bin; prereleases need --allow-prerelease - #4
Merged
Conversation
…bin; prereleases need --allow-prerelease
- sync refuses a manifest whose app region is not firmware-<slug>.bin (the
existing region hashes proved each file matched the manifest, but not WHICH
file the app region named), and one whose slug is not the variant's.
- sync refuses a prerelease unless --allow-prerelease; a missing prerelease
field counts as one.
- a .release.json record {tag, prerelease} is written with each synced set,
and both write paths check it at USE time: bench refuses a prerelease cache
without the flag, a cache with no record, and a local build even with it.
Sabotages (one per check, asserted applied, restored byte-exact):
A app check -> exactly 1 red; B sync prerelease -> 1; C bench use-time -> 3.
49 tests green.
Co-Authored-By: Claude Opus 5.5 (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.
Base:
615d01d0999e0c0faf9501a12dd1005268c53681(origin/main, fetched immediately before the commit).What the existing path already established
sync_variantfetches every file the manifest names from the same release, andcheck_variant_dirhashes each one against the manifest. So an app region namingfirmware-<slug>.binwhose hash differs from that release's asset was already refused.test_app_hash_differing_from_the_releases_firmware_bin_is_refusedpins that, and it stays green under sabotage A because the pre-existing check catches it.It did not establish:
app-s3-128.binpassed while the release's OTA binary was something else;local_buildand a record-less cache both reachedflash_pairs).Change
firmware-<slug>.binand the manifest's slug is the variant's. Refuse a prerelease without--allow-prerelease; a response missing theprereleasefield counts as one..release.json{tag, prerelease, app_sha256}beside each synced set.Evidence
Predictions were frozen before the code (sha256
fb7a91c5165e5a90).test_app_region_not_named_firmware_slug_is_refused.test_a_prerelease_is_refused_without_the_flag.test_a_baked_in_key_is_refusedrebuilt its cache without a record, so the new check refused before the scan could. Fixed in the fixture, and the scan is still what that test exercises.Operational consequence (read before installing)
The installed copy pins
release_tagtofactory-manifest-scratch-2026-09-24, a prerelease. After this installs, bench mode refuses it unless--allow-prereleaseis passed. That is the point: no tagged release carries factory assets yet (v14 predates valar-scopes #347).🤖 Generated with Claude Code