Task — engineering-spec@1
"iOS icon alpha flatten — ASC 90717 hotfix: 1024x1024 marketing icon must carry no alpha channel"
doneTASK-IMP-077
§1
- The repo iOS marketing icon MUST be alpha-free RGB 1024x1024 (flattened onto #fff, the brand adaptive background). DONE - PIL: mode RGB, size (1024,1024).
- TASK-IMP-073's iOS byte-identity guard MUST become a derived-asset guard: present + 1024x1024 (sips) + hasAlpha: no - byte-identity is impossible once the copy is legitimately flattened, and the submission invariant (no alpha) is what ASC actually enforces. Android's 15-file hash guard is untouched (adaptive icons legitimately use alpha).
- RELEASE.md's re-scaffold runbook MUST carry the copy-then-flatten step so a future recopy cannot reintroduce the channel.
Lean profile: one asset transform + one guard amendment, defect and fix both machine-verified in-session; ASC acceptance is proven by the next tag run.
§5 (run 2026-07-13)
- PIL pre: RGBA extrema 254-255 → post: RGB (1024,1024). PASS
- Guard YAML parses; sips invocations are macos-runner native. PASS (parse; sips executes on the runner)
- Android guard untouched (15-file hash loop intact). PASS
- Testing pass 2026-07-13 (post gate-1 "approve all"): PIL RGB/1024x1024 re-verified, both guards re-verified, release.yml parses. PASS. Store-side proof already live: the re-tag's iOS lane went green and build 10706 reached TestFlight.
§9
- Why did TASK-IMP-073's checks miss this? Hash-equality proved copy fidelity, AC #3's visual check cannot see a 254-255 alpha channel - exactly §10 row 3's predicted blind spot. This task converts the blind spot into a standing machine check.
§10
| Failure | Detection | Recovery |
|---|---|---|
| future recopy reintroduces alpha | ios guard hasAlpha check fails pre-upload | runbook flatten step |
| flatten color wrong vs brand | human review of the store listing preview | re-flatten with corrected color |
| sips output format drifts on future runners | guard fails loud (grep miss = error path) | adjust parse |
End of TASK-IMP-077.
Audit
- ISS-001: draft flattened without a grounded color choice - resolved: #fff sourced from ic_launcher_background.xml (the brand's own adaptive background), recorded in source_pages.
- ISS-002: draft kept byte-identity for iOS alongside the flatten (self-contradiction; guard would always fail) - resolved: guard reframed to the real submission invariants (present/1024/no-alpha), Android hash guard untouched. Score = 10/10.