mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
Promote the reproduced release lessons into harness enforcement: keep tracked native regeneration separate from artifact builds, separate Android build and upload authorization, use stable login readiness in Maestro, and retain the iOS 43 and Android 46 version increments.
41 lines
1.4 KiB
Markdown
41 lines
1.4 KiB
Markdown
---
|
|
id: 2026-08-28-mobile-release-source-integrity
|
|
date: 2026-08-28
|
|
status: promoted
|
|
scope: mobile release build and upload workflow
|
|
evidence: clean-source local EAS builds for iOS 43 and Android 46
|
|
destination: scripts/lint-harness.mjs
|
|
review_after: 2027-02-28
|
|
---
|
|
|
|
## Symptom
|
|
|
|
A build-only request initially regenerated tracked native projects. The generated
|
|
Android widget provider replaced the checked-in implementation, and the Android
|
|
release script would also have uploaded after building.
|
|
|
|
## Reproduction
|
|
|
|
Run the former mobile release scripts or run `expo prebuild` before a local EAS
|
|
build, then inspect `git diff`. The reproduced diff included the Android widget
|
|
provider, widget XML, and Xcode project rather than version metadata alone.
|
|
|
|
## Cause
|
|
|
|
The release scripts combined three independently reviewed operations: native
|
|
regeneration, artifact creation, and store upload. Sauci already tracks native
|
|
projects, and EAS skips prebuild when those directories exist.
|
|
|
|
## Remediation
|
|
|
|
Keep native regeneration explicit, make release scripts artifact-only, expose
|
|
upload separately, and lint the scripts so those responsibilities cannot be
|
|
silently recombined.
|
|
|
|
## Evidence
|
|
|
|
Corrected local EAS logs reported `PREBUILD` skipped. Both production artifacts
|
|
built successfully from the clean tracked sources; the post-build worktree
|
|
contained only the four expected build-number files. `npm run lint:harness`
|
|
enforces the release-script boundary.
|