The shared Android update-identity rule requires every maintained first-party APK to keep a stable package ID, persistent test signer, and monotonically nondecreasing versionCode.
IB PR #69 (“Preserve stable Android prepaint signing identity”) and OMWeather PR #2 (“Require OMWeather replacement-install acceptance”) now prove an initial install followed by two consecutive adb install -r replacements of the current APK without uninstalling, and both keep test signing separate from production/store signing.
What remains unproved is the cross-build part of the rule: a current build can replace itself repeatedly even if its versionCode has regressed relative to a previously shipped/tested APK.
Add reusable ai-ci enforcement that:
- compares the current APK/build metadata against a declared prior accepted APK/build or durable receipt;
- rejects a lower
versionCode;
- keeps package-ID and signer checks in the same update-identity contract;
- exercises a real old-APK -> new-APK replacement path when an older accepted artifact is available;
- does not weaken or replace physical-device acceptance where that is separately required;
- provides passing and targeted known-bad fixtures.
Consumer repositories should only provide project-specific inputs/artifacts, not fork equivalent policy logic.
The shared Android update-identity rule requires every maintained first-party APK to keep a stable package ID, persistent test signer, and monotonically nondecreasing
versionCode.IB PR #69 (“Preserve stable Android prepaint signing identity”) and OMWeather PR #2 (“Require OMWeather replacement-install acceptance”) now prove an initial install followed by two consecutive
adb install -rreplacements of the current APK without uninstalling, and both keep test signing separate from production/store signing.What remains unproved is the cross-build part of the rule: a current build can replace itself repeatedly even if its
versionCodehas regressed relative to a previously shipped/tested APK.Add reusable ai-ci enforcement that:
versionCode;Consumer repositories should only provide project-specific inputs/artifacts, not fork equivalent policy logic.