# AGENTS.md — P_Rec_Annot ## Назначение и package `P_Rec_Annot` — приоритетный Plant 3D 2026 plugin для чтения, планирования и последующего создания Ortho-аннотаций; это перенос активного legacy поведения Plant 3D 2019 на .NET 8/Plant 3D 2026. Единственная assembly для `NETLOAD` — `PRecAnnot.Plant3D2026.dll`. `PRecAnnot.*.dll` — internal managed dependencies, их нельзя NETLOAD по одной. Использовать Autodesk 2026 references; Autodesk DLL не включать в bundle. ## Commands и context Поддерживаемые команды: `PHP_REC_ANNOT`, `PXP-AAV`, `PXP-OA`. Все регистрируются реальным Autodesk API, работают в Smoke/DryRun, не изменяют DWG в этих режимах и создают одно usage event на явный вызов. Project status: `NotFound`, `FoundWithName`, `FoundWithoutDisplayName`, `Ambiguous`, `Failed`. Никогда не выводить `проект '' найден`; для пустого display name: `Plant 3D-проект открыт; отображаемое имя не определено.` Diagnostic code: `PLANT_PROJECT_DISPLAY_NAME_EMPTY`. Drawing states: `Ortho`, `NotOrtho`, `Ambiguous`, `Failed`. Обычный DWG не классифицируется как Ortho; для реального Ortho применять Autodesk API и `OrthoDocUtils.IsValidOrthoDrawing`. ## DryRun и determinism Pipeline: `Plant context → Ortho detection → sheet/view definitions → viewport snapshots → DataLinks → Plant properties → independent DTO → deterministic AnnotationPlan → diagnostics → no write`. Autodesk objects, transactions и database handles остаются в adapter layer; Core/Application используют только независимые DTO. На неизменном fixture повторный DryRun обязан давать тот же PlanId, counts, порядок операций и warning codes, без side effects. PlanId не включает время, GUID, absolute path, нестабильный ObjectId или пользовательские данные. ## Write guard, Ribbon, tests Все writes проходят централизованный write guard; в Smoke/DryRun он всегда запрещает изменения. Apply не обходится через command handler/adapter. Ожидаемый Ribbon путь: `Промхимпроект → Аннотации → Аннотировать`. Требуются stable IDs, отсутствие дублей, binding к `PHP_REC_ANNOT`, устойчивость к документам/workspace и корректный Terminate. Unit tests не требуют Autodesk runtime. Runtime evidence отдельно фиксирует initialization, commands, context, Ortho, DataLinks, plan, Ribbon, DBMOD, telemetry и shutdown. Bundle содержит только фактический runtime dependency graph и никогда не содержит Autodesk DLL, PDB, test assemblies, legacy 2019 assemblies, bin/obj или production configuration. Fixture: local Plant 3D 2026 project вне Git с настоящей Pipe, synthetic line number, Ortho drawing/viewport и SHA baseline до DryRun. ## Ortho source DataLinks and DCF control DataLinks активного Ortho drawing не являются источником Piping rows. Piping rows читаются из source model drawing и Piping project part, разрешённых через Ortho sheet/view definitions. Проверка DCF выполняется на парных `control` и `DryRun` fixtures, созданных из одного закрытого состояния проекта. Сравнивать нужно `control delta` с `DryRun delta`: одинаковые изменения классифицируются как baseline behavior Plant 3D, а plugin-only изменения блокируют дальнейшую работу.