Tracking Agent docs
The Tracking Agent PR check: every status and what to do
The Tracking Agent posts two required checks on every pull request: datalyze/rules, which runs scripts only, and datalyze/tracking, which runs the agent. Most pull requests need no tracking change and go green with a one-line reason. When one does, datalyze/tracking waits for a person to approve the proposal, then to sign off the verified result.
What does each datalyze/tracking status mean?
| Status | GitHub shows | What it means | What to do |
|---|---|---|---|
| Analysing | Pending | Triage, the change map and the proposal are running | Wait. If it stays here after the workflow run has ended, comment /datalyze retry |
| No tracking change needed | Success | Nothing in the change affects tracking; the reason is in one line | Nothing |
| Awaiting review | Pending | A proposal is ready, with the number of changes and how many are breaking | A reviewer approves or rejects each item |
| Implementing and verifying | Pending | The agent is updating the registry and code and verifying them | Wait |
| Needs a decision | Pending | Verification still fails after two fix rounds, or a fix needs a judgement call | A reviewer picks an option, answers the question, or drops the item |
| Can't verify: environment | Failure | Installing dependencies, a build or a test login failed: not the tracking | Fix the environment, then comment /datalyze retry |
| Awaiting sign-off | Pending | Verified, and one commit pushed | A reviewer signs off |
| Verified and signed off | Success | Done | Merge |
| No tracking change: all items rejected | Success | Reviewers rejected or dropped every item | Nothing |
| Skipped | Success | A maintainer skipped the check, with a reason | Nothing; the next audit flags it |
| Not checked | Success | The licence is inactive or couldn't be verified | Renew, or check DATALYZE_KEY |
| Error | Error | The check stopped, and says why on the pull request | Fix the cause, then /datalyze retry |
The statuses are commit statuses tied to one commit. A pending status can wait days for a person without any job running.
What does datalyze/rules check?
datalyze/rules runs three scripts and no model, so it gives the same answer every time and costs nothing:
datalyze validate --since-baseline: the registry's rules, reporting only findings added since the baseline.datalyze scan --fail-on-drifton the files the pull request changed: the code against the registry, such as a live event with no call, or an SDK call outside the adapter.datalyze generate --check: the typed tracker matches the registry.
It runs on every push, including the agent's own commits.
Who can post the datalyze/tracking and datalyze/rules statuses?
Setup makes both checks required with a repository ruleset on your default branch. With your own GitHub App, the ruleset accepts datalyze/tracking and datalyze/rules only when that App posted them, so no other token can turn them green. Without an App, any token with write access to the repo could post them.
One risk is left either way. Anyone who can push a branch that changes .github/workflows/ can run code with the repo's secrets on that pull request, the App's key included. Protect .github/workflows/ and .datalyze/ with CODEOWNERS and turn on required code-owner review for your default branch, so a change to either can't merge without its owner's review, and give write access only to people you'd trust with those secrets.
What happens when a pull request needs a tracking change?
- Triage. Scripts decide when the answer is certain; otherwise a small model decides whether the change touches tracking at all.
- Change map. The agent lists every tracking call the change can reach: calls on changed lines, in touched files, one import level up and down, and on the same funnel.
- Propose. Four specialists work in parallel (coverage, breakage, dead items, conventions), then a critic merges their items, drops any without evidence, and applies the event budget.
- Review. A reviewer approves, edits or rejects each item. See reviewing.
- Implement. The agent writes the approved items into the registry, regenerates the typed tracker and edits the call sites. A scope guard reverts edits outside the approved set.
- Verify. Scripts, your own checks, generated tests and an independent verifier. See verification.
- Commit and report. One commit,
datalyze: implement tracking changes (round N), and a comment with the results per item. - Sign off. A reviewer signs off and
datalyze/trackingturns green. - After merge. The Google Sheet is rebuilt from the registry on your default branch. The
after-mergejob moves what shipped fromplannedtoimplementedand marks signed-off proposals, in one pull request from the branchdatalyze/after-merge. Only statuses andcode_refschange in it, so the check passes it without a model call; merge it when convenient.
The PR check catches tracking problems before they ship. The playbook chapter on data accuracy as a system covers the alerts that catch them after.
What happens when I push again?
A new push is triaged on what changed since the last check. If it can't affect tracking, the proposal, approvals and sign-off carry over to the new commit. Once the change is verified or signed off, any push that touches the tracking plan or a file with a tracking call is checked again, without asking a model whether it matters. If it can, the change is analysed again, and decisions on items whose content didn't change are kept. The agent recognises its own commits and doesn't start over for them.
How do I skip the Tracking Agent check?
Comment /datalyze skip "reason". Only people in maintainers in .datalyze/config.yaml can skip; it defaults to your reviewers. A skip covers the commit it was given on, is logged in .datalyze/decisions.yaml, and the next audit flags it.
What happens to the PR check when the subscription lapses?
Both checks pass with a note that the pull request wasn't checked. The same happens with an unknown key, a method bundle whose signature doesn't verify, or Datalyze unreachable with no cached method. A lapsed payment never blocks a release.
Are draft pull requests checked?
Not by default. A draft shows datalyze/tracking as pending with a note, and is checked once it's marked ready for review. Set check_drafts: true in .datalyze/config.yaml to check drafts too.
How much does a PR check cost in model spend?
Model spend goes to your own provider, and every comment ends with the models used, the tokens and the cost. When a script can tell a pull request needs no change, no model runs. On this site's repo, a run where triage found no tracking change cost $0.20, and two pull requests that went through the whole flow cost about $1.10 and $3.20.
model.max_cost_usd in .datalyze/config.yaml stops a run once its spend passes the cap. The default is $10. Calls whose price isn't known (Bedrock, Vertex, a gateway, OpenAI or Gemini without model.pricing) count against the cap at $5 per million input tokens and $25 per million output tokens, so the cap still stops a run; the report still says their cost is unknown.
Questions about the PR check
Can a pull request merge while datalyze/tracking is pending?
Not once it's a required check, which setup makes it. People GitHub lets bypass branch rules still can; that's a GitHub setting on your repo.
Why did the check pass with "not checked"?
The licence was inactive or couldn't be verified. Check that DATALYZE_KEY holds your current workspace key and that the subscription is active; troubleshooting has the details.
Who can skip the check?
Only people in maintainers, which defaults to your reviewers. Every skip needs a reason, covers one commit, and is flagged in the next audit.
Does the check catch tracking that's already broken?
The PR check judges what each pull request adds; problems that were there at install sit in the baseline. Finding those is the job of the audit, or of a person in our analytics audit.