d2ce990165
- RepairMissionConfig.requiredReplacementPartId (string) is replaced by requiredReplacementPartIds (readonly string[]) so a mission can accept several alternative correct parts (e.g. pylon will accept either cable). - RepairMissionPartConfig gains optional caseAnchor (where the standalone spawns inside packderelance), caseLockGroup (mutually exclusive parts), and targetNodeName (snap onto a node of the broken model rather than a placeholder slot in the case). - RepairScannedBrokenPart gains targetNodeName so scan results can carry this hint through to the repairing step. - RepairRepairingStep validation logic (placed/wrong/feedback) now matches any id in requiredReplacementPartIds. Existing data is migrated mechanically (single-element arrays); part-level new fields are wired in subsequent commits.