Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
060f1c9ac1 |
@@ -1,13 +0,0 @@
|
|||||||
<Project>
|
|
||||||
<PropertyGroup>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<LangVersion>latest</LangVersion>
|
|
||||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
|
||||||
<Deterministic>true</Deterministic>
|
|
||||||
<DebugType>portable</DebugType>
|
|
||||||
<AutoCAD2026ManagedDir Condition="'$(AutoCAD2026ManagedDir)' == '' and '$(Plant3D2026InstallDir)' != ''">$(Plant3D2026InstallDir)</AutoCAD2026ManagedDir>
|
|
||||||
<Plant3D2026ManagedDir Condition="'$(Plant3D2026ManagedDir)' == '' and '$(Plant3D2026InstallDir)' != ''">$(Plant3D2026InstallDir)\PLNT3D</Plant3D2026ManagedDir>
|
|
||||||
<Plant3D2026InstallDir Condition="'$(Plant3D2026InstallDir)' == '' and '$(AutoCAD2026ManagedDir)' != ''">$(AutoCAD2026ManagedDir)</Plant3D2026InstallDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio Version 17
|
|
||||||
VisualStudioVersion = 17.0.31903.59
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecUpdate.Core", "src\PRecUpdate.Core\PRecUpdate.Core.csproj", "{20000000-0000-0000-0000-000000000001}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecUpdate.Plant3D2026", "src\PRecUpdate.Plant3D2026\PRecUpdate.Plant3D2026.csproj", "{20000000-0000-0000-0000-000000000002}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PRecUpdate.Core.Tests", "tests\PRecUpdate.Core.Tests\PRecUpdate.Core.Tests.csproj", "{20000000-0000-0000-0000-000000000003}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Any CPU = Debug|Any CPU
|
|
||||||
Release|Any CPU = Release|Any CPU
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{20000000-0000-0000-0000-000000000001}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000001}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000001}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000001}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000002}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000002}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000002}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000003}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000003}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{20000000-0000-0000-0000-000000000003}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
# P_Rec_Update capability contract
|
|
||||||
|
|
||||||
Selected legacy provenance is `\\phpsrv03\NBIM\code\CS\P_Rec_Update\P_Rec_Update\P_Rec_Update.csproj`
|
|
||||||
(SHA-256 `1945B572CEE3A308320C164549D38C95C4ED40183347CE341ACD481ED3895BFD`). It is the
|
|
||||||
expanded successor to the 2023 `_v2.1` line: it exposes `P-R-UPD`, initializes an
|
|
||||||
Update ribbon panel, and presents four selectable operations in `Main_Form`.
|
|
||||||
|
|
||||||
| Source-backed operation | Legacy effects | 2026 status |
|
|
||||||
|---|---|---|
|
|
||||||
| Project NKR | reads project XML and `Settings_NKR.xml`; updates NKR-related project data | DryRun plan and preconditions implemented; Apply blocked |
|
|
||||||
| Flanges | reads Piping DataLinks and geometry; may update support/flange-related data | DryRun plan and preconditions implemented; Apply blocked |
|
|
||||||
| Fasteners | reads EngineeringItems and may update ItemCode values | DryRun plan and preconditions implemented; Apply blocked |
|
|
||||||
| Project Spec | reads spec/project database and may update `LinearWeight` | DryRun plan and preconditions implemented; Apply blocked |
|
|
||||||
|
|
||||||
The 2026 entry assembly preserves `P-R-UPD` and adds `P-R-UPD-STATUS` for a
|
|
||||||
non-mutating controlled registration check. It is deterministic and refuses an
|
|
||||||
Apply-capable plan without an explicit controlled-fixture permit.
|
|
||||||
|
|
||||||
## Exact dependency blocker for domain Apply
|
|
||||||
|
|
||||||
The legacy code directly binds Plant 2019 DataLinks/SQLite schemas, the external
|
|
||||||
`GetComponentGeometryDescription.dll`, package-local `Settings_Flanges.xml` /
|
|
||||||
`Settings_NKR.xml`, and a hard-coded legacy template path. No controlled Plant 2026
|
|
||||||
fixture containing the required Piping rows, EngineeringItems/spec records and
|
|
||||||
expected post-state has been supplied. Therefore domain mutation is intentionally
|
|
||||||
not attempted. This is `EXACT_DEPENDENCY_BLOCKER`, not a claim of completed Apply
|
|
||||||
parity. Assembly load and command registration remain independently verifiable.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup><TargetFramework>net8.0</TargetFramework></PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
namespace PRecUpdate.Core;
|
|
||||||
|
|
||||||
public enum UpdateOperation
|
|
||||||
{
|
|
||||||
ProjectNkr,
|
|
||||||
Flanges,
|
|
||||||
Fasteners,
|
|
||||||
ProjectSpec
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum UpdateExecutionMode
|
|
||||||
{
|
|
||||||
DryRun,
|
|
||||||
Apply
|
|
||||||
}
|
|
||||||
|
|
||||||
public sealed record UpdateRequest(
|
|
||||||
bool HasActiveDocument,
|
|
||||||
bool HasPlantProject,
|
|
||||||
bool HasPipingProjectPart,
|
|
||||||
IReadOnlySet<UpdateOperation> SelectedOperations,
|
|
||||||
UpdateExecutionMode Mode,
|
|
||||||
bool ControlledFixturePermit);
|
|
||||||
|
|
||||||
public sealed record UpdatePlan(
|
|
||||||
bool Accepted,
|
|
||||||
IReadOnlyList<UpdateOperation> Operations,
|
|
||||||
IReadOnlyList<string> Diagnostics,
|
|
||||||
bool MayWriteDrawing,
|
|
||||||
bool MayWriteProjectData);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Source-backed planner for the four operations exposed by legacy P_Rec_Update.
|
|
||||||
/// It intentionally contains no Autodesk calls or file writes, which makes the
|
|
||||||
/// safety decision deterministic before a Plant transaction can be opened.
|
|
||||||
/// </summary>
|
|
||||||
public sealed class UpdatePlanBuilder
|
|
||||||
{
|
|
||||||
private static readonly UpdateOperation[] CanonicalOrder =
|
|
||||||
[
|
|
||||||
UpdateOperation.ProjectNkr,
|
|
||||||
UpdateOperation.Flanges,
|
|
||||||
UpdateOperation.Fasteners,
|
|
||||||
UpdateOperation.ProjectSpec
|
|
||||||
];
|
|
||||||
|
|
||||||
public UpdatePlan Build(UpdateRequest request)
|
|
||||||
{
|
|
||||||
ArgumentNullException.ThrowIfNull(request);
|
|
||||||
var diagnostics = new List<string>();
|
|
||||||
if (!request.HasActiveDocument) diagnostics.Add("ACTIVE_DOCUMENT_REQUIRED");
|
|
||||||
if (!request.HasPlantProject) diagnostics.Add("PLANT_PROJECT_REQUIRED");
|
|
||||||
if (!request.HasPipingProjectPart) diagnostics.Add("PIPING_PROJECT_PART_REQUIRED");
|
|
||||||
if (request.SelectedOperations.Count == 0) diagnostics.Add("UPDATE_OPERATION_REQUIRED");
|
|
||||||
if (request.Mode == UpdateExecutionMode.Apply && !request.ControlledFixturePermit)
|
|
||||||
diagnostics.Add("CONTROLLED_FIXTURE_PERMIT_REQUIRED");
|
|
||||||
|
|
||||||
var ordered = CanonicalOrder.Where(request.SelectedOperations.Contains).ToArray();
|
|
||||||
var accepted = diagnostics.Count == 0;
|
|
||||||
var apply = accepted && request.Mode == UpdateExecutionMode.Apply;
|
|
||||||
return new UpdatePlan(accepted, ordered, diagnostics, apply, apply);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
using Autodesk.AutoCAD.Runtime;
|
|
||||||
|
|
||||||
[assembly: CommandClass(typeof(PRecUpdate.Plant3D2026.EntryPoint))]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
using Autodesk.AutoCAD.ApplicationServices;
|
|
||||||
using Autodesk.AutoCAD.Runtime;
|
|
||||||
using PRecUpdate.Core;
|
|
||||||
using AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application;
|
|
||||||
|
|
||||||
namespace PRecUpdate.Plant3D2026;
|
|
||||||
|
|
||||||
public sealed class EntryPoint : IExtensionApplication
|
|
||||||
{
|
|
||||||
public void Initialize()
|
|
||||||
{
|
|
||||||
RuntimeMarker.Write("AssemblyInitializeStarted");
|
|
||||||
RuntimeMarker.Write("AssemblyInitializeCompleted");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Terminate() => RuntimeMarker.Write("AssemblyTerminateCompleted");
|
|
||||||
|
|
||||||
// Preserves the legacy command name. Apply remains denied unless a future
|
|
||||||
// controlled fixture adapter proves the legacy Plant/DataLinks semantics.
|
|
||||||
[CommandMethod("P-R-UPD", CommandFlags.Session)]
|
|
||||||
public void UpdateCommand() => ReportPlan("P-R-UPD");
|
|
||||||
|
|
||||||
[CommandMethod("P-R-UPD-STATUS", CommandFlags.Session)]
|
|
||||||
public void StatusCommand() => ReportPlan("P-R-UPD-STATUS");
|
|
||||||
|
|
||||||
private static void ReportPlan(string command)
|
|
||||||
{
|
|
||||||
var document = AcadApplication.DocumentManager.MdiActiveDocument;
|
|
||||||
var plan = new UpdatePlanBuilder().Build(new UpdateRequest(
|
|
||||||
document is not null,
|
|
||||||
HasPlantProject(),
|
|
||||||
HasPlantProject(),
|
|
||||||
new HashSet<UpdateOperation>
|
|
||||||
{
|
|
||||||
UpdateOperation.ProjectNkr, UpdateOperation.Flanges,
|
|
||||||
UpdateOperation.Fasteners, UpdateOperation.ProjectSpec
|
|
||||||
},
|
|
||||||
UpdateExecutionMode.DryRun,
|
|
||||||
ControlledFixturePermit: false));
|
|
||||||
document?.Editor.WriteMessage($"\nP_Rec_Update {command}: {(plan.Accepted ? "DryRun planned; no project data changed." : string.Join(", ", plan.Diagnostics))}");
|
|
||||||
RuntimeMarker.Write(plan.Accepted ? "CommandRegistrationVerified" : "CommandPreflightRejected");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool HasPlantProject()
|
|
||||||
{
|
|
||||||
try { return Autodesk.ProcessPower.PlantInstance.PlantApplication.CurrentProject is not null; }
|
|
||||||
catch { return false; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0-windows</TargetFramework><PlatformTarget>x64</PlatformTarget>
|
|
||||||
<AssemblyName>PRecUpdate.Plant3D2026</AssemblyName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup><ProjectReference Include="..\PRecUpdate.Core\PRecUpdate.Core.csproj" /></ItemGroup>
|
|
||||||
<ItemGroup Condition="Exists('$(AutoCAD2026ManagedDir)')">
|
|
||||||
<Reference Include="AcMgd"><HintPath>$(AutoCAD2026ManagedDir)\AcMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
|
||||||
<Reference Include="AcDbMgd"><HintPath>$(AutoCAD2026ManagedDir)\AcDbMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
|
||||||
<Reference Include="AcCoreMgd"><HintPath>$(AutoCAD2026ManagedDir)\AcCoreMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
|
||||||
<Reference Include="PnPProjectManagerMgd" Condition="Exists('$(Plant3D2026ManagedDir)\PnPProjectManagerMgd.dll')"><HintPath>$(Plant3D2026ManagedDir)\PnPProjectManagerMgd.dll</HintPath><Private>false</Private><CopyLocal>false</CopyLocal></Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace PRecUpdate.Plant3D2026;
|
|
||||||
|
|
||||||
internal static class RuntimeMarker
|
|
||||||
{
|
|
||||||
internal static void Write(string state)
|
|
||||||
{
|
|
||||||
var root = Environment.GetEnvironmentVariable("P_REC_UPDATE_MARKER_ROOT");
|
|
||||||
if (string.IsNullOrWhiteSpace(root)) return;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(root);
|
|
||||||
var payload = $"{DateTimeOffset.UtcNow:O}|{state}|{typeof(EntryPoint).Assembly.GetName().Name}";
|
|
||||||
File.WriteAllText(Path.Combine(root, state + ".marker"), payload, new UTF8Encoding(false));
|
|
||||||
}
|
|
||||||
catch { /* Evidence cannot make Plant initialization fail. */ }
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static string AssemblySha256()
|
|
||||||
{
|
|
||||||
var location = typeof(EntryPoint).Assembly.Location;
|
|
||||||
using var stream = File.OpenRead(location);
|
|
||||||
return Convert.ToHexString(SHA256.HashData(stream));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup><TargetFramework>net8.0</TargetFramework><IsPackable>false</IsPackable><IsTestProject>true</IsTestProject></PropertyGroup>
|
|
||||||
<ItemGroup><ProjectReference Include="..\..\src\PRecUpdate.Core\PRecUpdate.Core.csproj" /></ItemGroup>
|
|
||||||
<ItemGroup><PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" /><PackageReference Include="xunit" Version="2.5.3" /><PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" /></ItemGroup>
|
|
||||||
<ItemGroup><Using Include="Xunit" /></ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
using PRecUpdate.Core;
|
|
||||||
|
|
||||||
namespace PRecUpdate.Core.Tests;
|
|
||||||
|
|
||||||
public sealed class UpdatePlanBuilderTests
|
|
||||||
{
|
|
||||||
private readonly UpdatePlanBuilder builder = new();
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void DryRun_orders_selected_operations_without_writes()
|
|
||||||
{
|
|
||||||
var plan = builder.Build(new UpdateRequest(true, true, true,
|
|
||||||
new HashSet<UpdateOperation> { UpdateOperation.Fasteners, UpdateOperation.ProjectNkr }, UpdateExecutionMode.DryRun, false));
|
|
||||||
Assert.True(plan.Accepted);
|
|
||||||
Assert.Equal(new[] { UpdateOperation.ProjectNkr, UpdateOperation.Fasteners }, plan.Operations);
|
|
||||||
Assert.False(plan.MayWriteDrawing);
|
|
||||||
Assert.False(plan.MayWriteProjectData);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void Rejects_missing_project_and_empty_selection()
|
|
||||||
{
|
|
||||||
var plan = builder.Build(new UpdateRequest(false, false, false, new HashSet<UpdateOperation>(), UpdateExecutionMode.DryRun, false));
|
|
||||||
Assert.False(plan.Accepted);
|
|
||||||
Assert.Contains("ACTIVE_DOCUMENT_REQUIRED", plan.Diagnostics);
|
|
||||||
Assert.Contains("PLANT_PROJECT_REQUIRED", plan.Diagnostics);
|
|
||||||
Assert.Contains("PIPING_PROJECT_PART_REQUIRED", plan.Diagnostics);
|
|
||||||
Assert.Contains("UPDATE_OPERATION_REQUIRED", plan.Diagnostics);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void Apply_requires_explicit_controlled_fixture_permit()
|
|
||||||
{
|
|
||||||
var plan = builder.Build(new UpdateRequest(true, true, true,
|
|
||||||
new HashSet<UpdateOperation> { UpdateOperation.ProjectSpec }, UpdateExecutionMode.Apply, false));
|
|
||||||
Assert.False(plan.Accepted);
|
|
||||||
Assert.Contains("CONTROLLED_FIXTURE_PERMIT_REQUIRED", plan.Diagnostics);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void Permitted_apply_is_the_only_write_capable_plan()
|
|
||||||
{
|
|
||||||
var plan = builder.Build(new UpdateRequest(true, true, true,
|
|
||||||
new HashSet<UpdateOperation> { UpdateOperation.ProjectSpec }, UpdateExecutionMode.Apply, true));
|
|
||||||
Assert.True(plan.Accepted);
|
|
||||||
Assert.True(plan.MayWriteDrawing);
|
|
||||||
Assert.True(plan.MayWriteProjectData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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.
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)"
|
||||||
@@ -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)"
|
||||||
Reference in New Issue
Block a user