# Tracking plan audit: <plan name> v<version>

## Baseline

- Plan: <canonical location, for example martech-context/tracking-plan/>, version <n>, last approved <YYYY-MM-DD> by <role>
- Copies compared without counts: <Segment Protocols, Amplitude Data, Avo, Mixpanel Lexicon, sheet, or none>
- Tools and production scope: <tool: project, stream or source, as placeholders such as G-XXXXXXXXXX or <project_id>>; staging excluded <yes | no, because ...>
- Window: <YYYY-MM-DD> to <YYYY-MM-DD> (28 days ending 4 days before the audit, once GA4's daily tables are final); lookback from <YYYY-MM-DD> (90 days); as of <YYYY-MM-DD>
- Inventory per tool: <tool: route (export file, query, MCP read tools behind the boundary below), rows read, caps checked (Lexicon CSV 5,000 events, GA4 daily batch export one million events on standard properties, Amplitude 2,000 event types), partial or complete>
- Time zone per tool and per reference: <tool: time zone its counts use (GA4 property time zone, or UTC through event_timestamp); reference: time zone of each system-of-record count>
- GA4 property tier: <standard (25 parameters per event) | Analytics 360 (100)>; custom definitions read: <file from get_custom_dimensions_and_metrics or Admin, or "not read">
- Read-only boundary per tool: <identity role or scope (for example an Amplitude role with only Use MCP (read), or Avo's read scope with the write-scope consent declined), server switch (PostHog readonly=true, GA4 MCP started without --allow-write, BigQuery MCP execute_sql_readonly with execute_sql and cancel_job denied), client deny list (required for Mixpanel and RudderStack, which have no read-only mode), or "export file, no connection">
- Warehouse queries: <dry-run estimate, maximum bytes billed (console) or job timeout and label (MCP, which has no bytes cap), who approved, or "none run">
- System-of-record counts: <event: source, window, exclusions, time zone, or "none supplied">
- Scripts: <audit_plan.py quality and drift, profile_export.py, with the commands used | script not run, rules applied by hand>
- Emitter roots searched: <repositories, GTM web and server containers, CDP sources and functions, GA4 event rules, tool transformations>

## Summary for stakeholders

- What is wrong: <one sentence, with the largest numbers>
- What it affects: <metrics, dashboards, key events, ad conversions, workflows and audiences that read the affected events>
- What gets fixed first: <privacy, then double counting and wrong values, then missing data>

## Plan quality

- Verdict: <contract | schema only | names only>, because <reason>. Drift depth: <all rules | rules not run and why>
- Q01 contract-core: <PASS | WARN | FAIL>, <passed> of <total> events. <offenders>
- <one line each for Q02 to Q13>
- Naming: <event-naming-convention lint summary, or NOT CHECKED and why>

## FAIL

- F<nn> <rule> <tool> <event.property>: <finding with the rows affected and the window; share rules (D07, D08, D10, D11, D12, D14 shares) also give the denominator and share; D01, D02, D03 and D05 give last seen>. Evidence: <payload | emitter location | system-of-record count | unconfirmed>. Disposition: <fix implementation | amend plan | adopt | retire | rename or merge | accepted exception | needs decision>. Exception cited: <decisions.md entry, or none>

## WARN

- F<nn> <rule> <tool> <event.property>: <finding with numbers, as above>. Owner for the decision: <role>. Disposition: <...>

## Coverage and PASS

- Planned events checked per tool: <tool: n of n mapped events have a status line>
- Observed names by class: <tool: planned n, variant n, vendor n, generated n, dynamic n, test n, orphan n>
- PASS: <rule: what was checked and found correct>
- INFO: <not shipped events, names listed without counts, transport duplicates, ratios inside their band, the GA4 stream platform note>

## Cross-tool matrix

- <event.property>: <tool: share present, types; tool: ...>. Locator: <every tool, so the emitter | one tool, so that tool's path>

## Decisions needed

- <question>: owner <role>, due <YYYY-MM-DD>, findings <F-numbers>

## Monitors to add

- <monitor: completeness, unknown enum value, ratio band, stopped sending or new unplanned event>, threshold <value>, owner <role>, tool <vendor alert or warehouse test>

## Not checked

- <rule or item>: <reason, for example "no values column for enumerated properties" or "no system-of-record count for data_source_connected">

## Evidence log

- F<nn>: <evidence type and location>, captured by <role> on <YYYY-MM-DD>; live test approval: <who approved, test account or staging, test references>

## Next steps

- Change list: <path>. Reconciled plan draft: <path to plan-changes CSV and draft tabs or contract diffs>.
- Proposed updates to martech-context/ (tracking-plan, data-dictionary.md, decisions.md): <list>, waiting for approval.
- Nothing in any tool was changed by this audit.
