Load: ../run-paid-campaigns/references/moves.md, ../run-paid-campaigns/references/written-instructions.md.
Inputs: the outcome check (each earlier move: worked / didn't work / too early / can't tell, from ../run-paid-campaigns/references/run-memory.md); the weekly-read table; the health gate; allowable CPA and ceiling; month-to-date spend; last week's scored moves; picked creatives for swaps (the batch file's picks + lower-case tag picked), with their batch-file copy; analyze-performance's calls (including Google wasted-spend terms).
Do:
- One recommendation per object that needs a move (an internal
R<n>; the proposal numbers moves for the marketer); holds get a date and a trip-wire. Low-volume regime: a normal week is fixes + "no moves; next decision ". - Scale steps +20–30% against the implied daily pace; lifetime math for Goose launches; nothing in a flight's last 2 days.
- One significant edit per ad set per week; drop the lower-confidence edit if two collide and say so. Pausing an ad doesn't save money unless its ad set budget is cut.
- Near-threshold → both readings + recommendation + trip-wire.
- Rotate before decay: swap to an approved render, else a rotation request — except in an ad set frozen until an earlier move's readout: there, a hold with a click-rate trip-wire (
../run-paid-campaigns/references/moves.md§ Freeze until read). - Everything outside GooseWorks' levers → a card.
- Sum the effect on month-end spend; stay within the ceiling (cut the lowest-confidence scale first).
- Expected effect from the account's own history, direction-only, or "unknown".
- Every money move: write its baseline recipe (
../run-paid-campaigns/references/run-memory.md) and its readable-from date; skip any ad set frozen until an earlier readout; don't repeat a move that didn't work without a new reason. - Run the failure-mode checklist.
Output: the moves table, the both-readings blocks, the cards, rotation requests, the R# entries for state.md, and the money-move rows (recipe, review-by) for the run record.