# Subplan 05 - Artifact Validation

## Goal

Validate uploaded platform artifacts before publication and channel promotion.

## Common Validation

All artifacts:

- file exists
- size matches upload metadata
- SHA-256 matches
- content type is allowed
- extension matches platform policy
- archive is readable when applicable

## iOS IPA

Validate:

- zip structure
- `.app` bundle exists
- Info.plist can be read
- bundle id matches app policy
- version/build metadata matches release
- provisioning profile mode is classified
- install mode is classified as TestFlight, Enterprise/MDM, or Artifact only

Acceptance:

- The system never implies browser IPA install unless enterprise/MDM manifest
  requirements are met.

## Android APK

Validate:

- APK structure
- manifest package id
- version code/name
- min sdk
- signature presence
- basic metadata extraction

Acceptance:

- APK validator can reject package id mismatch before publication.

## macOS

Validate:

- archive opens
- app bundle or installer package exists
- Info.plist metadata when relevant
- code signing status if tool support exists
- notarization state when provided or checked

Acceptance:

- Notarization can be pending for beta but must satisfy stable policy if
  configured.

## Linux

Validate:

- archive/package opens
- architecture metadata when available
- executable presence
- optional package metadata for deb/rpm/appimage

Acceptance:

- Platform and architecture metadata can drive download labels.

## Windows

Validate:

- exe/msi/zip exists
- authenticode status if supported
- malware scan placeholder status
- architecture metadata when available

Acceptance:

- Stable promotion can require completed scan policy.

## Validation Pipeline

Statuses:

- pending
- passed
- failed
- warning
- skipped

Policy:

- beta/internal may allow warnings.
- stable requires all configured required checks.
- every validation result is auditable.
