From 060f1c9ac158c05b34081ad8e927341a8b8f31f0 Mon Sep 17 00:00:00 2001 From: codex Date: Wed, 5 Aug 2026 08:57:24 +0300 Subject: [PATCH] migration: add capability ledger foundation --- migration/capability-ledger/README.md | 35 + .../plant3d-p-rec-annot-commands.json | 607 ++++++++++++++++++ migration/capability-ledger/schema.json | 35 + migration/tools/Build-CapabilityLedger.ps1 | 62 ++ migration/tools/Test-CapabilityLedger.ps1 | 23 + 5 files changed, 762 insertions(+) create mode 100644 migration/capability-ledger/README.md create mode 100644 migration/capability-ledger/plant3d-p-rec-annot-commands.json create mode 100644 migration/capability-ledger/schema.json create mode 100644 migration/tools/Build-CapabilityLedger.ps1 create mode 100644 migration/tools/Test-CapabilityLedger.ps1 diff --git a/migration/capability-ledger/README.md b/migration/capability-ledger/README.md new file mode 100644 index 0000000..14e7404 --- /dev/null +++ b/migration/capability-ledger/README.md @@ -0,0 +1,35 @@ +# Capability ledger + +This directory is the versioned, machine-readable register that prevents active +2019 capabilities from silently disappearing during the Autodesk 2026 migration. +It is product-neutral by schema: Plant 3D, Revit and Navisworks records use the +same required fields, while product adapters remain outside the ledger. + +Current coverage is deliberately narrow: active, non-archive `P_Rec_Annot` +Plant 3D command registrations. The generated ledger does not claim to be a +complete inventory of the 2019 ecosystem. Launcher, profiles, palettes, +resources, Revit and Navisworks must be added as independently audited slices. + +## Working journal — 2026-08-05 + +1. This work makes a real 2019 capability visible, owned and decidable rather + than treating the first migrated command as the programme boundary. +2. It closes the risk that active P_Rec_Annot commands disappear unnoticed. +3. The schema is reusable for Revit and Navisworks because it describes a + capability and its evidence, not a Plant API. +4. No Launcher or product domain logic is introduced. +5. The scope statement and source pointer make missing coverage explicit. +6. Equivalence is proven only by the record's verification method and runtime + evidence; `NOT REPORTED` remains explicit. +7. Users gain an accountable migration path for every currently-audited active + P_Rec_Annot command, including the already verified reference vertical. + +## Regeneration and validation + +```powershell +pwsh migration/tools/Build-CapabilityLedger.ps1 +pwsh migration/tools/Test-CapabilityLedger.ps1 +``` + +The builder consumes audited source records only, excludes `_archive`, writes +stable IDs, and retains unknowns instead of manufacturing a target decision. diff --git a/migration/capability-ledger/plant3d-p-rec-annot-commands.json b/migration/capability-ledger/plant3d-p-rec-annot-commands.json new file mode 100644 index 0000000..68b73b7 --- /dev/null +++ b/migration/capability-ledger/plant3d-p-rec-annot-commands.json @@ -0,0 +1,607 @@ +{ + "schemaVersion": 1, + "scope": "Plant 3D P_Rec_Annot active command slice generated from audited non-archive command registrations. This is a ledger foundation, not a claim of complete ecosystem inventory.", + "source": "migration/audits/p-rec-annot-v1.0.4/evidence/commands.csv", + "capabilities": [ + { + "id": "PLANT3D-2019-CMD-BJ", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "PHPAnnotations\\PHPBlockJig.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: BJ", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-CAC", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "PHPAnnotations\\PHPAnnotations.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: CAC", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-CAC1", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "P3DNewMa\\NewMaControl.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: CAC1", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-CREATEANNOTATIONCOMMAND", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "PHPAnnotations\\PHPAnnotations.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: CreateAnnotationCommand", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-MTO-MA", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "P3DNewMa\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: mto-ma", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-MTO-MA1", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "P3DNewMa\\NewMaControl.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: mto-ma1", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-AAV", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AutoAnnotateView\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-AAV", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "PRecAnnot.Plant3D2026", + "owner": "Plant annotation domain owner", + "migrationStatus": "RUNTIME_VERIFIED", + "verificationMethod": "Controlled Plant 3D 2026 Preview/Apply/repeated Apply/UNDO runtime acceptance", + "runtimeEvidence": "Accepted runtime session 7402fee6290b44438642f9204e8bdb6c; automation journal 0cf74ff1c90d4c69a10417904638c7b6", + "knownDifferences": "2026 implementation uses local immutable package staging and managed entry assembly; legacy loading mechanics are not retained.", + "decision": "MIGRATED_RUNTIME_VERIFIED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-AC", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "SwapAttributesMenuItem\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-AC", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-AE", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AutoElevation\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-AE", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-ALC", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AutoLinenumberConnections\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-ALC", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-COV", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "CheckOrthoView\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-COV", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-DJ", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "OrthoAutoAnnotate\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-DJ", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-ELN", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AnnotateLineNumbers\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-ELN", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-ESN", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AnnotateLineNumbers\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-ESN", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-GIT", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "ExtentsIntersect\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-GIT", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-IE", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "InsertElevation\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-IE", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-IOD", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "UpdateOrthoDrawings\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-IOD", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-LN", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AnnotateLineNumbers\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-LN", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-MA", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "PHPAnnotations\\PHPAnnotations.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-MA", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-OA", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "OrthoAutoAnnotate\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-OA", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "PRecAnnot.Plant3D2026", + "owner": "Plant annotation domain owner", + "migrationStatus": "RUNTIME_VERIFIED", + "verificationMethod": "Controlled Plant 3D 2026 Preview/Apply/repeated Apply/UNDO runtime acceptance", + "runtimeEvidence": "Accepted runtime session 7402fee6290b44438642f9204e8bdb6c; automation journal 0cf74ff1c90d4c69a10417904638c7b6", + "knownDifferences": "2026 implementation uses local immutable package staging and managed entry assembly; legacy loading mechanics are not retained.", + "decision": "MIGRATED_RUNTIME_VERIFIED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-OSI", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "OrthoAutoAnnotate\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-OSI", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-RA", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "OrthoAutoAnnotate\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-RA", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-RMP", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AnnotateLineNumbers\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-RMP", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-ULN", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "AnnotateLineNumbers\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-ULN", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + }, + { + "id": "PLANT3D-2019-CMD-PXP-UOB", + "sourceProduct": "Autodesk Plant 3D 2019", + "sourceComponent": "UpdateOrthoViewBlocks\\Commands.cs", + "userPurpose": "Registered AutoCAD command; command body and workflow require source-specific acceptance.", + "launchMethod": "AutoCAD command: PXP-UOB", + "dependencies": [ + "Plant 3D drawing", + "P_Rec_Annot legacy module" + ], + "resources": [ + "Project configuration", + "Drawing and annotation resources" + ], + "projectConstraints": "Plant project: verify body; reads drawing: yes; writes drawing: unknown", + "legacyStatus": "ACTIVE_LEGACY", + "targetComponent": "UNASSIGNED", + "owner": "UNASSIGNED", + "migrationStatus": "MIGRATION_PLANNED", + "verificationMethod": "Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance", + "runtimeEvidence": "NOT REPORTED", + "knownDifferences": "NOT ASSESSED", + "decision": "MIGRATION_REQUIRED" + } + ] +} diff --git a/migration/capability-ledger/schema.json b/migration/capability-ledger/schema.json new file mode 100644 index 0000000..89ba1e4 --- /dev/null +++ b/migration/capability-ledger/schema.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Autodesk 2019 to 2026 capability ledger", + "type": "object", + "required": ["schemaVersion", "scope", "capabilities"], + "properties": { + "schemaVersion": { "const": 1 }, + "scope": { "type": "string", "minLength": 1 }, + "capabilities": { + "type": "array", + "items": { + "type": "object", + "required": ["id", "sourceProduct", "sourceComponent", "userPurpose", "launchMethod", "dependencies", "resources", "projectConstraints", "legacyStatus", "targetComponent", "owner", "migrationStatus", "verificationMethod", "runtimeEvidence", "knownDifferences", "decision"], + "properties": { + "id": { "type": "string", "pattern": "^[A-Z0-9-]+$" }, + "sourceProduct": { "type": "string" }, + "sourceComponent": { "type": "string" }, + "userPurpose": { "type": "string" }, + "launchMethod": { "type": "string" }, + "dependencies": { "type": "array", "items": { "type": "string" } }, + "resources": { "type": "array", "items": { "type": "string" } }, + "projectConstraints": { "type": "string" }, + "legacyStatus": { "type": "string" }, + "targetComponent": { "type": "string" }, + "owner": { "type": "string" }, + "migrationStatus": { "type": "string" }, + "verificationMethod": { "type": "string" }, + "runtimeEvidence": { "type": "string" }, + "knownDifferences": { "type": "string" }, + "decision": { "type": "string" } + } + } + } + } +} diff --git a/migration/tools/Build-CapabilityLedger.ps1 b/migration/tools/Build-CapabilityLedger.ps1 new file mode 100644 index 0000000..78ac549 --- /dev/null +++ b/migration/tools/Build-CapabilityLedger.ps1 @@ -0,0 +1,62 @@ +[CmdletBinding()] +param( + [Parameter(Mandatory = $false)] + [string]$RepositoryRoot, + [Parameter(Mandatory = $false)] + [string]$OutputPath +) + +$ErrorActionPreference = 'Stop' +if (-not $RepositoryRoot) { $RepositoryRoot = Split-Path -Parent $PSScriptRoot } +$RepositoryRoot = [IO.Path]::GetFullPath($RepositoryRoot) +$commandsPath = Join-Path $RepositoryRoot 'audits\p-rec-annot-v1.0.4\evidence\commands.csv' +if (-not (Test-Path -LiteralPath $commandsPath -PathType Leaf)) { throw "CAPABILITY_LEDGER_COMMAND_SOURCE_MISSING: $commandsPath" } +if (-not $OutputPath) { $OutputPath = Join-Path $RepositoryRoot 'capability-ledger\plant3d-p-rec-annot-commands.json' } +$OutputPath = [IO.Path]::GetFullPath($OutputPath) + +$accepted = @{ + 'PXP-AAV' = @{ Component = 'PRecAnnot.Plant3D2026'; Evidence = 'Accepted runtime session 7402fee6290b44438642f9204e8bdb6c; automation journal 0cf74ff1c90d4c69a10417904638c7b6'; Decision = 'MIGRATED_RUNTIME_VERIFIED' } + 'PXP-OA' = @{ Component = 'PRecAnnot.Plant3D2026'; Evidence = 'Accepted runtime session 7402fee6290b44438642f9204e8bdb6c; automation journal 0cf74ff1c90d4c69a10417904638c7b6'; Decision = 'MIGRATED_RUNTIME_VERIFIED' } +} + +$commands = Import-Csv -LiteralPath $commandsPath | Where-Object { $_.File -notmatch '(^|\\)_archive(\\|$)' } | + Group-Object Command | ForEach-Object { $_.Group | Select-Object -First 1 } | Sort-Object Command + +$capabilities = foreach ($command in $commands) { + $acceptedRecord = $accepted[$command.Command] + $status = if ($acceptedRecord) { 'RUNTIME_VERIFIED' } else { 'MIGRATION_PLANNED' } + [ordered]@{ + id = ('PLANT3D-2019-CMD-' + ($command.Command.ToUpperInvariant() -replace '[^A-Z0-9]+', '-').Trim('-')) + sourceProduct = 'Autodesk Plant 3D 2019' + sourceComponent = $command.File + userPurpose = 'Registered AutoCAD command; command body and workflow require source-specific acceptance.' + launchMethod = ('AutoCAD command: ' + $command.Command) + dependencies = @('Plant 3D drawing', 'P_Rec_Annot legacy module') + resources = @('Project configuration', 'Drawing and annotation resources') + projectConstraints = ('Plant project: ' + $command.PlantProject + '; reads drawing: ' + $command.ReadsDrawing + '; writes drawing: ' + $command.WritesDrawing) + legacyStatus = 'ACTIVE_LEGACY' + targetComponent = if ($acceptedRecord) { $acceptedRecord.Component } else { 'UNASSIGNED' } + owner = if ($acceptedRecord) { 'Plant annotation domain owner' } else { 'UNASSIGNED' } + migrationStatus = $status + verificationMethod = if ($acceptedRecord) { 'Controlled Plant 3D 2026 Preview/Apply/repeated Apply/UNDO runtime acceptance' } else { 'Legacy source audit, contract, deterministic Preview, controlled Apply, idempotency, UNDO and visual acceptance' } + runtimeEvidence = if ($acceptedRecord) { $acceptedRecord.Evidence } else { 'NOT REPORTED' } + knownDifferences = if ($acceptedRecord) { '2026 implementation uses local immutable package staging and managed entry assembly; legacy loading mechanics are not retained.' } else { 'NOT ASSESSED' } + decision = if ($acceptedRecord) { $acceptedRecord.Decision } else { 'MIGRATION_REQUIRED' } + } +} + +$ledger = [ordered]@{ + schemaVersion = 1 + scope = 'Plant 3D P_Rec_Annot active command slice generated from audited non-archive command registrations. This is a ledger foundation, not a claim of complete ecosystem inventory.' + source = 'migration/audits/p-rec-annot-v1.0.4/evidence/commands.csv' + capabilities = @($capabilities) +} + +$parent = Split-Path -Parent $OutputPath +New-Item -ItemType Directory -Path $parent -Force | Out-Null +$temporary = Join-Path $parent ((Split-Path -Leaf $OutputPath) + '.tmp') +$json = $ledger | ConvertTo-Json -Depth 8 +[IO.File]::WriteAllText($temporary, $json + [Environment]::NewLine, [Text.UTF8Encoding]::new($false)) +Move-Item -LiteralPath $temporary -Destination $OutputPath -Force +Write-Output "CAPABILITY_LEDGER_WRITTEN=$OutputPath" +Write-Output "CAPABILITY_COUNT=$($capabilities.Count)" diff --git a/migration/tools/Test-CapabilityLedger.ps1 b/migration/tools/Test-CapabilityLedger.ps1 new file mode 100644 index 0000000..4f541ea --- /dev/null +++ b/migration/tools/Test-CapabilityLedger.ps1 @@ -0,0 +1,23 @@ +[CmdletBinding()] +param( + [Parameter(Mandatory = $false)] + [string]$RepositoryRoot +) + +$ErrorActionPreference = 'Stop' +if (-not $RepositoryRoot) { $RepositoryRoot = Split-Path -Parent $PSScriptRoot } +$RepositoryRoot = [IO.Path]::GetFullPath($RepositoryRoot) +$ledgerPath = Join-Path $RepositoryRoot 'capability-ledger\plant3d-p-rec-annot-commands.json' +$sourcePath = Join-Path $RepositoryRoot 'audits\p-rec-annot-v1.0.4\evidence\commands.csv' +& (Join-Path $PSScriptRoot 'Build-CapabilityLedger.ps1') -RepositoryRoot $RepositoryRoot -OutputPath $ledgerPath | Out-Null +$ledger = Get-Content -LiteralPath $ledgerPath -Raw -Encoding utf8 | ConvertFrom-Json +$required = 'id','sourceProduct','sourceComponent','userPurpose','launchMethod','dependencies','resources','projectConstraints','legacyStatus','targetComponent','owner','migrationStatus','verificationMethod','runtimeEvidence','knownDifferences','decision' +$expected = (Import-Csv -LiteralPath $sourcePath | Where-Object { $_.File -notmatch '(^|\\)_archive(\\|$)' } | Select-Object -ExpandProperty Command -Unique).Count +if ($ledger.schemaVersion -ne 1) { throw 'CAPABILITY_LEDGER_SCHEMA_VERSION_INVALID' } +if ($ledger.capabilities.Count -ne $expected) { throw "CAPABILITY_LEDGER_COUNT_MISMATCH: expected $expected, got $($ledger.capabilities.Count)" } +if (($ledger.capabilities.id | Select-Object -Unique).Count -ne $ledger.capabilities.Count) { throw 'CAPABILITY_LEDGER_DUPLICATE_ID' } +foreach ($capability in $ledger.capabilities) { foreach ($field in $required) { if (-not $capability.PSObject.Properties.Name.Contains($field)) { throw "CAPABILITY_LEDGER_REQUIRED_FIELD_MISSING: $($capability.id):$field" } } } +$accepted = @($ledger.capabilities | Where-Object { $_.decision -eq 'MIGRATED_RUNTIME_VERIFIED' }) +if ($accepted.Count -ne 2 -or ($accepted.id -notcontains 'PLANT3D-2019-CMD-PXP-AAV') -or ($accepted.id -notcontains 'PLANT3D-2019-CMD-PXP-OA')) { throw 'CAPABILITY_LEDGER_REFERENCE_VERTICAL_MISSING' } +Write-Output "CAPABILITY_LEDGER_VALIDATED=$ledgerPath" +Write-Output "CAPABILITY_COUNT=$($ledger.capabilities.Count)"