# GTM workflow review: <workflow name>

## Baseline

- Systems and workspaces: <CRM portal or org name, Clay workspace, Apollo team, sequencer workspace and client scopes>
- Configuration read: <exports, screenshots and read-only tools used, with the identity for each>
- Read time: <YYYY-MM-DD HH:MM UTC>
- Data period and record counts: <dates; signals, episodes, ledger rows, CRM records>
- Scripts: <route_dry_run.py, enrichment_cost.py, check_writeback.py: ran with ..., or not run and why>
- Inputs used: <martech-context files, or what the user supplied>

## FAIL

- <rule ID> <finding in one sentence>. Evidence: <file, row, screenshot or script line>. Exception cited: <decisions.md entry, or none>. Decision owner: <name>

## WARN

- <rule ID> <finding>. Decision needed from: <owner>. Runtime test needed: <yes, which, or no>

## PASS

- <rule ID> <what was checked and found correct, with evidence>

## Reconciliation per stage

- <stage>: input <n> = excluded <n by reason> + held <n> + passed <n>

## Cost summary

- Blended cost per accepted record: <USD>. Marginal per stage: <values>. Ceiling: <USD or not set>
- Billed against modeled: <provider: variance>

## Routing dry-run summary

- Policy <id and version> on <period>, <n> episodes (at least 200, or say why fewer): <paste the final line>. Failed invariants: <list or none>. Rules that never fired and their test rows: <rule IDs>

## Writeback check summary

- <paste the Decisions line and the final line>; blank mode used: <ignore | send, and why>

## Sender paths

- <sending domain>: SPF <pass | fail>, DKIM d=<domain> <pass | fail>, DMARC <pass | fail>, one-click unsubscribe <present | missing>, spam rate <value and date, or no data and the substitute signal used>, last batch hard bounces <percent>

## Not checked

- <rule or item>: <reason, and what would be needed to check it>

## Next step

- Change list: <path>. Nothing was changed by this review: no write, enrollment, send, purchase or settings change.
