# AGENTS.md — Launcher Next ## Назначение Launcher Next — отдельная программа для доставки, activation, запуска и rollback корпоративных Plant 3D 2026 plugin packages. Она заменяет legacy цепочку `launcher → P_Serv_Starter → BAT → LISP → OrthoLoader → 20 NETLOAD`: `Launcher Next → manifest → local staging → SHA-256 validation → versioned activation → one startup NETLOAD → Plant 3D 2026 → entry assembly → wait → automatic rollback`. Репозиторий `C:\dev\launcher-next` независим. Legacy launcher repositories используются только read-only. ## Приложение и режимы Существует одна видимая программа: `Launcher.Next.App`. Не создавать отдельные test/pilot launchers с отдельным composition root; Pilot CLI — режим того же приложения. Launcher modes: `Legacy`, `DryRun`, `NextPilot`, `NextPreferred`. Допустимые plugin modes: `Smoke`, `DryRun`; Apply требует отдельного задания. Без explicit pilot configuration безопасные defaults: `DryRun`, `PilotEnabled=false`, `AllowProcessStart=false`. Pilot CLI читает реальную local configuration, а не создаёт safe-default вместо отсутствующего файла. На test machine реальный Process.Start разрешён, если задача требует runtime проверку и safety gates выполнены. Не ставить лишний review barrier после foundation/interface/composition root/Prepare: задача real pilot должна дойти до Execute, process, checkpoint, ProcessExited, automatic rollback, `RolledBack`, documentation и push. ## Plant 3D launch contract Подтверждённый Plant 3D 2026 contract: ```text /product PLNT3D /language ru-RU /b ``` Не передавать `/p`, пока profile не доказан отдельным runtime evidence. Всегда использовать `ProcessStartInfo.ArgumentList`. Передавать `P_REC_ANNOT_RUNTIME_MODE=Smoke` или `DryRun` из pilot configuration. ## Pilot root, manifest и package Разрешённый isolated root: `C:\AutoCAD User Support\LauncherNextPilot`. Он не смешивается с `C:\AutoCAD User Support\Applications`. Запрещены UNC/relative roots, Program Files, Autodesk ApplicationPlugins, repository directory, path traversal, symlink/junction escape и writes в legacy root. Manifest содержит schema, package ID/version, product/year/series, architecture, entry assembly, rollout channel, rollback safety, relative files, length и SHA-256. Блокировать Autodesk DLL, PDB, test/legacy assemblies, absolute/path-traversal paths, missing entry assembly, changed files и hash mismatch. ## Prepare, Execute и startup script `PrepareAsync` читает configuration, discovers product, validates manifest and source, creates deterministic LaunchPlan/script content/process specification и не создаёт activation state/script/process. `ExecuteAsync` повторно проверяет gate и one-time permit, сохраняет ActivationSnapshot, использует unique staging, повторно проверяет hashes, атомарно activates version/pointers, materializes script, повторно проверяет process state, запускает один process и сохраняет PID/session. Не подменять service ручным PowerShell copying. Startup script содержит ровно один `_.NETLOAD` только entry assembly из versioned local directory; он не запускает commands/LISP/OrthoLoader, не меняет TRUSTEDPATHS, не ссылается на UNC и не NETLOAD internal dependencies. ## Session и rollback States: `Prepared`, `Activating`, `Activated`, `ProcessStarting`, `ProcessStarted`, `WaitingForRuntimeCheck`, `ProcessExited`, `RollbackStarted`, `RolledBack`, `Failed`. Session atomically persisted; permit token никогда не пишется. Active/incomplete session блокирует второй run. Automatic rollback выполняется после завершения конкретного PID. Он читает persisted session/snapshot, восстанавливает exact current/previous pointers, удаляет startup script и pilot version, очищает staging, идемпотентен и работает после перезапуска. Проверять фактические файлы, не только сообщение. CLI: `pilot prepare`, `pilot run`, `pilot status`, `pilot rollback`. `pilot run --wait-for-exit --rollback-after-exit` не завершается сразу после Process.Start — он ждёт AutoCAD и rollback. ## Legacy isolation, documentation и tests Launcher Next не изменяет legacy launcher/P_Serv_Starter/BAT/LISP/ app_netload.lsp/OrthoLoader/Settings.xml, AutoCAD profile, registry или TRUSTEDPATHS. Допустима read-only hash verification. Документировать цепочку `CLI → configuration → manifest → validation → Prepare → permit → snapshot → staging → activation/pointers → script → Process.Start → PID → NETLOAD → plugin → wait → ProcessExited → rollback → RolledBack` с реальными классами/методами. Tests не запускают AutoCAD; process invoker заменяется fake. Обязательны parser, gates, manifest/hash, staging/atomic activation, permit, arguments, persistence, wait, automatic/standalone/idempotent rollback и legacy isolation. Реальный Plant runtime фиксируется отдельным evidence. ## Definition of Done Launcher slice завершён, когда normal UI сохранён, CLI вызывает реальный application service, build без warnings, tests passed, требуемый runtime pilot выполнен, assembly loaded from versioned directory, PID закрыт штатно, rollback и `RolledBack` проверены, механика документирована, ветка published обычным push.