# Гео-аудит модели под FDM — что проверяемо инструментами осмотра

Лёгкая самопроверка построенной модели **существующими** инструментами осмотра MCP. Запускать на
шаге 4 рабочего цикла (см. SKILL.md), перед чек-листом и экспортом.

## Что проверяемо

| Проверка | Как | Статус |
|---|---|---|
| Нависания (приближённо) | `list_faces(normal="0,0,-1", normalTolerance=90−θ_max, minZ=<Zmin+0.1>)` — весь улов кандидаты; подробности `list_faces(index=N)` | ✅ плоские; ⚠️ криволинейные грубо |
| Ориентация (геом. прокси) | `describe_model(sections="box")`: как ось слоёв соотносится с габаритом | ⚠️ длинная ось ≠ путь нагрузки |
| Горизонтальные круглые отверстия | `list_faces(index=N)`: цилиндр с горизонтальной осью → «нужен teardrop» | ✅ |
| Пролёт моста | `measure(kind1="face", index1=…, kind2="face", index2=…)` между внутренними гранями опор | ✅ |
| Устойчивость высокой печати | `describe_model(sections="mass")` — центр масс; `list_edges(minZ=<Zmin−0.1>, maxZ=<Zmin+0.1>)` — очертание опорного пятна по концам рёбер (площадь пятна из `list_faces` для этого не годится) | ✅ проекция ЦМ; ⚠️ порог по высоте — эвристика |
| Номиналы / зазоры / габариты | `measure` между гранями; `describe_model(sections="box")` | ✅ |
| Тело / манифолд перед выдачей | `describe_model(sections="bodies")` (одно тело?), итог проверки построения в ответе операции | ✅ |

**Почему допуск отбора нависаний равен `90−θ_max`.** `θ_max` меряют от вертикали, а отбор идёт по
НОРМАЛИ: у поверхности, наклонённой на `θ` от вертикали, нормаль отстоит от −Z на `90−θ`. Значит
нависание (`θ > θ_max`) — это в точности «нормаль ближе `90−θ_max` к −Z». При дефолтном `θ_max`=45°
допуск численно равен 45, и это совпадение сбивает: для PETG с `θ_max`=40° правильный допуск **50**,
а не 40.

**И почему у отбора нависаний обязано быть `minZ`.** Отбор по нормали ЗНАКОВЫЙ: грань проходит,
если её нормаль отклонилась от заданного направления не более чем на допуск. У грани, лежащей на
столе, внешняя нормаль равна ровно (0, 0, −1) — отклонение нулевое, значит она проходит при ЛЮБОМ
допуске и по описанному критерию («тем хуже, чем ближе к чистому −Z») выглядит худшим нависанием
детали. Замер: тот же отбор без `minZ` (допуск 45°) на кронштейне вернул девять граней, наибольшая —
515.44 мм² с центром ровно на `Zmin` (−50.50) — и это опорное пятно, а не нависание.
Нижняя граница окна (`minZ = Zmin + 0.1`, `Zmin` из `describe_model(sections="box")`) убирает
первый слой из улова.

**Пролёт и пятно — числа, а не впечатления.** Замеры на кронштейне камеры: пролёт между стойками
**49.0 мм** (потолок PLA по §2 `fdm-rules.md` — 15–25 мм, то есть редизайн); опорное пятно
«стоя» — `list_edges(minZ=−51, maxZ=−50)` дал четыре ребра, `X −50.50…50.50`, `Y 0.00…8.00`, то
есть **101 × 8 мм**, а ЦМ из `sections="mass"` — `(0.00, 4.93, 56.61)`: проекция внутри пятна, но
высота ЦМ над столом **107.1 мм** против полуширины **4 мм** — 27× при пороге 3×. Ни то, ни другое
не выводится из эскиза арифметикой — оба стоят одного вызова.

## Граница честности

- **Угол нависания** мерить в **той же конвенции, что fdm-rules.md** (от вертикали; нижняя грань с
  поверхностью > `θ_max` от вертикали = нависание) — не путать с углом нормали от горизонтали.
- **Путь нагрузки агент НЕ выводит из габарита** — берёт из задачи, из опроса, а работая автономно
  — из постановки, и тогда записывает допущением (правило 1). Длинная ось ≠ несущая.
- **«Нагрузка в XY» — требование с порогом, а не догма.** Обязательность ориентации решает запас
  `σ_меж/σ` (SKILL.md, §«Ориентация: когда три требования не сходятся»); при запасе ≥10× выбор
  делают нависания и устойчивость, а не слои.
- **Истинная мин. толщина стенки и полный детект криволинейных нависаний — не решаются** (нет
  thickness/overhang-солвера).
- **Аудит эвристический и НЕ доказывает печатнопригодность** (не ловит анизотропию/путь нагрузки).
  Вывод — список флагов для решения, не «приговор». Слайсер навык не зовёт намеренно.

## Как применять в цикле

1. После построения, убедившись что оно чистое, — пройти таблицу выше сверху вниз.
2. Каждый флаг — сверить с соответствующим правилом `fdm-rules.md` и решить: исправить геометрию
   или принять осознанно.
3. Путь нагрузки и косметические грани взять из ответа пользователя или из постановки (правило 1),
   не из габарита; ориентацию закрыть прикидкой `σ_меж/σ`.
4. Затем — чек-лист печатнопригодности (SKILL.md) → выдача; обменный файл (`export_model`) —
   только если о нём просили.
