feat: assembly_add_mate — упрочнение по ревью Codex реализации
#1: Valid==false → ошибка (откат), а не «успех с valid=false»; косвенно отсекает грани одного компонента (вырожденный мат). #6/#7: distance value строго > 0 (нулевой зазор = coincidence) + unit-кейс value=0 бросает. #8: негативный интеграционный тест — точка в пустоте → грань не найдена → ошибка. #2/#3/#4 оставлены по обоснованию (best-effort откол, Add??throw, первый IFace — консистентно с HoleService). #9 точечный release RCW отклонён (конвенция v2-2). Тесты: 98 unit + 58 integration = 156 зелёных. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -123,8 +123,12 @@ public sealed class AssemblyService
|
||||
"Update сопряжения вернул FALSE — связь не наложена (несовместимые грани/значение?).");
|
||||
if (!top.RebuildModel(true))
|
||||
throw new InvalidOperationException("RebuildModel вернул FALSE — сборка не перестроена после сопряжения.");
|
||||
if (!mate.Valid)
|
||||
throw new InvalidOperationException(
|
||||
"Сопряжение построено, но вырождено (Valid=false) — вероятно, грани несовместимы " +
|
||||
"или принадлежат одному компоненту. Проверьте выбор граней.");
|
||||
|
||||
return new AddedMate { Type = type, Valid = mate.Valid };
|
||||
return new AddedMate { Type = type, Valid = true };
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
@@ -38,13 +38,15 @@ public static class AssemblyValidation
|
||||
|
||||
/// <summary>
|
||||
/// Проверить числовое значение сопряжения. Если значение требуется (<paramref name="requiresValue"/>,
|
||||
/// напр. расстояние) — оно должно быть конечным и неотрицательным.
|
||||
/// напр. расстояние) — оно должно быть конечным и строго положительным (зазор 0 вырождается в
|
||||
/// совпадение — для него есть отдельный тип).
|
||||
/// </summary>
|
||||
public static void RequireMateValue(bool requiresValue, double value)
|
||||
{
|
||||
if (!requiresValue) return; // для типов без параметра значение игнорируется
|
||||
if (!double.IsFinite(value) || value < 0)
|
||||
if (!double.IsFinite(value) || value <= 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(value),
|
||||
"Значение сопряжения (расстояние) должно быть конечным и неотрицательным.");
|
||||
"Значение сопряжения (расстояние) должно быть конечным и > 0 " +
|
||||
"(для нулевого зазора используйте тип coincidence).");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user