An analytics tracking plan can say an event is implemented while the code never sends it—or the code can emit an event nobody planned. In a September 18, 2026 article, sunnydachs describes plan-drift, a Python-focused command-line tool that compares a JSON tracking plan with source code using static AST inspection. It reports both directions of drift, but it is not a runtime analytics validator: dynamic event names need human review, and property checking is limited.
What plan-to-code drift means
A tracking plan records the events a product expects to collect. Drift appears when that document and the instrumentation in the code stop agreeing. The mismatch can run either way:
- Planned but absent: an event is listed in the plan, but the scanner finds no matching call in the inspected code.
- Implemented but unplanned: the code contains an event absent from the plan.
The author frames the problem with a practical question: after an authentication flow changes, did the team add its tracking? A dashboard may reveal a missing event, but it does not by itself tell whether the event was omitted from code or whether the plan is out of date.
What the described CLI reports
According to sunnydachs’s description, the tool compares a JSON plan against Python source and reports four kinds of findings:
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
- UNEXPECTED EVENT: an event call appears in code but is not listed in the plan.
- UNIMPLEMENTED EVENT: an event is in the plan but no matching call is found.
- PROPERTY MISMATCH: property keys in the implementation differ from those specified in the plan, such as code sending an undeclared key.
- DYNAMIC: an event expression cannot be resolved statically, so a person must review it.
The article’s sample output includes counts and file-and-line findings. Those examples illustrate the reported format; they are not population statistics or an independent test of the current repository.
How to run it, as described by the author
The examples in the article pass the plan path with --plan; the second command also supplies a source directory and requests JSON output:
Rank #2
plan-drift --plan tracking-plan.jsonplan-drift --plan tracking-plan.json ./src --json
The author says test files such as tests.py and test_*.py are excluded so test fixtures are not treated as production instrumentation. The article describes a read-only scan of Python .py files. These are the author’s usage and behavior claims, not independently verified installation or execution instructions.
Why compare in both directions?
A one-way check can catch code that violates a plan, yet miss events that were planned and never wired up. Looking in both directions helps answer two separate maintenance questions: are planned events actually present, and has implementation changed without the plan changing too?
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →The author suggests running checks after a tracking plan is drafted, as code changes, and in CI. The stated rationale is that deterministic, read-only AST analysis produces repeatable findings without asking an LLM to infer intent. As sunnydachs puts it: “Use deterministic tools for deterministic work.” That is the author’s design argument, not evidence of a measured accuracy advantage over other approaches.
What static AST inspection cannot establish
- Language coverage: the described version targets Python. It does not directly inspect JavaScript or other languages.
- Dynamic names: when a name is assembled dynamically, the tool flags it for human review rather than resolving it automatically.
- Property correctness: the reported check concerns property keys. It does not validate property values or provide complete type matching.
- Runtime delivery: finding a call in source is not proof that a real user flow executes it, that an SDK sends it successfully, or that an analytics pipeline receives it.
Those boundaries distinguish static source checks from runtime or event-pipeline validation. Teams with multiple languages, dynamic instrumentation patterns, or strict schema requirements would need complementary checks or manual review; the article does not establish how plan-drift compares empirically with alternative tools.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.What is known about the project
The source is sunnydachs’s article dated September 18, 2026, which links to a GitHub repository. Its current release, license, installation state, and subsequent changes are not established here. Treat the commands and capabilities above as the author’s description rather than a verified statement about the repository’s present state.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




