Compare the "status" chart against the "plan" chart, tooth by tooth and
axis by axis (see DIFF_AXES), and report every axis whose label
differs. Pure and read-only: never mutates either chart, never touches the
DOM, never renders — a parity.test.ts-safe addition.
Returns [] whenever the plan chart hasn't been initialized yet (no plan
exists to diff against). A tooth absent from either chart resolves via
defaultState(), so a status-only or plan-only tooth still diffs correctly
against the clinical default rather than throwing.
Iterates the fixed ALL_TEETH list (not chart key insertion order), so
results are always grouped by tooth in the same stable clinical order the
rest of the app already uses (quadrant-by-quadrant); within a tooth,
entries follow DIFF_AXES order.
Compare the "status" chart against the "plan" chart, tooth by tooth and axis by axis (see DIFF_AXES), and report every axis whose label differs. Pure and read-only: never mutates either chart, never touches the DOM, never renders — a
parity.test.ts-safe addition.Returns
[]whenever the plan chart hasn't been initialized yet (no plan exists to diff against). A tooth absent from either chart resolves viadefaultState(), so a status-only or plan-only tooth still diffs correctly against the clinical default rather than throwing.Iterates the fixed
ALL_TEETHlist (not chart key insertion order), so results are always grouped by tooth in the same stable clinical order the rest of the app already uses (quadrant-by-quadrant); within a tooth, entries followDIFF_AXESorder.