Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
65aab25
DOC: Add a defect hunt to the filter V&V policy
imikejackson Oct 2, 2026
34d9a1f
DOC: Add SIMPLNX input-shape patterns to the defect hunt checklist
imikejackson Oct 7, 2026
d3082d3
DOC: Reference DREAM3D 6.5.171 only in V&V documents
imikejackson Oct 7, 2026
98466c1
DOC: Add a part for SIMPLNX defects to the V&V templates
imikejackson Oct 20, 2026
ce5cd68
DOC: Rewrite the DBSCAN V&V record to follow the report template
imikejackson Oct 20, 2026
dfa84cc
DOC: Correct the DREAM3D-NX 7.4.2 release date
imikejackson Oct 20, 2026
18a1990
DOC: Set V&V report conventions for name, header, and content
imikejackson Oct 20, 2026
c98c6de
DOC: Apply the report conventions to the DBSCAN V&V record
imikejackson Oct 20, 2026
15225bb
DOC: Rewrite the ErodeDilateMask V&V record to follow the report temp…
imikejackson Oct 20, 2026
1b4fa72
DOC: Rewrite the ComputeFeatureSizes V&V record to follow the report …
imikejackson Oct 20, 2026
db3bc97
DOC: Rewrite the BadDataNeighborOrientationCheck V&V record to follow…
imikejackson Oct 20, 2026
748fadb
DOC: Set V&V rules for sign-off, legacy re-runs, and inferred provenance
imikejackson Oct 21, 2026
ffa2775
DOC: Apply the sign-off and provenance rules to the pilot V&V records
imikejackson Oct 21, 2026
cdf53ad
DOC: Link ComputeFeatureSizes-D3 to issue #1857
imikejackson Oct 21, 2026
a4fe16d
DOC: Rename the ComputeFeatureFaceMisorientation V&V files to match t…
imikejackson Oct 21, 2026
c4764fd
DOC: Write V&V reports for users of a release, without Git terms
imikejackson Oct 21, 2026
6c54b03
DOC: Limit deviation entries to the template fields and an optional E…
imikejackson Oct 21, 2026
fcdb7b9
DOC: Define the sign-off for V&V work that has no second-engineer app…
imikejackson Oct 21, 2026
c0a80d1
DOC: Rewrite the BadDataNeighborOrientationCheck V&V record to follow…
imikejackson Oct 22, 2026
d3df8db
DOC: Rewrite the CAxisSegmentFeatures V&V record to follow the report…
imikejackson Oct 22, 2026
0a5ceed
DOC: Rewrite the ComputeAvgCAxes V&V record to follow the report temp…
imikejackson Oct 22, 2026
ed034d9
DOC: Rewrite the ComputeAvgOrientations V&V record to follow the repo…
imikejackson Oct 22, 2026
a91458d
DOC: Rewrite the ComputeCAxisLocations V&V record to follow the repor…
imikejackson Oct 22, 2026
eccdca3
DOC: Rewrite the ComputeFaceIPFColoring V&V record to follow the repo…
imikejackson Oct 22, 2026
5ed08f3
DOC: Rewrite the ComputeFeatureFaceMisorientation V&V record to follo…
imikejackson Oct 22, 2026
d19afd9
DOC: Rewrite the ComputeFeatureNeighborCAxisMisalignments V&V record …
imikejackson Oct 22, 2026
9db59e6
DOC: Rewrite the ComputeFeatureNeighborMisorientations V&V record to …
imikejackson Oct 22, 2026
1576dc4
DOC: Rewrite the ComputeFeatureReferenceCAxisMisorientations V&V reco…
imikejackson Oct 22, 2026
597af38
DOC: Rewrite the ComputeFeatureReferenceMisorientations V&V record to…
imikejackson Oct 22, 2026
b704214
DOC: Rewrite the ComputeIPFColors V&V record to follow the report tem…
imikejackson Oct 22, 2026
2a8837c
DOC: Rewrite the ComputeKernelAvgMisorientations V&V record to follow…
imikejackson Oct 22, 2026
613de6b
DOC: Rewrite the ComputeSchmids V&V record to follow the report template
imikejackson Oct 22, 2026
7a81ba5
DOC: Rewrite the ConvertOrientations V&V record to follow the report …
imikejackson Oct 22, 2026
c2f506b
DOC: Rewrite the GroupMicroTextureRegions V&V record to follow the re…
imikejackson Oct 22, 2026
129c6c5
DOC: Rewrite the NeighborOrientationCorrelation V&V record to follow …
imikejackson Oct 22, 2026
1f4c037
DOC: Rewrite the ReadAngData V&V record to follow the report template
imikejackson Oct 22, 2026
f8f98ac
DOC: Rewrite the ReadCtfData V&V record to follow the report template
imikejackson Oct 22, 2026
0ec689b
DOC: Rewrite the ReadEbsdPatternFile V&V record to follow the report …
imikejackson Oct 22, 2026
6c0f0d1
DOC: Rewrite the ReadH5OinaData V&V record to follow the report template
imikejackson Oct 22, 2026
7b68f02
DOC: Rewrite the RotateEulerRefFrame V&V record to follow the report …
imikejackson Oct 22, 2026
31f199d
DOC: Rewrite the WritePoleFigure V&V record to follow the report temp…
imikejackson Oct 22, 2026
2297d7e
DOC: Rewrite the ComputeFeatureCentroids V&V record to follow the rep…
imikejackson Oct 22, 2026
9503851
DOC: Rewrite the ComputeFeatureNeighbors V&V record to follow the rep…
imikejackson Oct 22, 2026
8bc487b
DOC: Rewrite the ComputeFeaturePhases V&V record to follow the report…
imikejackson Oct 22, 2026
c90bab8
DOC: Rewrite the ComputeFeatureSizes V&V record to follow the report …
imikejackson Oct 22, 2026
537d511
DOC: Rewrite the ComputeGroupingDensity V&V record to follow the repo…
imikejackson Oct 22, 2026
f46c9da
DOC: Rewrite the ComputeNeighborhoods V&V record to follow the report…
imikejackson Oct 22, 2026
c82d47a
DOC: Rewrite the ComputeTriangleGeomCentroids V&V record to follow th…
imikejackson Oct 22, 2026
6b2df65
DOC: Rewrite the CopyFeatureArrayToElementArray V&V record to follow …
imikejackson Oct 22, 2026
4f0ba22
DOC: Rewrite the CreateFeatureArrayFromElementArray V&V record to fol…
imikejackson Oct 22, 2026
0780a7d
DOC: Rewrite the DBSCAN V&V record to follow the report template
imikejackson Oct 22, 2026
37790d9
DOC: Rewrite the ErodeDilateBadData V&V record to follow the report t…
imikejackson Oct 22, 2026
dd4c3c4
DOC: Rewrite the ErodeDilateMask V&V record to follow the report temp…
imikejackson Oct 22, 2026
fc4e928
DOC: Rewrite the FillBadData V&V record to follow the report template
imikejackson Oct 22, 2026
92d6ddc
DOC: Rewrite the IdentifySample V&V record to follow the report template
imikejackson Oct 22, 2026
bcf361f
DOC: Rewrite the MultiThresholdObjects V&V record to follow the repor…
imikejackson Oct 22, 2026
bc22332
DOC: Rewrite the RegularizeZSpacing V&V record to follow the report t…
imikejackson Oct 22, 2026
4206ae7
DOC: Rewrite the RemoveFlaggedFeatures V&V record to follow the repor…
imikejackson Oct 22, 2026
dfa21ae
DOC: Rewrite the ReplaceElementAttributesWithNeighborValues V&V recor…
imikejackson Oct 22, 2026
656d5ea
DOC: Rewrite the RequireMinNumNeighbors V&V record to follow the repo…
imikejackson Oct 22, 2026
bff57c8
DOC: Rewrite the RotateSampleRefFrame V&V record to follow the report…
imikejackson Oct 22, 2026
53effea
DOC: Rewrite the WriteDREAM3D V&V record to follow the report template
imikejackson Oct 22, 2026
58b61b0
DOC: Add the DREAM.3D v6.5.171 comparison to the RequireMinNumNeighbo…
imikejackson Oct 22, 2026
e0c77c4
DOC: Add the DREAM.3D v6.5.171 comparison to the MultiThresholdObject…
imikejackson Oct 22, 2026
24f3007
DOC: Cite the primary 2026-07-31 legacy comparison in the RequireMinN…
imikejackson Oct 22, 2026
df55c76
DOC: State why the ReadEbsdPatternFile V&V record has no legacy compa…
imikejackson Oct 22, 2026
4410250
DOC: Mark the ReadEbsdPatternFile V&V record COMPLETE
imikejackson Oct 22, 2026
a3d2472
DOC: Cite only the primary V&V package in the RequireMinNumNeighbors …
imikejackson Oct 22, 2026
d50e339
DOC: Record who generated the ComputeGroupingDensity v2 archive and when
imikejackson Oct 22, 2026
5b1f70f
DOC: State the legacy comparison evidence in the ComputeGroupingDensi…
imikejackson Oct 22, 2026
86bf2c9
DOC: Add the 2026-10-22 legacy comparison to the ComputeFeatureNeighb…
imikejackson Oct 22, 2026
480ee2f
DOC: Add the 2026-10-22 legacy comparison to the ComputeFeatureNeighb…
imikejackson Oct 22, 2026
60b5e9e
DOC: Add the 2026-10-22 legacy comparison to the ComputeFeatureCentro…
imikejackson Oct 22, 2026
32469e3
DOC: Add the 2026-10-22 legacy comparison to the ComputeNeighborhoods…
imikejackson Oct 22, 2026
02bcb10
DOC: Add the 2026-10-22 legacy comparison to the RegularizeZSpacing V…
imikejackson Oct 22, 2026
c52ef64
DOC: Use the -59571 tuple-count error and its renamed test in the Req…
imikejackson Oct 24, 2026
cc2353f
BUG: Bound Feature Ids and accumulate in double in Compute Average C-…
imikejackson Oct 23, 2026
8a882a5
BUG: Bound Feature Ids and fix statistics in Compute Feature Referenc…
imikejackson Oct 23, 2026
08c0a38
BUG: Validate Face Labels and accumulate in double in Compute Feature…
imikejackson Oct 23, 2026
1b15312
BUG: Fill holes on 2D images in Isolate Largest Feature (Identify Sam…
imikejackson Oct 23, 2026
79962a8
DOC: Add the V&V recertification policy
imikejackson Oct 24, 2026
f0d4661
DOC: Add the cell tuple-count check to the BadDataNeighborOrientation…
imikejackson Oct 24, 2026
88b0395
DOC: Add the cell tuple-count check to the ComputeFeatureReferenceCAx…
imikejackson Oct 24, 2026
910bb23
DOC: Add the cell tuple-count check to the ComputeKernelAvgMisorienta…
imikejackson Oct 24, 2026
5f78c1a
DOC: Add the cell tuple-count check to the NeighborOrientationCorrela…
imikejackson Oct 24, 2026
4ca836c
DOC: Add the cell tuple-count check to the ComputeFeatureCentroids V&…
imikejackson Oct 24, 2026
a5d9298
DOC: Add the cell tuple-count check to the ComputeFeatureNeighbors V&…
imikejackson Oct 24, 2026
9a74b9d
DOC: Add the cell tuple-count check to the ComputeFeatureSizes V&V re…
imikejackson Oct 24, 2026
0f833ef
DOC: Add the cell tuple-count check to the ErodeDilateMask V&V record
imikejackson Oct 24, 2026
bb92649
DOC: Add the cell tuple-count check to the IdentifySample V&V record
imikejackson Oct 24, 2026
1b032d6
DOC: Add the cell tuple-count check to the ReplaceElementAttributesWi…
imikejackson Oct 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/dream3d_nx_release_dates.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

| Release Version | Release Date |
|-----------------|--------------|
| 7.4.2 | 2026-08-31 |
| 7.4.2 | 2026-08-28 |
| 7.4.1 | 2026-03-23 |
| 7.4.0 | 2025-10-27 |
| 7.2.2 | 2025-09-28 |
Expand Down
6 changes: 3 additions & 3 deletions docs/vv_templates/commit_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ VV: <Filter Human Name> fully V&V'ed

Summary:
- Found and fixed <N> bug(s) (<one-line per bug, or "Confirmed no bugs">);
- documented <M> deviation(s) from DREAM3D 6.5.171 (<D1 …, D2 …>);
- documented <M> deviation(s) from DREAM.3D v6.5.171 (<D1 …, D2 …>);
- retired <P> tests (<reason: circular oracle / UNIMPLEMENTED stub / etc., or "none">);
- unit tests replaced with <Q> inlined *<Class X (Name) + Class Y (Name)>* test fixtures;
- added 3 V&V source-tree deliverables (report, deviations, provenance);
Expand Down Expand Up @@ -40,7 +40,7 @@ VV: Compute Feature Neighbor Misorientations fully V&V'ed

Summary:
- Found and fixed 1 bug (divisor clobbered inside inner j-loop of algorithm.cpp);
- documented 2 deviations from DREAM3D 6.5.171 (D1 divisor bug, D2 EbsdLib 2.4.1 precision);
- documented 2 deviations from DREAM.3D v6.5.171 (D1 divisor bug, D2 EbsdLib 2.4.1 precision);
- retired 2 tests (circular-oracle exemplar consumer + UNIMPLEMENTED stub);
- unit tests replaced with 4 inlined *Class 1 (Analytical) + Class 4 (Invariant)* test fixtures;
- added 3 V&V source-tree deliverables (report, deviations, provenance);
Expand All @@ -52,7 +52,7 @@ Summary:
| Situation | Bullet phrasing |
|----------------------------------------------------|-----------------------------------------------------------------------|
| Clean Port, no bugs found | `Confirmed no bugs (clean Port);` |
| No deviations from legacy | `Confirmed no deviations from DREAM3D 6.5.171;` |
| No deviations from legacy | `Confirmed no deviations from DREAM.3D v6.5.171;` |
| Fresh V&V, no prior tests to retire | `No prior tests retired (fresh V&V cycle);` |
| Existing tests kept, only new ones added | `Augmented existing tests with <Q> inlined …;` |
| Doc was already correct | *omit the last bullet entirely (it's the only optional one)* |
Expand Down
97 changes: 97 additions & 0 deletions docs/vv_templates/defect_hunt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# Defect Hunt — Finding Bugs, Not Only Documenting Behavior

The other V&V phases show that a filter agrees with an oracle on the fixtures that the engineer chose. They do not show that the engineer chose fixtures that can find bugs. The engineer designs the oracle after reading the code, so the fixtures tend to exercise the cases that the code already handles. The defect hunt is an adversarial pass with one goal: find an input that makes the filter produce a wrong result.

**Motivating example — issue #1758.** In `AlignGeometries`, the Centroid branch computes `{t[0]-m[0], t[0]-m[0], t[0]-m[0]}`, so the X offset is applied on all three axes. The Origin branch next to it uses the correct indices. The tests run only the Origin mode. A fixture with the same offset on every axis also passes. Each of parts 1–4 below finds this defect independently.

## When

Do the defect hunt after `vv-discover` has listed the code paths and before the oracle fixtures are final. Its findings change the fixture design. Do the hunt again when a rebase or a fix changes the algorithm.

The defect hunt does not replace the second-engineer review of the oracle. It is the author's own attempt to make the filter fail.

## Part 1 — Bug-pattern review

Read every line of the algorithm, its helpers, and the filter's `preflightImpl()`/`executeImpl()`. For each pattern, look for a match. Then do a separate pass in which you compare sibling code side by side.

| Pattern | What to look for |
|---|---|
| **Copy-paste drift** | Per-axis or per-component expressions in which the index does not advance (`[0],[0],[0]`, `x, x, z`). Sibling branches (mode A vs. mode B, X vs. Y, in-core vs. OOC) that compute the same quantity in different ways. Put sibling branches side by side and compare them token by token. |
| **Index and stride** | X/Y/Z order. Tuple index vs. component index. Strides (`dims[0]*dims[1]`). An internal iteration order that differs from the physical order the user sees (for example, a slice loop that runs from the top down, then is indexed by a user "slice k"). |
| **Bounds and off-by-one** | `>` vs. `>=`. A loop that starts at 1 and skips element 0 or the anchor. The last slice, row, or feature. Empty and single-element inputs. |
| **Numerics** | Truncation where the code must round. Signed/unsigned wrap. Narrowing casts. Division by zero. A NaN cast to an integer (undefined behavior). Accumulation in `float` where the code needs `double`. |
| **Uninitialized or stale state** | Output tuple 0. Buffers that the code reuses between features or slices and does not reset. Accumulators declared outside the loop. |
| **Wrong object** | The wrong array, variable, or path among similar names. A parameter that the code reads but does not use. A result written to the wrong output. |
| **Discarded results** | A `Result<>` or warning that the code ignores. An error code that two different failures use. |
| **Mode gating** | A parameter that has no effect in a mode where it must have an effect. A mode branch that no test executes. |
| **Component shape not declared** | The algorithm reads an input DataArray with a fixed number of components (`a[2*i+1]`, `a[3*i+k]`, `getComponent(i, 2)`), but the `ArraySelectionParameter` or `MultiArraySelectionParameter` that selects it declares no `AllowedComponentShapes`, or declares a different one. The fix belongs in the parameter (`AllowedComponentShapes{{N}}`), because parameter validation then rejects other shapes (−208) before preflight runs. When N depends on another parameter or has variable dimensions, preflight must check `getComponentShape()` instead. Example: WriteStlFile's phases parameter declared `{{1}}` while the algorithm read 2 components. |
| **Parent Attribute Matrix not checked** | An element-level input DataArray (one value per cell, vertex, edge or face) is not checked to be a child of the geometry's element Attribute Matrix. A selection parameter accepts a DataPath into **any** Attribute Matrix, so a DataArray with the wrong number of tuples is a reachable input, not corrupt data. The fix is a preflight check with `IsChildOfAttributeMatrix` against `getCellData()` (Image or Rectilinear Grid Geometry) or the Vertex, Edge, Face or Polyhedra Attribute Matrix of a node geometry. `AttributeMatrix` only accepts children whose tuple count matches its own. Use the accessors that return a pointer; the `*Ref()` accessors and `getCellDataPath()` throw when the Attribute Matrix is missing. |
| **Feature-level bound** | A Feature Attribute Matrix has largest Feature Id + 1 tuples, because id 0 is reserved. The largest Feature Id depends on the array values, so preflight cannot check it: execute must check it, or size internal buffers from the Feature Attribute Matrix tuple count. Look for buffers sized by the largest Feature Id but read by the Feature Attribute Matrix tuple count, and the reverse. Also look for sparse or negative ids used directly as indices. |

**Where each check belongs.** Structure (component shape, DataType) goes in the parameter: parameter validation runs before the filter's preflight, so a repeated check in preflight or execute is dead code, and an existing one is removed. Relationships between inputs (tuple count against a sibling DataArray, parent Attribute Matrix) go in preflight. Only value-dependent bounds go in execute.

### SIMPLNX vocabulary for findings

State every finding in SIMPLNX terms, so that the reader can see how the input is reachable.

- **Attribute Matrix kinds:** *element* Attribute Matrices (*Vertex Data*, *Edge Data*, *Face Data*, *Cell Data*), whose tuple count equals the number of those elements; *Feature* Attribute Matrices (for example *Cell Feature Data*), with largest Feature Id + 1 tuples; *Ensemble* Attribute Matrices (for example *Cell Ensemble Data*).
- **Data objects:** DataArray, StringArray, NeighborList, DataPath. Say "number of tuples", "tuple shape", "number of components", "component shape" and DataType.
- **Geometries:** Image, Rectilinear Grid, Vertex, Edge, Triangle, Quad, Tetrahedral and Hexahedral Geometry. Say "number of cells" or "number of faces".
- **Parameters:** name a parameter by its display name in bold, for example **Create Bounding Box Geometries**, and say whether the failure is at parameter validation, preflight or execute.

Write "The Feature Ids DataArray is not checked to be a child of the Image Geometry's Cell Data Attribute Matrix, so its number of tuples can differ from the number of cells". Do not write "Feature Ids may not have one value per cell".

For each suspected defect, record `file:line`, the input that triggers it, and the expected and actual results. A suspicion is not a finding. Confirm it with a failing test or a hand calculation, or discard it. Every confirmed defect becomes a `<FilterName>-D<N>` deviation entry and a regression test. A defect is a deviation even when 6.5.171 has the same defect.

## Part 2 — Mode coverage

Make a list of every value of every `ChoicesParameter`, every `BoolParameter` state that changes the output, and every dispatched algorithm variant. For each item, cite a test that **asserts output values** in that mode. A mode that only "runs without error" is not covered. Put each uncovered mode in the Code path coverage table as a gap with its reason. Do not omit it.

## Part 3 — Symmetry-breaking fixtures

A fixture can detect a swap of two axes, components, or features only if the swap changes the expected output. Design each oracle fixture so that:

- each axis has a different value: offsets, dimensions (`X ≠ Y ≠ Z`), spacing, and a non-zero origin;
- each component of a multi-component value is different (for example, a translation of (1, 2, 3), not (1, 1, 1));
- there are at least two features or phases, and their values are different;
- masks, feature shapes, and positions are not symmetric about the center of the geometry; and
- the fixture contains values that make truncation and rounding give different results, and values that have a sign that the filter must keep.

If a fixture cannot break a symmetry (for example, the filter supports only cubic inputs), write the reason in the Oracle section.

## Part 4 — Mutation check

This part tests the tests. For each row in the Code path coverage table, make at least one small mutant of the source in that path:

- swap an index (`[1]` → `[0]`);
- reverse a comparison (`<` → `<=`, `>` → `>=`);
- change a bound by one;
- remove a guard or branch; or
- change a constant.

Apply one mutant at a time. Rebuild, run the filter's tests, then restore the source. A mutant is **killed** when at least one test fails. A **surviving** mutant shows a path that the tests do not check. Add an assertion that kills it, or record why the mutant is equivalent (it cannot change the output).

Record the result as `K of N mutants killed` and list each survivor with its disposition. The `vv-tests` skill packages a helper that applies, builds, tests, and restores each mutant.

## Part 5 — Metamorphic relations (recommended)

A metamorphic relation connects the outputs of two runs. It does not need a hand-calculated expected value. Examples:

- **Translation:** move the input by (a, b, c) → the output positions move by (a, b, c), and the per-feature values stay the same.
- **Axis permutation:** exchange X and Y in the input → the output exchanges X and Y.
- **Relabel:** permute the feature IDs → the per-feature outputs are permuted in the same way.
- **Scale:** multiply the spacing by s → lengths multiply by s, areas by s², and volumes by s³.

Relations of this type find axis and index defects, and do not need a new oracle. Record them as Class 4 companions (see [`oracle_classes.md`](./oracle_classes.md)).

## Report

Fill the `## Defect hunt` section of the report:

- the patterns reviewed and the reviewer;
- a findings table with columns ID, Pattern, `file:line`, Trigger, Disposition (`fixed — <FilterName>-D<N>`, `not a defect — <reason>`, or `deferred — <issue link>`);
- mode coverage as `M of M modes value-asserted`, with the gaps;
- the mutation result as `K of N mutants killed`, with each survivor and its disposition; and
- the metamorphic relations used, or `None`.

"No defects found" is a valid result only when the section shows the patterns that were reviewed and the mutation result.
40 changes: 35 additions & 5 deletions docs/vv_templates/deviation_template.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# Deviations from DREAM3D 6.5.171: <FilterName>
# Deviations from DREAM.3D v6.5.171: <FilterName>

This file lists every documented behavioral difference between this SIMPLNX filter and its DREAM3D 6.5.171 equivalent.
This file has two parts. Part 1 lists every documented behavioral difference between this SIMPLNX filter and its DREAM.3D v6.5.171 equivalent. Part 2 lists SIMPLNX defects and SIMPLNX behavior changes that are not differences from DREAM.3D v6.5.171: defects fixed in SIMPLNX, SIMPLNX defects that are not fixed, and changes to SIMPLNX output between DREAM3D-NX releases. Omit a part that has no entries.

Entries are referenced by stable ID (`<FilterName>-D<N>`) from the V&V report and from public migration guidance. The ID is stable across renames; the Filter UUID field is the permanent cross-reference anchor.
Entries are referenced by stable ID (`<FilterName>-D<N>`) from the V&V report and from public migration guidance. Both parts use one ID sequence. The ID is stable across renames; the Filter UUID field is the permanent cross-reference anchor.

A user reads this file. Each entry has only the fields shown below: the table, Symptom, Root cause, Affected users, Recommendation, and an optional Evidence paragraph. Do not add other fields. Outside the Evidence paragraph, name DREAM3D-NX release versions, not branches, commits, or PRs.

---

## <FilterName>-D1
## Part 1 — Differences from DREAM.3D v6.5.171

### <FilterName>-D1

| Field | Value |
|---|---|
Expand All @@ -26,7 +30,7 @@ Entries are referenced by stable ID (`<FilterName>-D<N>`) from the V&V report an

---

## <FilterName>-D2
### <FilterName>-D2

| Field | Value |
|---|---|
Expand All @@ -44,6 +48,32 @@ Entries are referenced by stable ID (`<FilterName>-D<N>`) from the V&V report an

---

## Part 2 — SIMPLNX defects and behavior changes

### <FilterName>-D3

| Field | Value |
|---|---|
| **Deviation ID** | `<FilterName>-D3` |
| **Filter UUID** | `<uuid>` |
| **Status** | active *or* superseded by `<FilterName>-D<M>` *or* retired YYYY-MM-DD |
| **Affected released versions** | *DREAM3D-NX v<first> through v<last>. State whether DREAM.3D v6.5.171 was affected.* |
| **Fixed in** | *DREAM3D-NX v<release>* *or* *The DREAM3D-NX release after v<latest affected release>* *or* *Not fixed* |

**Symptom:** *<one-sentence user-visible symptom>*

**Root cause:** *bug | behavior change*
*One paragraph explaining the technical mechanism. Cite source files and line ranges where helpful.*

**Affected users:** *<who actually sees this>*

**Recommendation:** *trust SIMPLNX | <workaround for a defect that is not fixed>*
*One sentence justifying the recommendation.*

**Evidence:** *Optional. One short paragraph for engineers: the tests, release sources, legacy source, or comparison artifacts (`vv_work:<FilterName>/<file>`) that confirm this entry. Only this paragraph can cite PR numbers, commits, or release branches.*

---

## Examples (delete this section before sign-off)

### Precision example
Expand Down
Loading
Loading