docs: синхронизировать документацию с упаковкой в плагин Claude Code
ci / build (push) Successful in 44s

This commit is contained in:
2026-07-31 08:48:41 +03:00
parent 7afd046a09
commit f904daaad2
5 changed files with 146 additions and 22 deletions
+32 -4
View File
@@ -26,11 +26,11 @@ Updating the base when a new КОМПАС version ships (in `kompas-sdk-docs`, o
## Current state
**Status:** v1 + v2 + STEP/assembly + direct B-rep edit + structural inspection + 2D drawings — implemented and working (full sketch→feature→inspect→STEP round-trip + `move_face` + `describe_model` validated end-to-end).
Stack: **.NET 8 (`net8.0-windows`, x64), C#**, MCP via the official `ModelContextProtocol` SDK over **stdio**. **83 MCP tools, 331 tests green (201 unit + 130 integration).**
**Status:** v1 + v2 + STEP/assembly + direct B-rep edit + structural inspection + 2D drawings + Claude Code plugin packaging — implemented and working (full sketch→feature→inspect→STEP round-trip + `move_face` + `describe_model` validated end-to-end; server also ships as the `kompas` plugin, see below).
Stack: **.NET 8 (`net8.0-windows`, x64), C#**, MCP via the official `ModelContextProtocol` SDK over **stdio**. **84 MCP tools, 357 .NET tests green (226 unit + 131 integration) + 41 Pester tests** for the plugin's PowerShell scripts (not counted in the .NET total).
Where to look (single source of truth — do **not** duplicate these lists here):
- **Full tool catalog** (by group, all 83) → [`README.md`](README.md) §«Инструменты».
- **Full tool catalog** (by group, all 84) → [`README.md`](README.md) §«Инструменты».
- **Roadmap / what's already done** → [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) §10.
- **Backlog / what's left** → [`docs/TODO.md`](docs/TODO.md) (canonical; top of «2D-ЧЕРТЁЖ» = next priority. Associative diametral/radial→circle binding (`associate` flag), sheet format (`drawing_set_sheet_format`), leaders (`drawing_add_leader`) done — next: bases, tolerances, arc/angular/rough binding; plus extra mate types, package E continuation).
- **Design decisions / caveats** → [`docs/OPEN_QUESTIONS.md`](docs/OPEN_QUESTIONS.md). Known caveat («Ревью v2»): boss/cut direction on a selected face depends on face-normal orientation — `forward` may need flipping; the agent picks via snapshot or `describe_face` normal.
@@ -51,7 +51,35 @@ Correct order:
2. `git checkout <ref>`
3. `pwsh -NoProfile -File tools/sync-agent-assets.ps1` (re-link, if `plugin/skills` exists on the new ref)
`-Remove` is safe because it deletes the reparse point itself via `[System.IO.Directory]::Delete` (no `-Recurse`) — never walks into the target, so `plugin/skills` content is untouched, and a real (non-junction) directory is left alone (`Skipped`); it detects a junction by the `ReparsePoint` attribute, not by resolving the target, which is exactly why it still works once the target is gone. No `post-checkout` hook on purpose — it fires after checkout already broke, too late to help; step 3 covers the re-link anyway. Tests: `Describe 'Remove-AgentSkillLink'` (5 cases) in `tools/tests/AgentAssets.Tests.ps1`, run via `pwsh -NoProfile -File tools/tests/run-ps-tests.ps1` (34 green).
`-Remove` is safe because it deletes the reparse point itself via `[System.IO.Directory]::Delete` (no `-Recurse`) — never walks into the target, so `plugin/skills` content is untouched, and a real (non-junction) directory is left alone (`Skipped`); it detects a junction by the `ReparsePoint` attribute, not by resolving the target, which is exactly why it still works once the target is gone. No `post-checkout` hook on purpose — it fires after checkout already broke, too late to help; step 3 covers the re-link anyway. Tests: `Describe 'Remove-AgentSkillLink'` (5 cases) in `tools/tests/AgentAssets.Tests.ps1`, run via `pwsh -NoProfile -File tools/tests/run-ps-tests.ps1` — part of 41 Pester tests total across the plugin's PowerShell (`AgentAssets.Tests.ps1` 12, `KompasMcpBootstrap.Tests.ps1` 23, `Launcher.Tests.ps1` 6).
## Claude Code plugin (`plugin/`)
The server and both skills ship as the Claude Code plugin **`kompas`** — `plugin/` is a self-contained tree, distributed independently of the rest of the repo (see «Distribution channel» below).
- `plugin/.claude-plugin/plugin.json` — manifest: `name: "kompas"`, `version` (currently `0.0.0`). Version is Claude Code's cache key — `/plugin update`/auto-update skip a plugin whose version matches what's already installed, so every release must bump it.
- `plugin/server.lock.json` — pins exactly one server version: `{version, sourceSha, url, sha256}`. `0.0.0` with empty fields = no release published yet.
- `plugin/skills/{kompas-3d,kompas-fdm-design}/`**the** source of truth for both skills (see skill-layout section above); `.claude/skills/kompas-mcp-dev/SKILL.md` is a real (non-junctioned) internal skill covering server *development* itself (usecases proving ground, productizing playbooks, subagents) — split out because the published skill edition must not reference things a plugin user doesn't have; marked as a draft pending a repo workflow pass.
- `plugin/commands/doctor.md``/kompas:doctor`: compares expected version (from the lock) against `KOMPAS_MCP_EXE` override / `install.json` marker / `kompas-mcp.exe --version`, checks whether КОМПАС is installed/running, then `kompas_connect``kompas_status`.
- `plugin/.mcp.json` — declares the `kompas` MCP server as `powershell -File ${CLAUDE_PLUGIN_ROOT}/scripts/launch-kompas-mcp.ps1`.
- `plugin/scripts/KompasMcpBootstrap.psm1` — delivery: `Read-KompasMcpLock`/`Test-KompasMcpInstall`/`Install-KompasMcpServer`/`Resolve-KompasMcpExecutable`. Downloads the release asset, verifies SHA256, unpacks under `%LOCALAPPDATA%\kompas-mcp\.tmp` and atomically moves it to `%LOCALAPPDATA%\kompas-mcp\<version>`, writes an `install.json` marker. An install is only trusted when the marker's `version`/`sha256` match the lock.
- `plugin/scripts/launch-kompas-mcp.ps1` — entry point: `KOMPAS_MCP_EXE` env var wins (dev mode), else deliver per the lock; runs the server and forwards its exit code. Invariant: **not a single byte reaches stdout before the server starts** (stdout is the JSON-RPC channel) — all diagnostics go to stderr prefixed `kompas-mcp launcher:`.
- `plugin/README.md` — prerequisites and install; `plugin/adapters/{codex,opencode}/` — snippets (not separate distributions) wiring the same launcher into Codex and opencode.
- CLI flag `--version` (`Kompas.Mcp.Core/Startup/CliArguments.IsVersionRequest`, early-exit in `Program.cs` before the host/КОМПАС start) — prints the 3-part assembly version and exits; `/kompas:doctor` uses it to cross-check the installed binary against the lock.
**Gotchas:**
- **Plugin PowerShell files must be UTF-8 **with BOM**.** The launcher runs under `powershell` (Windows PowerShell 5.1), which reads BOM-less files in the system ANSI codepage — Cyrillic string literals corrupt parsing of the whole script. `pwsh` 7 doesn't reproduce this (BOM auto-detected either way).
- Switching branch/commit across a `plugin/skills` boundary can dangle the skill junctions mid-checkout — same failure mode and fix as described in the skill-layout section above.
### Distribution channel — the `dist` branch, not `main`
Releases (`.gitea/workflows/release.yml`, tag `vX.Y.Z`) `dotnet publish -r win-x64 --self-contained` → zip → idempotent upsert of a Gitea release + asset via the Gitea API → re-verify the downloaded asset's SHA256 → commit updated `server.lock.json`/`plugin.json` to branch **`dist`**, on top of the tagged commit. A private plugin marketplace (`home-repo-cc`) will reference the plugin via a `git-subdir` source pinned to `ref: dist`**not yet added**, and there is **no release yet**. Rationale: a release is built from the tagged commit; if the marketplace pointed at `main`, a user could get a newer `plugin/` tree under a version whose binary was built from a different (older) commit. `.gitea/workflows/ci.yml` runs on push/PR to `main`: build + unit tests (`Category=Unit&Requires!=Windows`, explicit project paths — see gotcha below) + consistency check between `plugin.json` and `server.lock.json`. Runner: `gitea-runner` (docker executor, label `ubuntu-latest`).
Extra CI gotchas:
- **SDK 8 doesn't understand the `.slnx` solution format** (`MSBUILD : error MSB1003`) — CI builds/tests explicit project paths (`dotnet build src/Kompas.Mcp.Host/Kompas.Mcp.Host.csproj`, `dotnet test tests/Kompas.Mcp.Tests/Kompas.Mcp.Tests.csproj`) instead of the solution. Not reproducible locally with SDK 9+.
- **`net8.0-windows` builds and runs unit tests fine on the Linux runner** with `-p:EnableWindowsTargeting=true` — confirmed by a green CI run (`Passed! Failed: 0, Passed: 221`). Vendored ASCON interop DLLs link as ordinary references; `ole32`/`oleaut32` are only needed at COM runtime, not build time. 5 `DispatcherTests` are tagged `[Trait("Requires", "Windows")]` and excluded — `Thread.SetApartmentState(STA)` throws `PlatformNotSupportedException` on Linux.
- **`.gitignore`'s `.mcp.json` rule is anchored to the repo root** (`/.mcp.json`) — without the leading slash the glob also matched the tracked, portable `plugin/.mcp.json`.
- Integration tests never run in CI (require a running КОМПАС with GUI and a license) — this is a hard boundary, not a future task.
**Delegation subagents** (`.claude/agents/`, dispatched via the `Agent` tool to keep heavy work off Opus's context — system prompt lives in the agent definition, so pass only the variable part as the prompt):
- **`kompas-sdk-research`** (model: **Haiku**, read-only — MCP `kompas-sdk` tools only): finds an interface/method/enum/constant signature in the SDK knowledge base and returns a compressed summary. Dispatch it for **any** SDK lookup — it holds the only access to the base, which no longer lives in this repo; a wrong answer is cheap — Opus re-verifies against `libs/kompas-interop/*.dll` by reflection.
+22 -4
View File
@@ -21,6 +21,15 @@ LLM набор инструментов для создания документ
- **Windows x64**, установленный **КОМПАС-3D** (разрабатывалось на v24 Home).
- **.NET SDK 8+** (собирается и на SDK 10; целевой фреймворк `net8.0-windows`).
## Установка как плагин Claude Code
Сервер и оба навыка (`kompas-3d`, `kompas-fdm-design`) упакованы в плагин `kompas` (каталог
[`plugin/`](plugin/)) — это самый простой способ подключить проект к Claude Code без ручной сборки:
установка через `/plugin marketplace add` + `/plugin install`, лаунчер сам скачивает и проверяет
self-contained сборку сервера по `plugin/server.lock.json`. Подробности, режим разработки
(`KOMPAS_MCP_EXE`) и сниппеты для Codex/opencode — в [`plugin/README.md`](plugin/README.md).
Публичного релиза пока нет — используйте режим разработки или сборку ниже.
## Сборка и запуск
```powershell
@@ -41,7 +50,7 @@ src/Kompas.Mcp.Host/bin/x64/Release/net8.0-windows/kompas-mcp.exe
}
```
## Инструменты (83 инструмента)
## Инструменты (84 инструмента)
| Группа | Инструменты |
|---|---|
@@ -53,7 +62,7 @@ src/Kompas.Mcp.Host/bin/x64/Release/net8.0-windows/kompas-mcp.exe
| Inspection | `describe_model`, `list_features`, `list_bodies`, `list_variables`, `describe_face`, `describe_edge`, `measure` |
| Vision | `model_snapshot` (PNG-снимок; fallback — сначала `describe_model`) |
| Query | `get_part_info`, `get_bounding_box`, `list_faces`, `list_edges`, `list_components` |
| Variables | `create_variable`, `set_variable`, `delete_variable` |
| Variables | `create_variable`, `set_variable`, `set_variable_note`, `delete_variable` |
| Conversion | `import_step`, `export_step` |
| Assembly | `assembly_add_component`, `assembly_add_mate` |
| Drawing | `drawing_create_standard_views`, `drawing_fill_title_block`, `drawing_add_linear_dimension`, `drawing_add_diametral_dimension`, `drawing_add_radial_dimension`, `drawing_add_angular_dimension`, `drawing_add_rough`, `drawing_add_text`, `drawing_set_technical_requirements`, `drawing_set_sheet_format`, `drawing_add_leader` |
@@ -75,11 +84,13 @@ src/Kompas.Mcp.Host/bin/x64/Release/net8.0-windows/kompas-mcp.exe
```
src/Kompas.Mcp.Core/ COM-слой: STA-диспетчер, подключение, документы, эскизы/операции, конвертация, снимок, инспекция модели
src/Kompas.Mcp.Host/ MCP-сервер (stdio) + определения инструментов
tests/Kompas.Mcp.Tests/ 331 тест: unit + integration (integration требуют КОМПАС)
tests/Kompas.Mcp.Tests/ 357 тестов: unit + integration (integration требуют КОМПАС)
libs/kompas-interop/ вендорские interop-сборки КОМПАС (из SDK Samples/Common)
docs/ архитектура, план, презентация, спеки и планы (superpowers/)
usecases/ полигон обкатки подходов (в .gitignore); приёмы поднимаются в навык kompas-3d
.claude/skills/ навык kompas-3d (методика)
plugin/ плагин Claude Code `kompas`: манифест, лаунчер, лок версии сервера, навыки (источник истины)
tools/ скрипты раскладки навыков (junction) и их Pester-тесты
.claude/skills/ junction на plugin/skills/{kompas-3d,kompas-fdm-design} + kompas-mcp-dev (внутренний навык)
.claude/agents/ субагенты-делегаты: docs-maintainer (Sonnet), kompas-sdk-research (Haiku)
```
@@ -97,6 +108,13 @@ dotnet test --filter "Category=Unit" # только unit (без COM)
dotnet test --filter "Category=Integration" # только integration
```
357 тестов: 226 unit + 131 integration. CI (Gitea Actions, `.gitea/workflows/ci.yml`) собирает и
гоняет `Category=Unit&Requires!=Windows` на Linux-раннере (221 тест) — 5 тестов диспетчера STA
помечены `Requires=Windows` (`Thread.SetApartmentState` не работает на Linux) и в CI не идут;
integration-тесты в CI не запускаются никогда (нужен запущенный КОМПАС с GUI и лицензией).
Плюс 41 Pester-тест PowerShell-скриптов плагина и раскладки навыков (`tools/tests/run-ps-tests.ps1`)
— в счёт .NET-тестов не входят.
## Архитектура (кратко)
- **STA-поток** (`KompasDispatcher`) владеет всеми COM-вызовами — КОМПАС однопоточный STA.
+52 -4
View File
File diff suppressed because one or more lines are too long
+25
View File
@@ -259,3 +259,28 @@ stateful-сессии? Пока полагаемся на последовате
- Точечные добавки: `IDrawingDocument.GetZoneByPoint/GetSheetNumberByPoint/SetCurrentModel`, `IDocuments.GetDocumentTypeByName`, `IStamp.IsCellPresent`, `IThread.GetLimitPoints`, `ITolerance`/`ITolerance3D` (доп. знаки допусков), `IApplicationDialogs` (ChoiceDocument/ChoiceTolerance/ReadPassword).
**Вывод / на проработку:** решения о переходе на v25 нет. Если оно будет принято — нужно либо доснять `docs/Kompas3D_SDK/` под v25, либо верифицировать эти интерфейсы напрямую рефлексией по новым interop-сборкам (тот же принцип «Haiku предлагает → Opus перепроверяет по DLL», что и сейчас). Приоритетные кандидаты: `ICheckGeometry` (валидация геометрии), `ICollision(s)` (проверка столкновений в сборке), `IFaceReplacer`/`IFaceResizer` (расширение прямого редактирования B-rep).
### ✅ Упаковка в плагин Claude Code — реализована
**Решено.** Сервер и оба навыка упакованы в плагин `kompas` (`plugin/`): манифест
`plugin/.claude-plugin/plugin.json`, лок версии сервера `plugin/server.lock.json`, лаунчер-доставщик
(`plugin/scripts/launch-kompas-mcp.ps1` + `KompasMcpBootstrap.psm1`), команда `/kompas:doctor`,
раскладка навыков junction'ами (`tools/sync-agent-assets.ps1`), CLI-флаг `--version`, CI/CD на Gitea
Actions (сборка+тесты на push/PR, релиз-пайплайн на тег). Подробности — `CLAUDE.md`
§«Claude Code plugin» и `docs/ARCHITECTURE.md` §12. Первого публичного релиза ещё нет — см. вопросы
ниже.
## ⚠️ Открытые вопросы плагина
- **Право на редистрибуцию interop-DLL АСКОН.** Self-contained ассет релиза включает вендорские
`libs/kompas-interop/*.dll`. Блокирует первый публичный релиз — обсуждается отдельно с АСКОН/юристами.
- **Junction'ы ломают переключение веток.** `git checkout` на коммит без каталога `plugin/skills`
падает: ссылки `.claude/skills/<name>`/`.agents/skills/<name>` повисают, чекаут обрывается
посередине. Обход — снять junction'ы (`tools/sync-agent-assets.ps1 -Remove`), переключиться,
разложить заново (см. порядок действий в `CLAUDE.md`).
- **Мусор в `%LOCALAPPDATA%\kompas-mcp\.tmp`** при аварийном завершении процесса-установщика никем
не чистится (кроме удаления записей старше порога при следующей успешной установке —
`Remove-KompasMcpStaleTemp` вызывается только изнутри `Install-KompasMcpServer`, а не отдельно).
- **`%LOCALAPPDATA%\kompas-mcp` не очищается** ни при обновлении плагина (старые версии копятся),
ни при его удалении.
- **Формулировки «релиза ещё нет»** продублированы в трёх местах (`plugin/README.md` и обоих
`plugin/adapters/*/README.md`) — после первого релиза все три станут ложными и требуют синхронной правки.
+15 -10
View File
@@ -128,7 +128,7 @@
<!-- HERO -->
<header class="hero">
<div class="wrap">
<span class="badge"><span class="dot" style="background:var(--green);box-shadow:0 0 10px var(--green)"></span> Статус: v3+ работает — эскиз→операции→STEP→сборка→move_face→структурный осмотр→богатые эскизы→shell+rib+sweep+loft+массивы+зеркало+hole+hole_counterbore+hole_countersink+hole_conic+draft+переменные+assembly_add_component+assembly_add_mate+drawing_create_standard_views+drawing_fill_title_block+drawing_add_linear_dimension+drawing_add_diametral_dimension+drawing_add_radial_dimension+drawing_add_angular_dimension+drawing_add_rough+drawing_add_text+drawing_set_technical_requirements+associate+drawing_set_sheet_format+drawing_add_leader (83 инструмента)</span>
<span class="badge"><span class="dot" style="background:var(--green);box-shadow:0 0 10px var(--green)"></span> Статус: v3+ работает — эскиз→операции→STEP→сборка→move_face→структурный осмотр→богатые эскизы→shell+rib+sweep+loft+массивы+зеркало+hole+hole_counterbore+hole_countersink+hole_conic+draft+переменные+assembly_add_component+assembly_add_mate+drawing_create_standard_views+drawing_fill_title_block+drawing_add_linear_dimension+drawing_add_diametral_dimension+drawing_add_radial_dimension+drawing_add_angular_dimension+drawing_add_rough+drawing_add_text+drawing_set_technical_requirements+associate+drawing_set_sheet_format+drawing_add_leader+set_variable_note+плагин Claude Code «kompas» (84 инструмента)</span>
<h1>КОМПАС-3D <span class="g">MCP-сервер</span><br>управление CAD языком LLM</h1>
<p class="lead">MCP-сервер, который превращает операции КОМПАС-3D — создание документов,
эскизы, 3D-операции, параметры — в инструменты для языковой модели. Под капотом —
@@ -261,7 +261,7 @@
впереди.</p>
<div class="prog">
<div class="progrow"><span>Общий прогресс</span><span>v3+: STEP · move_face · структурный осмотр · богатые эскизы (пакет A) · shell+rib+sweep+loft (пакет B) · массивы+зеркало (пакет C) · переменные (пакет D start) · offset-plane (пакет E start) · hole (API7) · hole_counterbore · hole_countersink · hole_conic · draft (API5) · assembly_add_component · assembly_add_mate · drawing_create_standard_views · drawing_fill_title_block · drawing_add_linear_dimension · drawing_add_diametral_dimension · drawing_add_radial_dimension · drawing_add_angular_dimension · drawing_add_rough · drawing_add_text · drawing_set_technical_requirements · associate (ассоциативная привязка диам./радиального) · drawing_set_sheet_format (формат листа) · drawing_add_leader (выноска) · навык kompas-3d · 83 инструмента · 331 тест</span></div>
<div class="progrow"><span>Общий прогресс</span><span>v3+: STEP · move_face · структурный осмотр · богатые эскизы (пакет A) · shell+rib+sweep+loft (пакет B) · массивы+зеркало (пакет C) · переменные (пакет D start) · offset-plane (пакет E start) · hole (API7) · hole_counterbore · hole_countersink · hole_conic · draft (API5) · assembly_add_component · assembly_add_mate · drawing_create_standard_views · drawing_fill_title_block · drawing_add_linear_dimension · drawing_add_diametral_dimension · drawing_add_radial_dimension · drawing_add_angular_dimension · drawing_add_rough · drawing_add_text · drawing_set_technical_requirements · associate (ассоциативная привязка диам./радиального) · drawing_set_sheet_format (формат листа) · drawing_add_leader (выноска) · set_variable_note · плагин Claude Code «kompas» + CI/CD на Gitea Actions · навыки kompas-3d/kompas-fdm-design · 84 инструмента · 357 .NET-тестов + 41 Pester</span></div>
<div class="bar"><i style="width:97%"></i></div>
</div>
@@ -297,7 +297,7 @@
<!-- TOOLS -->
<div class="panel">
<h3>Инструменты v3+ <span class="tag done">ГОТОВО</span></h3>
<p class="meta">83 инструмента, отдаются по MCP-протоколу</p>
<p class="meta">84 инструмента, отдаются по MCP-протоколу</p>
<ul class="list">
<li class="muted"><span class="mark ok"></span><span class="t"><code>System</code>: connect · status · set_visible</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Documents</code>: create · open · save · save_as · close · active</span></li>
@@ -307,7 +307,7 @@
<li class="muted"><span class="mark ok"></span><span class="t"><code>Inspection</code>: describe_model · list_features · list_bodies · list_variables · describe_face · describe_edge · measure</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Vision</code>: model_snapshot 👁️ (fallback)</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Query</code>: get_part_info · get_bounding_box · list_faces · list_edges · list_components</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Variables</code>: <b>create_variable</b> · <b>set_variable</b> · <b>delete_variable</b> (пакет D)</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Variables</code>: <b>create_variable</b> · <b>set_variable</b> · <b>set_variable_note</b> · <b>delete_variable</b> (пакет D)</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Conversion</code>: import_step · export_step</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Assembly</code>: <b>assembly_add_component</b> (вставка компонента .m3d/.a3d в сборку, API7) · <b>assembly_add_mate</b> (сопряжения coincidence/distance, API7)</span></li>
<li class="muted"><span class="mark ok"></span><span class="t"><code>Drawing</code>: <b>drawing_create_standard_views</b> (стандартные ассоциативные виды чертежа, API7) · <b>drawing_fill_title_block</b> (основная надпись/штамп: обозначение, наименование, материал, API7) · <b>drawing_add_linear_dimension</b> (линейный размер на виде, ISymbols2DContainer, API7) · <b>drawing_add_diametral_dimension</b> (диаметральный размер Ø, IDiametralDimension, <b>associate=true</b> для ассоциативной привязки к окружности, API7) · <b>drawing_add_radial_dimension</b> (радиальный размер R, IRadialDimension, <b>associate=true</b> аналогично, API7) · <b>drawing_add_angular_dimension</b> (угловой размер, IAngleDimension, angleType=min/max/more, API7) · <b>drawing_add_rough</b> (знак шероховатости, IRough/IRoughParams, signType=delete/without/none, API7) · <b>drawing_add_text</b> (свободный текст на виде, IDrawingContainer/IDrawingText, API7) · <b>drawing_set_technical_requirements</b> (тех. требования документа, IDrawingDocument/TechnicalDemand, API7) · <b>drawing_set_sheet_format</b> (формат и ориентация листа, ILayoutSheet/ISheetFormat, PaperFormat A0A5/user, API7) · <b>drawing_add_leader</b> (линия-выноска с текстом, ISymbols2DContainer/IBaseLeader/IBranchs/ILeader, ShelfDirection enum, API7)</span></li>
@@ -318,14 +318,16 @@
<!-- QUALITY -->
<div class="panel">
<h3>Качество и поставка <span class="tag now">В РАБОТЕ</span></h3>
<p class="meta">Тесты, сборка, интеграция с клиентом</p>
<p class="meta">Тесты, сборка, плагин Claude Code, CI/CD</p>
<ul class="list">
<li class="muted"><span class="mark ok"></span><span class="t">Unit-тесты — без COM: диспетчер, enum-маппинг, StepFormat, InspectionText</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Интеграционные тесты с КОМПАС: подключение, документы, снимок, цикл, STEP round-trip, сборка, move_face, инспекция</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Итого 331 тест зелёных (201 unit + 130 integration)</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Сборка <code>kompas-mcp.exe</code>, README с конфигом клиента</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Навык <code>kompas-3d</code> (методика) + полигон <code>usecases/</code></span></li>
<li><span class="mark todo"></span><span>In-process тест MCP-клиента, релизный publish</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Итого 357 .NET-тестов зелёных (226 unit + 131 integration) + 41 Pester-тест плагина</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Сборка <code>kompas-mcp.exe</code>, README с конфигом клиента, CLI-флаг <code>--version</code></span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Навыки <code>kompas-3d</code> · <code>kompas-fdm-design</code> (методика) + полигон <code>usecases/</code></span></li>
<li class="muted"><span class="mark ok"></span><span class="t">Плагин Claude Code <code>kompas</code>: манифест, лаунчер-доставщик, <code>server.lock.json</code>, <code>/kompas:doctor</code>, навыки junction'ами</span></li>
<li class="muted"><span class="mark ok"></span><span class="t">CI на Gitea Actions: сборка+тесты на push/PR, релиз-пайплайн self-contained publish на тег → ветка <code>dist</code></span></li>
<li><span class="mark todo"></span><span>Первый публичный релиз, запись плагина в каталоге <code>home-repo-cc</code>, право на редистрибуцию interop-DLL АСКОН</span></li>
</ul>
</div>
</div>
@@ -359,7 +361,9 @@
<div class="tl" style="border-color:var(--green)"><div class="ph" style="color:var(--green)">2D-чертёж · инкремент 7 ✓</div><h4>Ассоциативная привязка к окружности</h4><p><b>associate=true</b> у drawing_add_diametral_dimension и drawing_add_radial_dimension · CircularObjectMatch (поиск по центру+радиусу, допуск 1 мм) · RequireViewContainers · dim.BaseObject=circle · значение из геометрии · 81 инструмент · 278 тестов</p></div>
<div class="tl" style="border-color:var(--green)"><div class="ph" style="color:var(--green)">2D-чертёж · инкремент 8 ✓</div><h4>Формат и ориентация листа</h4><p><b>drawing_set_sheet_format</b> (ILayoutSheet.Format / ISheetFormat, ksDocumentFormatEnum, A0A5/user, VerticalOrientation) · PaperFormat enum · SheetFormatResult · ValidateFormatDimensions · 82 инструмента · 308 тестов</p></div>
<div class="tl" style="border-color:var(--green)"><div class="ph" style="color:var(--green)">2D-чертёж · инкремент 9 ✓</div><h4>Линия-выноска</h4><p><b>drawing_add_leader</b> (ISymbols2DContainer.Leaders.Add / IBaseLeader / IBranchs.AddBranchByPoint / ILeader.TextOnShelf, ShelfDirection enum auto/right/left/up/down, API7) · DrawingAnnotationResult · 83 инструмента · 331 тест</p></div>
<div class="tl cur"><div class="ph">далее · в работе ▶</div><h4>Оформление чертежа</h4><p>Рамка/надпись по ГОСТ-стилю (LayoutLibraryFileName) · несколько листов · привязка к дуге (Arcs) · ассоциативный угловой размер · ассоциативная шероховатость (IRough.BaseObject) · обозначения баз (Bases) · допуски формы (Tolerances) · специальные выноски (позиция/клеймо/маркер) · пакет E (ось, угловая плоскость) · прочие типы сопряжений (parallel/perpendicular/concentric/angle/tangency) · пакет D параметрика — параметрические эскизы недоступны через COM API</p></div>
<div class="tl" style="border-color:var(--green)"><div class="ph" style="color:var(--green)">переменные · готово ✓</div><h4>Примечание переменной</h4><p><b>set_variable_note</b> (пакет D) · 84 инструмента · 357 .NET-тестов</p></div>
<div class="tl" style="border-color:var(--green)"><div class="ph" style="color:var(--green)">плагин · готово ✓</div><h4>Плагин Claude Code</h4><p>Плагин <b>kompas</b> (<code>plugin/</code>): манифест · <code>server.lock.json</code> · лаунчер-доставщик (KompasMcpBootstrap.psm1) · <b>/kompas:doctor</b> · навыки junction'ами · CLI <code>--version</code> · CI/CD на Gitea Actions · канал дистрибуции — ветка <code>dist</code>. Первого релиза пока нет.</p></div>
<div class="tl cur"><div class="ph">далее · в работе ▶</div><h4>Оформление чертежа</h4><p>Рамка/надпись по ГОСТ-стилю (LayoutLibraryFileName) · несколько листов · привязка к дуге (Arcs) · ассоциативный угловой размер · ассоциативная шероховатость (IRough.BaseObject) · обозначения баз (Bases) · допуски формы (Tolerances) · специальные выноски (позиция/клеймо/маркер) · пакет E (ось, угловая плоскость) · прочие типы сопряжений (parallel/perpendicular/concentric/angle/tangency) · пакет D параметрика — параметрические эскизы недоступны через COM API · первый публичный релиз плагина</p></div>
</div>
</div>
</section>
@@ -369,6 +373,7 @@
<div>КОМПАС-3D MCP · документация проекта</div>
<div class="links">
<a href="../README.md">📦 README</a>
<a href="../plugin/README.md">🧩 Плагин Claude Code</a>
<a href="ARCHITECTURE.md">📐 Документ архитектуры</a>
<a href="IMPLEMENTATION_PLAN.md">🛠️ План реализации</a>
<a href="OPEN_QUESTIONS.md">❓ Открытые вопросы</a>