# KRB Admissions wrong image placement fix

## Diagnosis

I re-read the current `/admissions` page with Page Client after the images were added.

The Gateway CTA images are now in the expected three card slots:

- International → `boarding__international__KRB-Website-090621_289.jpg` (`6a34e3cc825c8fb9f606dd19`)
- Enrolment → `admissions__enrolment__kincoppal2_130.jpg` (`6a34e3a66a41d050704c90bc`)
- Fees → `admissions__fees__G2A9388-1.jpg` (`6a34e3aac5f6e7958815795f`)

The wrong placements are earlier in the Admissions page, around repeated CTA/video-ish sections:

| Current component | Current image | Correct action |
|---|---|---|
| `Boarding School Expo Dates and KRB Functions in 2026` CTA | `KRB-Uniform_Junior.png` (`6a34ef9a6cd91cb6026dbfb5`) | Set to `KRB-stock-school-photos-250226_013.jpg` (`6a34f0c142f56dbdadaae495`) |
| `KRB Uniform Shop` CTA | `boarding__international__KRB-Website-090621_289.jpg` (`6a34e3cc825c8fb9f606dd19`) | Set to `KRB-Uniform_Junior.png` (`6a34ef9a6cd91cb6026dbfb5`) |
| `International Boarding` two-column/video component | `KRB-stock-school-photos-250226_013.jpg` (`6a34f0c142f56dbdadaae495`) | Clear `Visual/Image`; this live/source counterpart is a video block with `Visual/Video Embed` already populated |

Root cause: the previous sitewide script still used repeated-component/empty-order placement in Code Lab. That can place assets into the wrong repeated components when a page has multiple similar CTAs and a video block represented by a component with an empty image prop.

## Safer rule before sitewide pass

Do not do the broad sitewide pass through Code Lab empty-order matching.

For the next pass, generate page-specific Page Client writes against exact audited composite IDs, and include a current-value guard before setting anything:

- exact page ID
- exact element ID
- exact prop ID
- expected current value, usually empty/null or the known wrong asset for a correction
- intended asset ID or `null` to clear

## Prepared script

`fix_admissions_wrong_image_placements.mjs`

Defaults to dry-run. Run from:

```bash
cd /Users/iggy/.hermes/profiles/ignite_team/outbound/krb_page_client_probe
node fix_admissions_wrong_image_placements.mjs
```

Dry-run result written to:

`/Users/iggy/.hermes/profiles/ignite_team/outbound/krb-admissions-wrong-image-placement-fix-dryrun-result.json`

To apply only after review/approval:

```bash
cd /Users/iggy/.hermes/profiles/ignite_team/outbound/krb_page_client_probe
KRB_RUN_LIVE=1 node fix_admissions_wrong_image_placements.mjs
```

The dry-run already confirms all 3 exact guarded actions would apply.
