One plan answers three questions, and Rootform keeps them apart: what the plan proposes, what drift it reports, and what remains once the two combine. You read all three in the summary, the Markdown report, or the Explorer.
The examples use the commerce platform plan from the
quickstart; your own plan.json and
plan.tfplan work the same way.
Analyze the plan without serving the Explorer to read the summary in the terminal:
rootform run plan.json --plan-file plan.tfplan --no-servePlanned changes Refreshed -> Planned Instances 153 addedReported drift No drift reported in this plan.Net change Same determined changes as Planned changes.This sample plan starts from an empty state, so every instance is added, no drift is reported, and Net change repeats Planned changes. A plan made against existing state lists drift records under Reported drift with their architectural consequence, and Net change shows a cancelled entry for each fact drift removed and the plan restores. See drift cancel in the net change walks through such a plan.
"No drift reported in this plan" means the export contains no drift record, not
that infrastructure is unchanged: the plan may have run with -refresh=false
or a narrowed scope, and the export does not record how far refresh went. The
summary says "The export does not establish the refresh scope" for that reason.
The terminal lists added and removed resource instances and changed
Relations, Contexts and Contributions, using a pager for a long report.
--details adds depth to each entry. Markdown shows a bounded preview
unless you request --details; folded lists alone do not make it exhaustive. Indeterminate closures are counted separately: a fact whose
evidence cannot settle on one side is neither added nor removed, and never
counts as unchanged.
For a pull request, write the same content as a Markdown report:
rootform run plan.json --plan-file plan.tfplan --no-serve -o review.mdThe report leads with the totals, keeps the three headings, and folds long
lists so a reviewer sees the shape first.
Review with Markdown explains
its layout and how --details expands it.
Open the plan in the Explorer with rootform run plan.json --plan-file plan.tfplan. The selector at the top left names the current view, starting
with Planned changes and offering Reported drift and Net change
when the plan holds those stages. The reading block at the bottom left picks
one side or the difference: Refreshed, Changes, or Planned. Beside
it, the Added, Removed, Changed, and Indeterminate filters
narrow the canvas. Positions stay put when you switch views, so a change is
easy to locate.
The About this view button beside the selector states what the view compares, its totals, and any limit that changes how to read it, such as instances the plan did not evaluate. What does this plan change? covers the controls in detail.
A plan's own views compare stages of one Form. Comparing two plans, two
states, or two saved Forms with --diff is a different operation: its result
is Differences between two inputs, and it is never drift.
Compare two Forms covers that comparison and
Comparisons and drift owns the model behind
both.