diff --git a/docs/architecture/autocad-startup.md b/docs/architecture/autocad-startup.md new file mode 100644 index 0000000..731e6d3 --- /dev/null +++ b/docs/architecture/autocad-startup.md @@ -0,0 +1,16 @@ +# AutoCAD startup + +Plant 3D 2026 is started with the confirmed contract: + +```text +acad.exe /product PLNT3D /language ru-RU /b +``` + +The generated script has one command: + +```text +_.NETLOAD +"" +``` + +No `/p`, legacy LISP, `OrthoLoader`, UNC path, trusted-path mutation, or secondary dependency NETLOAD is used. diff --git a/docs/architecture/package-activation.md b/docs/architecture/package-activation.md new file mode 100644 index 0000000..d94d55b --- /dev/null +++ b/docs/architecture/package-activation.md @@ -0,0 +1,5 @@ +# Package activation + +Before changing package pointers, Launcher Next writes an activation snapshot containing exact previous `current.json` and `previous.json` contents and their SHA-256 values. Files are copied to a unique staging directory and rehashed. Only then is staging moved to `packages//versions/` and the package-local pointer updated atomically. + +Rollback restores the exact pointers, deletes the pilot version and startup script, and removes incomplete staging. Autodesk assemblies, PDBs, executables, test assemblies and legacy files are rejected from the pilot package. diff --git a/docs/architecture/pilot-state-machine.md b/docs/architecture/pilot-state-machine.md new file mode 100644 index 0000000..e1bd39d --- /dev/null +++ b/docs/architecture/pilot-state-machine.md @@ -0,0 +1,7 @@ +# Pilot state machine + +`Prepared → Activating → ProcessStarting → WaitingForRuntimeCheck → RolledBack` + +Failures are persisted as `Failed`. A new run is blocked by an active session; a completed `RolledBack` session permits a new run. `pilot rollback` restores state from its persisted activation snapshot and is repeatable. + +The current session schema persists the terminal state. It does not yet persist a transition-history array; evidence must not infer intermediate transitions after the fact. diff --git a/docs/architecture/rollback-mechanics.md b/docs/architecture/rollback-mechanics.md new file mode 100644 index 0000000..8593697 --- /dev/null +++ b/docs/architecture/rollback-mechanics.md @@ -0,0 +1,5 @@ +# Rollback mechanics + +Rollback is performed only after the pilot-owned AutoCAD PID has exited. It restores pointer contents from the persisted snapshot, removes the generated SCR, cleans staging, deletes the activated pilot version, and writes session state `RolledBack`. + +If an application process exits unexpectedly, `pilot rollback` can be run in a new Launcher Next process because it reads the persisted session and activation snapshot. diff --git a/docs/architecture/runtime-mechanics.md b/docs/architecture/runtime-mechanics.md new file mode 100644 index 0000000..fceda6e --- /dev/null +++ b/docs/architecture/runtime-mechanics.md @@ -0,0 +1,7 @@ +# Launcher Next runtime mechanics + +The controlled pilot flow is: CLI `pilot run` → local `pilot.local.json` → manifest generation and SHA-256 validation → `PrepareAsync` → one-time in-memory permit → `ExecuteAsync` → staging → version activation → startup SCR → guarded `Process.Start` → wait for the specific AutoCAD PID → `RollbackAsync`. + +The pilot uses only `C:\AutoCAD User Support\LauncherNextPilot`. It does not modify the legacy launcher, AutoCAD profiles, registry, trusted paths, or the legacy Applications directory. + +The runtime command is `acad.exe /product PLNT3D /language ru-RU /b `; no profile argument is supplied. The SCR invokes exactly one `NETLOAD`, for the local versioned entry assembly only. diff --git a/docs/evidence/p-rec-annot-real-smoke.json b/docs/evidence/p-rec-annot-real-smoke.json new file mode 100644 index 0000000..faa15a0 --- /dev/null +++ b/docs/evidence/p-rec-annot-real-smoke.json @@ -0,0 +1,28 @@ +{ + "launcherMode": "NextPilot", + "product": "Autodesk AutoCAD Plant 3D 2026", + "packageId": "P_Rec_Annot", + "packageVersion": "1.0.0.0", + "manifestValidated": true, + "hashesValidated": true, + "startupNetloadCount": 1, + "processStarted": true, + "processId": 9960, + "assemblyLoadedFromVersionedPackage": true, + "commands": { "PHP_REC_ANNOT": true, "PXP-AAV": true, "PXP-OA": true }, + "drawingType": "NotOrtho", + "dbmodBefore": 0, + "dbmodAfter": null, + "ribbon": null, + "unhandledExceptions": 0, + "pluginDefects": ["PLANT_PROJECT_DISPLAY_NAME_EMPTY"], + "automaticRollback": true, + "sessionState": "RolledBack", + "startupScriptRemoved": true, + "activatedVersionRemoved": true, + "currentPointerRestored": true, + "previousPointerRestored": true, + "legacyFilesModified": null, + "productionDeployment": false, + "notes": ["Legacy local sentinel files were absent; hashes were not available.", "Session records terminal RolledBack state; historic intermediate states were not persisted."] +} diff --git a/docs/pilots/p-rec-annot-real-smoke.md b/docs/pilots/p-rec-annot-real-smoke.md new file mode 100644 index 0000000..af30ff0 --- /dev/null +++ b/docs/pilots/p-rec-annot-real-smoke.md @@ -0,0 +1,9 @@ +# P_Rec_Annot real Smoke pilot + +Date: 2026-07-31. Launcher Next started Plant 3D 2026 as PID 9960 from an isolated local pilot package. The entry assembly was loaded from the versioned package directory through one generated NETLOAD. + +The manual runtime checkpoint confirmed `PHP_REC_ANNOT`, `PXP-AAV`, and `PXP-OA` executed in Smoke mode; drawing type was `NotOrtho`; initial DBMOD was `0`; no unhandled exceptions were observed. The final DBMOD and Ribbon observations were not supplied, so they are intentionally not asserted. + +After normal Plant shutdown, automatic rollback completed. No `acad.exe` remained. Startup scripts, staging contents, package pointers and activated version were absent; the activation snapshot was retained. The checked local legacy Application files were absent, so no before/after hashes were available. + +Known plugin defect: `PLANT_PROJECT_DISPLAY_NAME_EMPTY`. Plant context was found but displayed an empty project name. Impact was diagnostic/UI-only for this Smoke pilot; write protection and command execution were unaffected. Follow-up: inspect `PlantApplication.CurrentProject` metadata and distinguish absent display name from false-positive project detection.