30-task plan covering ScadaLink.Transport project, AES-256-GCM bundle encryption, IAuditCorrelationContext for BundleImportId threading, TreeView checkbox-selection mode + TemplateFolderTree wrapper, two Central UI wizard pages, EF migration, integration tests, README + cross-reference updates. Single shipping slice, no feature flag.
37 lines
3.2 KiB
JSON
37 lines
3.2 KiB
JSON
{
|
|
"planPath": "docs/plans/2026-05-24-transport.md",
|
|
"tasks": [
|
|
{"id": 7, "subject": "T0: Bundle DTOs in Commons", "status": "pending"},
|
|
{"id": 8, "subject": "T1: Transport interfaces", "status": "pending"},
|
|
{"id": 9, "subject": "T2: BundleImportId column on AuditLogEntry", "status": "pending"},
|
|
{"id": 10, "subject": "T3: EF migration AddBundleImportIdToAuditLog", "status": "pending", "blockedBy": [9]},
|
|
{"id": 11, "subject": "T4: IAuditCorrelationContext scoped service", "status": "pending"},
|
|
{"id": 12, "subject": "T5: AuditService reads correlation context", "status": "pending", "blockedBy": [9, 11]},
|
|
{"id": 13, "subject": "T6: ScadaLink.Transport project skeleton", "status": "pending"},
|
|
{"id": 14, "subject": "T7: TransportOptions", "status": "pending", "blockedBy": [13]},
|
|
{"id": 15, "subject": "T8: BundleSecretEncryptor (AES-256-GCM + PBKDF2)", "status": "pending", "blockedBy": [13]},
|
|
{"id": 16, "subject": "T9: ManifestBuilder + ManifestValidator", "status": "pending", "blockedBy": [13]},
|
|
{"id": 17, "subject": "T10: EntitySerializer + DTOs + secret carving", "status": "pending", "blockedBy": [13]},
|
|
{"id": 18, "subject": "T11: BundleSerializer (ZIP packer + reader)", "status": "pending", "blockedBy": [15, 16, 17]},
|
|
{"id": 19, "subject": "T12: DependencyResolver", "status": "pending", "blockedBy": [13]},
|
|
{"id": 20, "subject": "T13: BundleSessionStore", "status": "pending", "blockedBy": [13]},
|
|
{"id": 21, "subject": "T14: BundleExporter.ExportAsync", "status": "pending", "blockedBy": [18, 19]},
|
|
{"id": 22, "subject": "T15: BundleImporter.LoadAsync", "status": "pending", "blockedBy": [18, 20]},
|
|
{"id": 23, "subject": "T16: BundleImporter.PreviewAsync (diff engine)", "status": "pending", "blockedBy": [22]},
|
|
{"id": 24, "subject": "T17: BundleImporter.ApplyAsync (transactional)", "status": "pending", "blockedBy": [12, 23]},
|
|
{"id": 25, "subject": "T18: Host registration + appsettings binding", "status": "pending", "blockedBy": [24]},
|
|
{"id": 26, "subject": "T19: TreeView checkbox-selection mode", "status": "pending"},
|
|
{"id": 27, "subject": "T20: TemplateFolderTree wrapper + Templates.razor refactor", "status": "pending", "blockedBy": [26]},
|
|
{"id": 28, "subject": "T21: TransportExport.razor wizard", "status": "pending", "blockedBy": [21, 27]},
|
|
{"id": 29, "subject": "T22: TransportImport.razor wizard", "status": "pending", "blockedBy": [24, 27]},
|
|
{"id": 30, "subject": "T23: NavMenu Export/Import entries", "status": "pending", "blockedBy": [28, 29]},
|
|
{"id": 31, "subject": "T24: Audit log Bundle Import filter", "status": "pending", "blockedBy": [9]},
|
|
{"id": 32, "subject": "T25: Integration round-trip test", "status": "pending", "blockedBy": [24]},
|
|
{"id": 33, "subject": "T26: Integration conflict + rollback tests", "status": "pending", "blockedBy": [24]},
|
|
{"id": 34, "subject": "T27: Component-Transport.md design doc", "status": "pending"},
|
|
{"id": 35, "subject": "T28: README + cross-reference updates", "status": "pending"},
|
|
{"id": 36, "subject": "T29: Manual cluster verification checklist", "status": "pending", "blockedBy": [25, 29, 30, 31, 32, 33, 34, 35]}
|
|
],
|
|
"lastUpdated": "2026-05-24T00:00:00Z"
|
|
}
|