# mcp__navi_3d__lint_scad

## Что делает

Проверяет OpenSCAD-скрипт на типичные ошибки, которые часто допускают LLM при генерации кода: незакрытые скобки, отсутствующие точки с запятой, неправильные аргументы примитивов, устаревший синтаксис и т.д.

## Предпосылки

1. **Файл `.scad` уже должен существовать.** Напишите его заранее через `filesystem write`.

## Формат вызова

```python
mcp__navi_3d__lint_scad(
    session_id="...",
    source_path="bracket.scad"
)
```

## Параметры

| Параметр | Обязательно | Описание |
|---|---|---|
| `session_id` | Да | UUID текущей сессии Navi. Файлы разрешаются внутри `session_files/<session_id>/`. |
| `source_path` | Да | Путь к существующему `.scad`-файлу (внутри сессии или абсолютный) |

## Workflow

### 1. Написать OpenSCAD-скрипт

```
filesystem write session_files/sess-abc/bracket.scad '
difference() {
    cube([40, 20, 5], center=true);
    translate([15, 0, 0]) cylinder(h=6, d=4, center=true);
}
'
```

### 2. Запустить линтинг

```
mcp__navi_3d__lint_scad(
    session_id="sess-abc",
    source_path="bracket.scad"
)
```

### 3. Исправить ошибки

Если линт нашёл проблемы — исправьте `.scad` через `filesystem edit` и запустите линт повторно.

### 4. Компилировать

После чистого линта:

```
mcp__navi_3d__compile_scad(
    session_id="sess-abc",
    source_path="bracket.scad",
    output_path="bracket.stl"
)
```

## Что возвращает

При успехе (ошибок нет):
```
Lint passed: no issues found.
```

При ошибках:
```
Lint errors (3):
  line 7: missing semicolon after cylinder()
  line 12: unexpected token '}'
  line 15: unknown parameter 'radiu' in cylinder (did you mean 'r' or 'd'?)
```

## Важные правила

1. **Всегда линт перед компиляцией** — это быстрее, чем ловить `openscad_compile_error`.
2. **Всегда передавайте `session_id`** — без него инструмент не знает, в какой директории искать файлы.
3. **Линт не проверяет логику** — только синтаксис и типичные LLM-ошибки. Физическую корректность проверяйте через превью.
