112 lines
6.3 KiB
Markdown
112 lines
6.3 KiB
Markdown
# 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 <generated-startup-script>
|
||
```
|
||
|
||
Не передавать `/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.
|