normalizer: configurable float epsilon + JSON-path volatile mask scoping

Follow-ups to #4 normalizer PoC v2:
- Profile.float_decimals (default 6) flows into Rules.RoundFloatsInNode.
- mask_volatile_settings switches from name-only HashSet to a JSONPath-lite
  allowlist ($.a.b.c) so same-named fields in unrelated subtrees stay intact.
- default.yaml migrated; 6 new tests including a regression trap for the
  unrelated-subtree case. 16/16 normalizer tests, 77/77 solution tests.

Refs #2
This commit is contained in:
minsung
2026-04-07 20:42:27 +09:00
parent 0f0324efb5
commit eeee3c2a03
6 changed files with 238 additions and 26 deletions

View File

@@ -1,4 +1,5 @@
name: default
float_decimals: 6
rules:
- strip_timestamps
- mask_guids
@@ -6,3 +7,20 @@ rules:
- round_floats
- mask_volatile_settings
- sort_json_keys
mask_volatile_settings:
- "$.CanOverrideWireColorWithFace"
- "$.IsSidePanelVisible"
- "$.OverrideFaceColor"
- "$.Solar_IsLocalTime"
- "$.VisibleGrid"
- "$.GridSnap"
- "$.MidpointOsnap"
- "$.GridSpacing"
- "$.GridColor.ALPHA"
- "$.GridColor.BLUE"
- "$.GridColor.GREEN"
- "$.GridColor.RED"
- "$.MajorGridColor.ALPHA"
- "$.MajorGridColor.BLUE"
- "$.MajorGridColor.GREEN"
- "$.MajorGridColor.RED"