# Facebook and Instagram ad file handoff

## Decision: Technical checks pass; continue review

Local state: `LOCAL_READY`  
Record: `technologyadvice-feed-and-story-2026-09-30`  
Owner: Paid media operator  
Next action: Create an additional 1440 x 1800 4:5 export for Facebook Feed, then decode the new bytes.

## Asset checked

- Asset ID: `technologyadvice-967307803052931-4x5`
- Asset owner: Creative operator
- Expected file name: `technologyadvice-portrait_4_5-2.jpg`
- Media type: `single_image`
- Placements: `["image-facebook-feed","image-instagram-feed","image-facebook-stories"]`
- File: `technologyadvice-portrait_4_5-2.jpg`
- SHA-256: `4fd812ea67c130cbe241bd77f6487a00650d7bbf8c8bf71df13e5a505eab9743`
- Detected MIME / bytes: `image/png` / 326833
- Decoded dimensions: 1080 × 1350
- Decode evidence: `local_binary_decode` / `verified`
- Decoder: `ffprobe-9.0.1-png-signature`
- Decoded at: 2026-09-30T00:00:00Z

## Rule source

- Contract: `maestro.facebook_ad_file_check` version `0.1.0`
- Source observed: 2026-09-30
- Source manifest SHA-256: `d60528b880652763f66cc1b05d35a3dfb80e7632ccaf75b93e33c3879353fbdd`

## Placement results

### image-facebook-feed

Technical result: **pass**  
Recommendation result: **mismatch**  
Source: https://www.facebook.com/business/ads-guide/update/image/facebook-feed  
Next: Create an additional 1440 x 1800 4:5 export for Facebook Feed, then decode the new bytes.

| Technical check | Result | Expected | Supplied |
| --- | --- | --- | --- |
| File size | Pass | `"<= 30000000 bytes"` | `326833` |
| Minimum width | Pass | `">= 600 px"` | `1080` |
| Minimum height at 4:5 | Pass | `">= 750 px"` | `1350` |

Recommendations:
- Recommended file type: **match**. Expected `["image/jpeg","image/png"]`; supplied `"image/png"`.
- Recommended aspect ratio: **match**. Expected `"4:5"`; supplied `"1080:1350"`.
- Recommended canvas: **mismatch**. Expected `[1440,1800]`; supplied `[1080,1350]`.

### image-instagram-feed

Technical result: **pass**  
Recommendation result: **mismatch**  
Source: https://www.facebook.com/business/ads-guide/update/image/instagram-feed  
Next: Create an additional 1440 x 1800 4:5 export for Instagram Feed, then decode the new bytes.

| Technical check | Result | Expected | Supplied |
| --- | --- | --- | --- |
| File size | Pass | `"<= 30000000 bytes"` | `326833` |
| Minimum width | Pass | `">= 500 px"` | `1080` |
| Minimum aspect ratio | Pass | `">= 400:500"` | `0.8` |
| Maximum aspect ratio | Pass | `"<= 191:100"` | `0.8` |

Recommendations:
- Recommended file type: **match**. Expected `["image/jpeg","image/png"]`; supplied `"image/png"`.
- Recommended aspect ratio: **match**. Expected `"4:5"`; supplied `"1080:1350"`.
- Recommended canvas: **mismatch**. Expected `[1440,1800]`; supplied `[1080,1350]`.

### image-facebook-stories

Technical result: **pass**  
Recommendation result: **mismatch**  
Source: https://www.facebook.com/business/ads-guide/update/image/facebook-story  
Next: Create an additional 1440 x 2560 9:16 export for Facebook Stories, then decode the new bytes.

| Technical check | Result | Expected | Supplied |
| --- | --- | --- | --- |
| File size | Pass | `"<= 30000000 bytes"` | `326833` |
| Minimum width | Pass | `">= 500 px"` | `1080` |

Recommendations:
- Recommended file type: **match**. Expected `["image/jpeg","image/png"]`; supplied `"image/png"`.
- Recommended aspect ratio: **mismatch**. Expected `"9:16"`; supplied `"1080:1350"`.
- Recommended canvas: **mismatch**. Expected `[1440,2560]`; supplied `[1080,1350]`.

## Additional export requests

### req-export-image-facebook-feed
Owner: Creative operator  
Reason: The decoded file misses one or more Meta design recommendations for this placement. This is not a technical rejection.  
Next: Create an additional 1440 x 1800 4:5 export for Facebook Feed, then decode the new bytes.

### req-export-image-instagram-feed
Owner: Creative operator  
Reason: The decoded file misses one or more Meta design recommendations for this placement. This is not a technical rejection.  
Next: Create an additional 1440 x 1800 4:5 export for Instagram Feed, then decode the new bytes.

### req-export-image-facebook-stories
Owner: Creative operator  
Reason: The decoded file misses one or more Meta design recommendations for this placement. This is not a technical rejection.  
Next: Create an additional 1440 x 2560 9:16 export for Facebook Stories, then decode the new bytes.

## Open evidence requests

No local evidence request remains.

## Native checks

- Request ID `req-native-image-facebook-feed:objective_account_placement_eligibility`; check ID `image-facebook-feed:objective_account_placement_eligibility`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete objective account placement eligibility for image-facebook-feed using this exact asset and save dated evidence.
- Request ID `req-native-image-facebook-feed:meta_upload_and_ingest`; check ID `image-facebook-feed:meta_upload_and_ingest`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete meta upload and ingest for image-facebook-feed using this exact asset and save dated evidence.
- Request ID `req-native-image-facebook-feed:placement_preview_crop_overlays`; check ID `image-facebook-feed:placement_preview_crop_overlays`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete placement preview crop overlays for image-facebook-feed using this exact asset and save dated evidence.
- Request ID `req-native-image-instagram-feed:objective_account_placement_eligibility`; check ID `image-instagram-feed:objective_account_placement_eligibility`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete objective account placement eligibility for image-instagram-feed using this exact asset and save dated evidence.
- Request ID `req-native-image-instagram-feed:meta_upload_and_ingest`; check ID `image-instagram-feed:meta_upload_and_ingest`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete meta upload and ingest for image-instagram-feed using this exact asset and save dated evidence.
- Request ID `req-native-image-instagram-feed:placement_preview_crop_overlays`; check ID `image-instagram-feed:placement_preview_crop_overlays`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete placement preview crop overlays for image-instagram-feed using this exact asset and save dated evidence.
- Request ID `req-native-image-facebook-stories:objective_account_placement_eligibility`; check ID `image-facebook-stories:objective_account_placement_eligibility`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete objective account placement eligibility for image-facebook-stories using this exact asset and save dated evidence.
- Request ID `req-native-image-facebook-stories:meta_upload_and_ingest`; check ID `image-facebook-stories:meta_upload_and_ingest`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete meta upload and ingest for image-facebook-stories using this exact asset and save dated evidence.
- Request ID `req-native-image-facebook-stories:placement_preview_crop_overlays`; check ID `image-facebook-stories:placement_preview_crop_overlays`: **not_checked**. Owner: Paid media operator. Observed at: Not observed. Reason: The local file check cannot establish this native property. Evidence: Not attached. Evidence request: Complete placement preview crop overlays for image-facebook-stories using this exact asset and save dated evidence.

## Evidence boundary

LOCAL_READY means the attached bytes passed the locally testable Technical Requirements encoded for every selected supported cell. It does not establish Meta upload acceptance, objective or placement eligibility, native crop or overlays, safe-zone compliance, policy approval, delivery or performance.
