5.1.49.3708
5/2/2026
Selecting AltClosedGripperNose backgauge mode threw a NullReferenceException on Twinmatic-family configs (JornsTwinmaticClosedLoop, V2, V3, JornsHyperDriveFlexTwinmatic) when generating sequences/operations. JornsHyperDriveFlex was unaffected because its AltGripper axis is disabled, so the broken code path never ran.
Root cause: FoldingSolution.cs:341-342 dereferences parameters.AltGripperNoseGaugingOffset.CurrentValue and parameters.BackgaugeMinimumPositionWithAltGripperExtended.CurrentValue. Param 872 (AltGripperNoseGaugingOffset) was missing from every Twinmatic config, so the property returned null ? NPE.
Changes
Configs — added param 872 (Alt Gripper Nose Gauging Offset, default 0.25, modeled after param 871) to the 4 Twinmatic-named ConfigurationStore.json files. Resources — added AltGripperNoseGaugingOffset and AltGripperNoseGaugingOffsetDescription strings to ParameterResource.resx so the new param shows a friendly UI label. Code (defensive) — extended the null-guard pattern at FoldingSolution.cs:336 so the constraint is skipped (rather than crashing) if BackgaugeMinimumPositionWithAltGripperExtended or AltGripperNoseGaugingOffset is null in any future config.
Changes made for Pathfinder V5 PC's.
JornsHyperDriveFlex now ships both the Twinmatic and Eco/TwinPro shape libraries inside a single configuration, and the user picks which one applies the first time the config is loaded. The choice persists in the install override; deleting that override is the way to switch variants on a given machine.
The data layer change was adding a VariantShapesCollection (variant ? thickness ? shapes) alongside the legacy ShapesCollection on MachineShapeLibrary, plus a new ShapeVariant field on ConfigurationStore that is set from a new ShapeVariantOverride entry during the override flatten. Routing is handled by the existing library["10mm"].SomeShape indexer, which now reads ActiveVariant — so none of the ~30 call sites needed changes. Critical detail in the flatten path: the variant is applied to the library before the per-thickness shape merge runs, so any shape override lands on the right variant.
The UI change reuses the existing RadioSelectionDialog. A new EnsureShapeVariantSelected method in ApplicationManager runs right after ValidateSelectedConfiguration during config load. It only fires when the library has variants and the override is unset, so legacy single-variant configs are unaffected and post-install loads skip the dialog. Four new strings were added to the Main FormResource.resx and its designer for the dialog.
The JSON migration spliced the existing JornsHyperDriveFlex shape tree (which was actually the EcoTwinPro shapes) under an EcoTwinPro variant key, and pulled the Twinmatic shapes from JornsTwinmaticClosedLoop in under a Twinmatic key. Everything outside the Shapes block in that file is byte-identical to the original, BOM preserved. No other configs were touched, and back-compat tests verify the legacy schema still round-trips.
Six new NUnit tests cover variant JSON round-trip, indexer routing, the fallback when ActiveVariant is unset, legacy back-compat, and the override flatten in both directions.
Changes made for Pathfinder V5 PC's.
Embedded a ParameterStoreVariants dict in JornsHyperDriveFlex.ConfigurationStore.json holding 4 PID tuning sets — 4Frame, 5Frame, 8Frame, Generic — with 36 entries each (Proportional + Integral + Feed Forward, no Derivative). Only 4Frame actually differs from base (10 entries); 5/8/Generic match base today and are placeholders for future divergence. Deleted the three standalone frame config files; the 130 non-PID "overrides" on 4Frame were verified to be no-op duplicates of base, so nothing real was lost.
Wired it through with the same pattern as the shape variant: ParameterStoreVariants + ParameterVariant field on ConfigurationStore, a ParameterVariantOverride POCO that lives in the install override, and a flatten step that upserts the active variant's entries on top of the base ParameterStoreList — placed between the base list and the existing per-parameter override merge, so user-tuned per-parameter overrides still win. Added PushParameterVariantIntoInstallOverrides and a new EnsureParameterVariantSelected in ApplicationManager.cs that runs right after the shape-variant prompt. Six new FormResource strings for the dialog and four labels. Four new tests cover variant flatten, generic passthrough, no-variant passthrough, and the per-parameter-override-beats-variant ordering.
End-of-load flow on first pick of JornsHyperDriveFlex: shape variant dialog, then frame tuning dialog, then continue. Both skip on subsequent loads. Reselection is still "delete install override and re-pick."
Changes made for Pathfinder V5 PC's.
Made the variant prompts re-fire on every config selection instead of only on first load, with the current choice pre-selected so confirming is one click. Added a preselectedItem parameter to RadioSelectionDialog and a forceReprompt flag on both Ensure methods in ApplicationManager.cs — false keeps the existing load-path safety net, true always prompts and treats Cancel as "keep current selection." A new PromptVariantsAfterConfigSelection() helper refreshes the cached store and runs both Ensure methods with the force flag, wired into both SetCurrentConfig UI sites (initial pick and change-config-with-restart). Same value picked = no disk write, no refresh.
Changes made for Pathfinder V5 PC's.
Added 3 new error codes (E475, E476, E477) to the Pathfinder PC application with English text in ErrorResource.resx and dictionary mappings in ErrorMessageRequestCO.cs. ErrorResource.Designer.cs will auto-regenerate on build, and translations for the other 16 languages can be picked up via localazy upload.
Changes made for Pathfinder V5 PC's.
Rev B, E, F: V4.04.27 Rev G; V5.00.26
Changes made for Pathfinder V5 PC's.
MachineShapeLibrary.cs:117-128 — added AddVariant(variant, shapes) ConfigurationSettingsTests.cs:600-606 — BuildVariantLibrary() now uses the new API; the JSON-seed comment and anonymous-type round-trip are gone