# Fusion execution package verification

Created: YES. Tested: document/source checks and local browser. Published: N/A. Provider changes, campaign spend, website deployment and client messages: none.

## Reproduce

```sh
python3 /Users/agency/Documents/Agty/Fusion/outputs/fusion-ppc-execution-plan-20260913/verify.py
```

[Machine result](verification-result.json), [validator](verify.py), [action map](actions.json), [package data](package-data.json), [generation source](build.py).

## Source map and claim audit

| Plan area | Accepted source | Checked claim / limit |
| --- | --- | --- |
| Scope and acceptance | [Parent acceptance](../../docs/goals/fusion-ppc-decisions-20260913/notes/parent-acceptance.json), [accepted report](../../docs/goals/fusion-ppc-decisions-20260913/notes/executor-report.md) | Revision 2 accepted. Tracking first, mature Meta CPL 5987.71, 20404 heuristic, existing authorization preserved. |
| All decisions | [Normalized report](../fusion-ppc-decisions-20260913/report-data.json), [decision source](../fusion-ppc-decisions-20260913/decisions.py) | G01–G06 and M01–M07 covered. G05 copy replaced only by user's explicit correction. |
| Account and budget | [Google campaigns](../fusion-ppc-decisions-20260913/evidence/google-campaigns.json), [Google budgets](../fusion-ppc-decisions-20260913/evidence/google-budgets.json), [Meta account](../fusion-ppc-decisions-20260913/evidence/meta-account.json), [Meta campaigns](../fusion-ppc-decisions-20260913/evidence/meta-campaigns.json) | Google 2938223921, Meta act_1783210591808804, HUF, 3000 each. Read 13 September, must be refreshed at execution. |
| Goals | [Custom goal](../fusion-ppc-decisions-20260913/evidence/google-custom_goals.json), [conversion definitions](../fusion-ppc-decisions-20260913/evidence/google-conversion-definitions.json) | Exact action IDs, ONE_PER_CLICK, primary/secondary flags and custom goal membership. |
| PMax exclusions and themes | [Criteria](../fusion-ppc-decisions-20260913/evidence/google-criteria.json), [signals](../fusion-ppc-decisions-20260913/evidence/google-signals.json) | Preserve existing three negatives, add four per campaign. Six exact signal resources removed, eight retained. Not a promise to force Search delivery. |
| Meta object/event identity | [Ad sets](../fusion-ppc-decisions-20260913/evidence/meta-adsets.json), [ads](../fusion-ppc-decisions-20260913/evidence/meta-ads.json), [earlier rejection](../fusion-ppc-decisions-20260913/evidence/prior-P1-rejection.json) | Existing form-start object must be replaced, not retried in place. New LEAD eligibility still requires paused draft readback. |
| Submission path | [Prior path audit](../fusion-ppc-decisions-20260913/evidence/prior-lead-path-audit.json), normalized report reconciliation | Form 3154, historical tag 15/version 23 only hints. Server dedup was unverified. Dates/permissions defect does not prove all CAPI paths failed. |
| Creative and landing | [Complete accepted packages](../fusion-ppc-decisions-20260913/campaigns.json), [copy and briefs](../fusion-ppc-decisions-20260913/campaign-copy.md) | Launch copy and first brief embedded. Remaining inventory is linked. New media and landing URLs not produced/live. Low-spend ads paused for concentration, not proven failure. |

Current official Google documentation checked on 13 September 2026: RSA headline limit 30 and description limit 90 characters, supported by [Google responsive search ads](https://support.google.com/google-ads/answer/7684791?hl=en). Secondary actions remain biddable inside an assigned custom goal, supported by [Google conversion goals](https://support.google.com/google-ads/answer/10995103?hl=en). Dynamic provider fields are resolved in paused drafts later, no claim of current write eligibility is made.

## Budget and copy arithmetic

Seven mutually exclusive stages each equal 6000 HUF/day. Google 3000 = PMax 1500 + Search 1500 in test stages. Meta 3000 goes to old campaign, C1 or C2, never two simultaneously. Retained paused budgets do not add active allocation. Cross-object transitions use a temporary reserved amount and debit-before-credit sequence to avoid overlap.

- 41914 / 7 = 5987.71 HUF mature historical Meta pixel Lead CPL.
- 40808 / 4 = 10202 HUF recent provisional CPL.
- 2 × 10202 = 20404 HUF heuristic challenger cap, not statistical proof.
- 28 × 1500 = 42000 HUF Search test exposure.
- Corrected headlines have 24, 19, 28 and 22 characters. Descriptions have 59 and 79. No wording or punctuation changes required.

Historical evidence is not causal proof. Actual recent register submissions 4, Meta attributed pixel Leads 4, GA4 VHK_lead 9 and Google 21.976531 form starts with zero submitted-action attribution stay separate. Qualified total unknown. Client summary explicitly separates Tervezett and Elvégezve, claims only the package has been produced, and contains no em dash or semicolon.

## ID completeness and execution limits

65 action rows carry object, before, after, prerequisite, role, readback and rollback. Existing numeric provider IDs in the action map are cross-checked against accepted evidence. New objects use explicit NEW_* handles, recorded from create responses and independently fetched before use. L01–L04 define lookups for current GTM/GA4/Sheet/Apps Script/page/Instagram identities and current provider field/placement eligibility. These are safe execution-time prerequisites, not invented completed checks.

The checklist records action dependencies. Creation rows can be prepared in dependency order while paused. Complete S01 before G03 rows targeting NEW_SEARCH_ID. Exact targeting settings in the Search/Meta specifications are part of the corresponding creation row, not optional suggestions. Real write payloads and authentication are intentionally not executed in this document phase.

The website work remains a gated later implementation. User-corrected 3D-planner promise requires route verification before activating the RSA. No new disclosure, permission, raw-lead audience upload or guessed event replay is included.

## Browser and privacy checks

Private in-app browser URL: [local overview](http://127.0.0.1:41874/fusion-ppc-execution-plan-20260913/index.html). Actual mobile viewport 390 × 844 CSS pixels, document scrollWidth 390. Budget table scrolls inside a 358-pixel container. Desktop inspected at the runtime's measured 1800 × 1125 CSS pixels, document scrollWidth 1781. Navigation to the budget section and local note save/reload persistence passed. The test note was cleared. Browser console had zero errors.

[Desktop screenshot](desktop.png), [mobile screenshot](mobile.png), [browser receipt](browser-qa.json).

The HTML review-host skill was read and applied through its explicit private/local exception. No public publish command or remote comment backend was used. A minimal browser-local note is supplied instead of claiming the shared review service ran. Cross-browser synchronization, shared inline rewrites and public-host checks are not applicable to this private no-deployment package. The server is loopback-only and must remain running for the HTTP link. Markdown files open through Codex file panels, or download from local HTML links.

## Deliverables

- [Visual overview](index.html)
- [Implementation runbook](implementation-runbook.md)
- [Provider change checklist](provider-change-checklist.md)
- [Hungarian client summary](client-summary-hu.md)
- [This verification index](verification.md)

## T002 bounded correction, revision 2

Per-object readback now accepts each intermediate state. G05 verifies only its target removed and all other themes unchanged, with eight retained dual-use themes preserved. Exactly eight is checked after all six removals. M02 verifies only its target paused and all other statuses unchanged, preserving both anchors. Exactly two active ads is checked after all ten pauses. Carousel 3 is first in action data, runbook and checklist.

Run `python3 verify-sequence.py` from this directory. [Dry-run checker](verify-sequence.py) and [result](sequence-verification.json) show theme totals 13 → 12 → 11 → 10 → 9 → 8 and active-ad totals 11 → 10 → 9 → 8 → 7 → 6 → 5 → 4 → 3 → 2. Full verify.py passes. HTML and corrected client copy hashes are unchanged.

The Judge observed residual QA note text despite the earlier attempted clear. During T002 the in-app browser was unavailable, so cleanup could not be verified. The note is browser-local only and does not alter provider state or saved deliverables.
