PathixDataverse Forensics
Capability · Dependency analysis

What writes to this field?

Dynamics cannot answer that about itself. Pathix resolves it across twenty-five component types, covering both what writes the column and what reads it. Every edge carries the evidence behind it, and the writes Pathix could not trace get labelled instead of dropped.

See it on sample data →Or do it by hand: the manual method →
The answer

One column, every component that touches it.

Writers and readers appear in one ranked list. Each row shows the component kind, the direction of the edge, and how Pathix established it. You can filter by direction or by confidence, export the table to CSV, and click any row through to that component's own page.

The Pathix touchpoints view for the column account.creditlimit. A header reads 6 writers, 12 readers, 2 conditional, with a salience score of 48 at the 88th percentile within the environment, and chips for fan-in 18, sensitive, near a finding, and unvalidated AI edges. Filters run across direction (all, writes, reads) and confidence (all, declared, parsed, AI-derived). Eighteen rows list each touchpoint: a plugin step writing the column at AI-derived confidence, an orphaned plugin step reading it, a classic workflow both writing and reading, a canvas app, an HTML web resource, two more plugin steps, a business rule, a dashboard, a form, a form script, a cloud flow, a PCF control, a saved query, and a chart, each with its confidence tier. Below, a signals panel shows one medium-severity finding: an orphaned plugin step targeting a deleted entity.
Both directions

Reads are dependencies too.

Writers tell you what can change a column. Readers tell you what breaks when it does, and those are different problems. Pathix models both directions and labels the kind of dependency, because a chart that displays a value fails very differently from a flow trigger that branches on it.

KIND
WHAT IT MEANS
EXAMPLE
Write · Direct
The component assigns the column on the target record.
A plugin step setting creditlimit on the account it fired for.
Write · Related entity
The component writes the column on a different record it reached.
A workflow updating the parent account from a child case.
Read · Filter
The value decides whether something runs or what it returns.
A flow trigger condition, a FetchXML filter.
Read · Display
The value is shown to somebody.
A form field, a view column, a chart series.
Read · Computation
The value feeds a derived result.
A rollup, a formula column, a canvas app expression.
Read · PreImage
The platform captures the prior value before the change.
A plugin step pre-image registered on update.

Write edges carry two further details. One is conditionality: does the write always fire, or only inside a branch. The other is origin, which separates a person editing a form from an automation running on its own.

Every surface these edges are parsed from →

How Pathix knows

Every edge says where it came from.

If you cannot check how a dependency was found, you are taking the list on faith. Every edge carries one of four confidence tiers. Pathix never averages them into a single score, and it shows the weakest tier as plainly as the strongest.

DECLARED

Platform structure pins the target, through a registration, a manifest, or a binding. Pathix inferred nothing here.

PARSED

Pathix resolved the exact column from the component's own logic, whether that was compiled IL, workflow XAML, flow definition JSON, or a JavaScript syntax tree.

AI-DERIVED

A model read decompiled code and proposed an edge the parser had missed. It arrives with its evidence attached, it cannot override a deterministic edge, and dismissing it hides the edge without destroying it.

UNRESOLVED

Pathix found a write but could not trace its target, usually because the column name is assembled at runtime. It gets a tier of its own so the write stays visible.

Pathix reads compiled plugins

A plugin ships as compiled IL, so the platform's own dependency tracking stops at the registration and never sees the field assignment inside. Pathix decompiles the assembly and walks the IL for column-level reads and writes. That covers assemblies shipped by a vendor, which you opt into and can exclude per publisher. Vendor code writes to your columns like anything else, and skipping it would leave a gap in the graph exactly where you have no other way to look.

A distinction that matters

A role that grants write access is not a writer.

Granting the ability to write is not the same as writing. Pathix keeps them on separate surfaces on purpose: write edges live in the dependency graph, and who can write lives with the roles and principals. They never merge into one edge.

Blur the two and a permission starts looking like a dependency, which is the confusion an access review exists to prevent. The dependency graph answers what could change this value. The roles and principals answer who could, and a list that mixes them is not a reliable answer to either one.

Who can write it: effective permissions →The findings that come out of both →
Coverage, honestly

What structural parsing misses, and what closes it.

Any tool that claims to find everything is guessing somewhere. Two gaps are worth naming. Pathix labels both in the product, so a clean-looking list never implies more certainty than it has.

Column names built at runtime

A late-bound or dynamically assembled column name cannot be resolved from structure alone. Pathix marks the write Unresolved and adds it to a worklist rather than guessing at a target. With AI enabled it reads the decompiled or original source and can propose an evidence-coupled edge for some of them, so the gap is smaller than the parser alone would leave it.

PCF controls, at manifest tier

Pathix traces bound properties from the manifest through each form binding. A control that takes its column name from runtime configuration is a documented gap in the coverage register.

Canvas apps are the one place depth is a setting rather than a limit. Standard parsing resolves them as far as the table; switch deep scan on for an environment and Pathix unpacks the app package for column-level attribution.

All of which is why an empty result is worded carefully. A column with no writers means no scanned surface resolved a write to it. Treat that as a strong lead worth checking, well short of a guarantee that nothing can write it.

The manual method

You can do this by hand.

Both guides work whether or not you ever buy anything, including the parts where the manual approach gives out.

Try it on a column you already worry about.

The demo is the real console running on a sample environment. Open a field, filter by confidence, and see what the answer looks like before you talk to anyone.

Book a demoExplore the live demo →
© 2026 Pathix · self-hosted · metadata-onlyNot affiliated with Microsoft. Dynamics 365, Dataverse, and Power Platform are trademarks of Microsoft Corporation.