# Define the tracking plan as a schema and validate emissions

A tracking plan in a spreadsheet, turned into a schema that fails the build when an event does not match.

Category: Analytics and tracking
Source: https://letsship.ai/use-cases/define-the-tracking-plan-as-a-schema
Published: 2026-08-25

## Goal

Express the tracking plan as a schema and validate emitted events against it.

## Acceptance criteria

- The plan is expressed as a machine-readable schema
- Emissions are validated against it in CI
- An invalid event fails the build rather than reaching the warehouse
- The schema is the source the documentation is generated from

## What lands as proof

A deliberately invalid event failing CI, which moves the failure from the warehouse to the pull request.

## Prompt

Copy this to an agent to open the ticket:

```text
Create a Linear issue in my team and assign it to the SHIP agent.

Title: Validate events against the tracking plan

Description: Express the tracking plan as a schema and validate emitted events against it.

Acceptance criteria:
- The plan is expressed as a machine-readable schema
- Emissions are validated against it in CI
- An invalid event fails the build rather than reaching the warehouse
- The schema is the source the documentation is generated from

Before you create the issue, find where this repository's tracking plan currently lives and say whether it is machine-readable.
```

## Questions

### What does the agent actually change?

The ticket is scoped to one outcome: express the tracking plan as a schema and validate emitted events against it. Work that serves that outcome is in scope, and anything outside it is left for a separate ticket, so the pull request stays reviewable.

### How do I know the work is done?

The pull request carries the evidence, not only the diff. Here that means an invalid event fails in CI rather than in the warehouse, so a reviewer can confirm the result without reproducing the work locally.

### How much oversight does this need?

The run stops once the plan is written. Somebody reads the approach and approves it before any code exists, which is the cheapest moment to redirect the work.
