PathixDataverse Forensics
One Question · Ep. 03 · Migration impact

If it changes, what breaks?

contoso_engagement.estimatedvalue

Before a new calculation for estimated value ships, you want to know what reads it, and what reads those. The platform's dependency check lists the declared references, but it doesn't read the logic.

One Question · Ep. 03
1 of 3

Reads hide in more places than writes.

Illustration · the places a trace by hand has to open

A form, a view's filter, a plugin that fires when the value changes, an AI prompt that summarizes it, a flow that copies it somewhere else. So you trace it by hand, one hop at a time.

2 of 3

Every edge says how the read happens.

In this demo scenario, nine components read estimated value: a form and a view show it, two AI prompt columns summarize it, a form script and two Dataverse functions calculate with it, a plugin step fires when it changes, and a cloud flow, switched off today, copies it into a compliance review. Each edge is labeled Display (it's shown), Filter (it decides whether something runs) or Computation (something is calculated from it).

3 of 3

The chain starts and ends on the same Power Pages site.

Downstream, the compliance review's exposure amount rolls into a branch summary that ends up on a Power Pages page, the branch capacity board. Upstream, a plugin writes estimated value when an appointment request is created, from a basic form on the same site whose table permissions are configured to let anonymous visitors create requests. It's structure, not traffic, and this chain is a demo scenario built to exercise the parsers: yours won't be this tidy.

Pathix MCP

Or, ask your agent.

One Pathix call per hop: what reads estimated value, then what reads what that writes. With the Dataverse MCP alone, each hop is the same search, done by hand again.

How the Pathix MCP works →

Demo environment · illustrative
How Pathix knows

A read-only metadata scan of your environment that reads the logic inside the components: compiled plugins, flow definitions, workflow XAML and scripts.

How it works →
Follow the edge
Ep. 04 · Next questionWhat changed since the last scan?The platform can tell you a solution was imported and when, show one component's layers at a time, and, if auditing was on, who changed a record. What it can't give you is one list of what the release changed, in your logic and in your access.Next question →
Or branch from something in this answer
How is this Power Pages site put together?Contoso Scheduling SiteThe chain starts and ends on one Power Pages site. Ep. 12 shows how that site is put together.What calls outside my tenant?external connectionsThe plugin that creates the engagement comes back in Ep. 13, where its findings say it calls out over plain HTTP, from compiled code.

Or do it by hand: what breaks when you change a column→All questions →

The long answer

The detail behind the answer, for the reader who needs it.

  1. 01The inventory
  2. 02The rewrite plan
  3. 03Cascade fanout
  4. 04Table deleters
  5. 05What the plan admits
Read the long answerClose the long answer
The inventory

Four things you can ask before you touch anything.

CAPABILITY
POINT IT AT
WHAT COMES BACK
Table logic footprint
Pathix logic footprint for the account table: 12 components, one row each, with the columns each one writes and reads folded in, plus type, enabled state, a confidence tier (Parsed here), parse status, and the source parser. A note flags that canvas-app deep scan is disabled for this environment, so canvas-app column reads and writes may be undercounted.
A table
Every component with an edge to any column on it, deduped per component, with the columns each one touches folded into the row.
Rewrite plan
Pathix rewrite plan for the cso.accountprogram table: a leaf-first migration order in three waves across six components, each row showing the component, its type (cloud flow, classic workflow, or plugin), a confidence tier (Parsed or AI-derived), and a track. The view openly flags a cycle group with no provable internal order, an unresolved-only edge, a component parsed with partial success, three components registered with no resolved column edge that it could not place in the sequence, and a note that the order reflects modeled coupling only and should be treated as a candidate to verify, not proof.
A table
Every bound component arranged leaf-first into parallel tracks and ordered waves, with cycles and unproven edges marked.
Cascade fanout
Pathix cascade fanout for the account table: 43 direct and 1,732 total cascade edges, with depth, behavior, the tables they cascade to, and relationship names.
A table and one of five axes
Which tables a single operation reaches once the platform follows the relationships down, and how deep it goes.
Table deleters
A table
Everything able to remove its records: cascade relationships, plus any plugin or workflow logic that issues a delete.
Click a capability to see it in the product.
Your agent can call these too

Three of the four are on the Pathix MCP server, so an agent can run the same analysis and hand you the answer rather than you driving the console: describe with a table's logic section, and analyze with cascade or migration_plan. Every call is read-only, and the agent signs in as you.

All 5 tools, and what a session looks like →

The rewrite plan

Tracks run in parallel. Waves run in order.

The plan folds two kinds of coupling into one sequence: column data flow, meaning one component writes what another reads, and orchestration, meaning one component invokes another. Both have to hold for the order to be safe.

1 cycle group · 2 unproven edges · 2 tracks  Hover a component to trace what it reaches.
thenpoints from what you change first to what depends on it. It is not a “depends on” arrow.
cycleno provable internal order, so the group migrates together.
unprovenPathix could not resolve the link. It stays in the plan, and you verify it.
Trackan independent cluster. Different tracks share nothing and can move in parallel.
WAVE 0 safe to change firstWAVE 1WAVE 2TRACK 0TRACK 1↺ no provable internal orderDFDataflowCredit DataflowPLGPlugin stepFetchXmlCreditLimitMAPColumn mappingaccount → contactJSForm scriptaccountcreditlimit.jsHTMLHTML web resourcecredit_limit_managerWFClassic workflowOn Create - Set DefaultsFLWCloud flowOn Create UpdateAPICustom APIpathix_SetCreditLimitWFClassic workflowDISABLEDWorkflow with ChildWFClassic workflowDISABLEDChild Workflow
A reduced model of the real view, with the same interaction.
See the real one
Pathix rewrite plan for the account table, drawn as a grid. Waves run left to right as an order: wave 0 is labeled safe to change first, then wave 1, then wave 2. Tracks stack vertically and are independent. Track 0 spans all three waves, running dataflows, a plugin step and attribute mappings into a cycle group of a form script and an HTML web resource marked no provable internal order, then out to classic workflows, a cloud flow, a dialog, an action, plugin steps and a custom API. Track 1 is two disabled classic workflows, a parent and its child. Track 2 is a single attribute mapping. Above the grid the view reports 1 cycle group, 1 orchestration call, 12 unproven edges and 16 components registered with no column edge, and states that absence reflects scanned coverage only and should be treated as a candidate to verify, not proof the field is unused.

A rewrite plan drawn as a grid. Waves run left to right as an order: wave 0 is safe to change first, then wave 1, then wave 2. Tracks stack vertically and are independent, so no edge ever crosses between them. Track 0 runs a dataflow, a plugin step and an attribute mapping in wave 0, into a cycle group in wave 1 holding a form script and an HTML web resource marked no provable internal order, and out to a classic workflow, a cloud flow and a custom API in wave 2. Two of its edges are dashed because they are unproven. Track 1 is a disabled classic workflow and its disabled child. Track 0 and track 1 could be worked at the same time by different people without either waiting.

Point your agent at this with the Pathix MCP and it returns the same ordered plan, with the cycles and unproven edges still labeled.

Tracks are independence

Clusters with no coupling between them. Two tracks can be worked at the same time by different people without either one waiting, which is what makes a large migration divisible in the first place.

Waves are order

Wave 0 is what nothing downstream depends on, so it is safe to change first. Work outward from there toward the roots everything else sits on.

Cascade fanout

The blast radius of one operation, along five axes.

Cascade behavior is configured per relationship and its reach compounds quietly. Pathix walks the relationship metadata outward along whichever axis you pick and returns the tables that operation actually reaches, with the depth it traveled to get there.

DELETERemoving one record removes or unlinks records in the tables it reaches.
ASSIGNChanging an owner reassigns records downstream.
SHARESharing a record shares what cascades from it.
UNSHAREWithdrawing a share withdraws it downstream too.
REPARENTMoving a record under a new parent re-derives inherited access.
Table deleters

What can remove records from this table.

Cascade is only one route. A plugin or a workflow can issue a delete directly, and that path does not appear anywhere in the relationship metadata. Pathix answers the question from both sides at once: the relationships that cascade a delete into the table, and the component logic that deletes from it on purpose.

What the plan admits

A direction to verify, not an asserted build order.

A migration plan that looks certain is worse than one that shows its gaps, because you will act on it either way. Three things the rewrite plan flags about itself.

Cycle groups

Where two components depend on each other, no internal order is provable. Pathix marks the group rather than picking one and presenting it as the answer.

Unproven edges

An edge crossing an Unresolved or AI-derived endpoint is labeled unproven. It stays in the plan, because dropping it would make the sequence look more certain than it is.

False leaves

A component can land in wave 0 because nothing depends on it, or because Pathix could not resolve what it depends on. Those two are very different, and the plan tells them apart.

The plan reflects coupling Pathix could model from structure. Treat it as a sequence worth checking rather than proof, which is also how the product words it.

Bring the question you already have.

A 30-minute walkthrough on a pre-scanned demo environment. No access to your tenant, nothing to install.

Book a demoRead the sample report →
Pathix in two minutes
© 2026 Pathix L.L.C. · self-hosted · metadata-only
Not affiliated with Microsoft. Dynamics 365, Dataverse, and Power Platform are trademarks of Microsoft Corporation.π