# Scope Audit for Qt6-Migrated Modules First Release ## 1. Repository and Branch Status **Repository:** `qt-migration-legatus/qt6-after/qt6-migrated-legatus` **Branch:** `story/release-at-16-oct-2026` **Working Tree:** `/home/torsten/sandbox/qt6-migration-pipeline/qt-migration-legatus/qt6-after/qt6-migrated-legatus` --- ## 2. Complete Module Inventory (R) ### 2.1 Top-Level Modules | Module | Path | Description | |--------|------|-------------| | TetraIF | `TetraIF/` | TETRA interface modules (CoPrtCnv, LogView, PrtCnv) | | Z | `Z/` | Z module with src subdirectory | | Lts | `Lts/` | LTS application framework | | cmake | `cmake/` | CMake configuration files | | doxygen | `doxygen/` | Doxygen documentation configuration | | external | `external/` | External dependencies | | include | `include/` | Header files for various modules | | specs | `specs/` | Specification files | | src | `src/` | Source files (AlarmManagement, ParticipantManagement, Viewer) | | tests | `tests/` | Test files | | translations | `translations/` | Translation files | ### 2.2 Lts Submodules | Module | Path | Description | |--------|------|-------------| | Application | `Lts/Application/` | Application framework | | Common | `Lts/Common/` | Common LTS utilities and libraries | | DDS | `Lts/DDS/` | DDS (Data Distribution Service) integration | | Plugins | `Lts/Plugins/` | Plugin modules | | Projects | `Lts/Projects/` | Project management modules | | Proxies | `Lts/Proxies/` | Proxy modules for external systems | | Services | `Lts/Services/` | Service modules | | Tools | `Lts/Tools/` | Development and runtime tools | | Viewer | `Lts/Viewer/` | Viewer components | ### 2.3 Lts/Common Submodules | Module | Path | |--------|------| | CodeGen | `Lts/Common/CodeGen/` | | CommonUnitTestsPlaceholder | `Lts/Common/CommonUnitTestsPlaceholder/` | | LtsAppDescriptor | `Lts/Common/LtsAppDescriptor/` | | LtsAppManager | `Lts/Common/LtsAppManager/` | | LtsBotan | `Lts/Common/LtsBotan/` | | LtsCommandLineParser | `Lts/Common/LtsCommandLineParser/` | | LtsCoordTrans | `Lts/Common/LtsCoordTrans/` | | LtsCoordinate | `Lts/Common/LtsCoordinate/` | | LtsElevation | `Lts/Common/LtsElevation/` | | LtsLicence | `Lts/Common/LtsLicence/` | | LtsLogin | `Lts/Common/LtsLogin/` | | LtsMultiMonitor | `Lts/Common/LtsMultiMonitor/` | | LtsNotification | `Lts/Common/LtsNotification/` | | LtsPluginManager | `Lts/Common/LtsPluginManager/` | | LtsPrinting | `Lts/Common/LtsPrinting/` | | LtsProjectionWorkstation | `Lts/Common/LtsProjectionWorkstation/` | | LtsRestClient | `Lts/Common/LtsRestClient/` | | LtsScriptTimeline | `Lts/Common/LtsScriptTimeline/` | | LtsSerialPortQuerry | `Lts/Common/LtsSerialPortQuerry/` | | LtsSession | `Lts/Common/LtsSession/` | | LtsTimeline | `Lts/Common/LtsTimeline/` | | LtsTimelineClassic | `Lts/Common/LtsTimelineClassic/` | | LtsUtils | `Lts/Common/LtsUtils/` | | LtsVirtualKeyboard | `Lts/Common/LtsVirtualKeyboard/` | | LtsWebSocket | `Lts/Common/LtsWebSocket/` | | LtsWidgets | `Lts/Common/LtsWidgets/` | | PluginInterfaces | `Lts/Common/PluginInterfaces/` | | ProjectConfig | `Lts/Common/ProjectConfig/` | | TopicEditorBase | `Lts/Common/TopicEditorBase/` | | httq | `Lts/Common/httq/` | ### 2.4 Lts/Proxies Submodules | Module | Path | |--------|------| | Buildings | `Lts/Proxies/Buildings/` | | CombatNetRadio | `Lts/Proxies/CombatNetRadio/` | | ComponentMonitor | `Lts/Proxies/ComponentMonitor/` | | DifferentialGPS | `Lts/Proxies/DifferentialGPS/` | | FeedGeoJson | `Lts/Proxies/FeedGeoJson/` | | GuezNasat | `Lts/Proxies/GuezNasat/` | | HighLevelArchitecture | `Lts/Proxies/HighLevelArchitecture/` | | TrainingAreaBase | `Lts/Proxies/TrainingAreaBase/` | | TrainingAreaBaseOC | `Lts/Proxies/TrainingAreaBaseOC/` | | WarehouseManagement | `Lts/Proxies/WarehouseManagement/` | | WirelessLocationSystem | `Lts/Proxies/WirelessLocationSystem/` | ### 2.5 Include Directory Modules | Module | Path | |--------|------| | AlarmManagement | `include/AlarmManagement/` | | ArcGIS | `include/ArcGIS/` | | AreaEffectSimulation | `include/AreaEffectSimulation/` | | AssetManagement | `include/AssetManagement/` | | AudioVideoManagement | `include/AudioVideoManagement/` | | Core | `include/Core/` | | ExerciseEventManagement | `include/ExerciseEventManagement/` | | ExerciseManagement | `include/ExerciseManagement/` | | GeographicLib | `include/GeographicLib/` | | GuezNasat | `include/GuezNasat/` | | InfrastructureManagement | `include/InfrastructureManagement/` | | Lts | `include/Lts/` | | LtsProjectionWorkstation | `include/LtsProjectionWorkstation/` | | LtsScriptTimeline | `include/LtsScriptTimeline/` | | LtsSession | `include/LtsSession/` | | LtsUtilsGuiDds | `include/LtsUtilsGuiDds/` | | MarkerManagement | `include/MarkerManagement/` | | NGLLogger | `include/NGLLogger/` | | NotificationManagement | `include/NotificationManagement/` | | OperatorManagement | `include/OperatorManagement/` | | ParticipantManagement | `include/ParticipantManagement/` | | ProjectDataManagement | `include/ProjectDataManagement/` | | ReportManagement | `include/ReportManagement/` | | Services | `include/Services/` | | SituationReplay | `include/SituationReplay/` | | TopicEditorBase | `include/TopicEditorBase/` | | Viewer | `include/Viewer/` | | grantlee | `include/grantlee/` | | nglapplication | `include/nglapplication/` | | poppler | `include/poppler/` | | rti | `include/rti/` | --- ## 3. Released Modules (M) **M = {TetraIF, Z/src, Lts/Common}** | Module | Path | Justification | |--------|------|---------------| | TetraIF | `TetraIF/` | Explicitly listed in prompt as released module | | Z/src | `Z/src/` | Explicitly listed in prompt as released module | | Lts/Common | `Lts/Common/` | Explicitly listed in prompt as released module | --- ## 4. Release Scope (S) **S = M + {Lts/Proxies/TrainingAreaBase}** ### 4.1 Modules in S | Module | Path | Type | |--------|------|------| | TetraIF | `TetraIF/` | M (explicitly released) | | Z/src | `Z/src/` | M (explicitly released) | | Lts/Common | `Lts/Common/` | M (explicitly released) | | Lts/Proxies/TrainingAreaBase | `Lts/Proxies/TrainingAreaBase/` | S\M (required dependency) | ### 4.2 Dependencies in S\M | Dependency | Required By | Reason | File Reference | |------------|-------------|--------|----------------| | Lts/Proxies/TrainingAreaBase | TetraIF/CoPrtCnv | Provides `tabTelegrams` library required by CoPrtCnv module | `Lts/CMakeLists.txt:17-21`: "TrainingAreaBase provides tabTelegrams library needed by TetraIF/CoPrtCnv" | **Justification:** The TrainingAreaBase module is the ONLY module from R\M that is included in S because it provides the `tabTelegrams` library that is explicitly required by the TetraIF/CoPrtCnv module. This is documented in `Lts/CMakeLists.txt` lines 17-21. --- ## 5. Excluded Modules (R\S) ### 5.1 Excluded Lts Submodules | Module | Path | Reason for Exclusion | |--------|------|---------------------| | Lts/Application | `Lts/Application/` | Not in M, not a required dependency | | Lts/DDS | `Lts/DDS/` | DDS-dependent, explicitly excluded per BUILD_RTI=OFF | | Lts/Plugins | `Lts/Plugins/` | Not in M, not a required dependency | | Lts/Projects | `Lts/Projects/` | Not in M, not a required dependency | | Lts/Proxies/Buildings | `Lts/Proxies/Buildings/` | Not in M, not a required dependency | | Lts/Proxies/CombatNetRadio | `Lts/Proxies/CombatNetRadio/` | Not in M, not a required dependency | | Lts/Proxies/ComponentMonitor | `Lts/Proxies/ComponentMonitor/` | Not in M, not a required dependency | | Lts/Proxies/DifferentialGPS | `Lts/Proxies/DifferentialGPS/` | Not in M, not a required dependency | | Lts/Proxies/FeedGeoJson | `Lts/Proxies/FeedGeoJson/` | Not in M, not a required dependency | | Lts/Proxies/GuezNasat | `Lts/Proxies/GuezNasat/` | Not in M, not a required dependency | | Lts/Proxies/HighLevelArchitecture | `Lts/Proxies/HighLevelArchitecture/` | Not in M, not a required dependency | | Lts/Proxies/TrainingAreaBaseOC | `Lts/Proxies/TrainingAreaBaseOC/` | Not in M, not a required dependency | | Lts/Proxies/WarehouseManagement | `Lts/Proxies/WarehouseManagement/` | Not in M, not a required dependency | | Lts/Proxies/WirelessLocationSystem | `Lts/Proxies/WirelessLocationSystem/` | Not in M, not a required dependency | | Lts/Services | `Lts/Services/` | Not in M, not a required dependency | | Lts/Tools | `Lts/Tools/` | Not in M, not a required dependency | | Lts/Viewer | `Lts/Viewer/` | Not in M, not a required dependency | ### 5.2 Excluded Top-Level Modules | Module | Path | Reason for Exclusion | |--------|------|---------------------| | src/AlarmManagement | `src/AlarmManagement/` | Not in M, not a required dependency | | src/ParticipantManagement | `src/ParticipantManagement/` | Not in M, not a required dependency | | src/Viewer | `src/Viewer/` | Not in M, not a required dependency | ### 5.3 Excluded Include Modules All include modules are header-only support files. The following are excluded from runtime/sources packages as they belong to R\S modules: | Module | Path | Reason for Exclusion | |--------|------|---------------------| | include/AlarmManagement | `include/AlarmManagement/` | Belongs to excluded src/AlarmManagement | | include/ArcGIS | `include/ArcGIS/` | Not in M, BUILD_ARCGIS=OFF in release | | include/AreaEffectSimulation | `include/AreaEffectSimulation/` | Not in M, not a required dependency | | include/AssetManagement | `include/AssetManagement/` | Not in M, not a required dependency | | include/AudioVideoManagement | `include/AudioVideoManagement/` | Not in M, not a required dependency | | include/ExerciseEventManagement | `include/ExerciseEventManagement/` | Not in M, not a required dependency | | include/ExerciseManagement | `include/ExerciseManagement/` | Not in M, not a required dependency | | include/GuezNasat | `include/GuezNasat/` | Not in M, not a required dependency | | include/InfrastructureManagement | `include/InfrastructureManagement/` | Not in M, not a required dependency | | include/MarkerManagement | `include/MarkerManagement/` | Not in M, not a required dependency | | include/NotificationManagement | `include/NotificationManagement/` | Not in M, not a required dependency | | include/OperatorManagement | `include/OperatorManagement/` | Not in M, not a required dependency | | include/ParticipantManagement | `include/ParticipantManagement/` | Belongs to excluded src/ParticipantManagement | | include/ProjectDataManagement | `include/ProjectDataManagement/` | Not in M, not a required dependency | | include/ReportManagement | `include/ReportManagement/` | Not in M, not a required dependency | | include/SituationReplay | `include/SituationReplay/` | Not in M, not a required dependency | | include/Viewer | `include/Viewer/` | Belongs to excluded src/Viewer | | include/grantlee | `include/grantlee/` | External dependency, not in M | | include/nglapplication | `include/nglapplication/` | External dependency, not in M | | include/poppler | `include/poppler/` | External dependency, not in M | | include/rti | `include/rti/` | DDS/RTI dependency, excluded with BUILD_RTI=OFF | **Note:** The following include directories ARE included as they support M modules: - `include/Core/` - Core headers used by M modules - `include/GeographicLib/` - Required by Z/src module - `include/Lts/` - Lts Common headers - `include/LtsProjectionWorkstation/` - Used by Lts/Common - `include/LtsScriptTimeline/` - Part of Lts/Common - `include/LtsSession/` - Part of Lts/Common - `include/NGLLogger/` - Required by TetraIF/LogViewLogger - `include/TopicEditorBase/` - Part of Lts/Common --- ## 6. DDS File Exclusions Per the requirement to exclude DDS-dependent files even within allowed directories, the following patterns are excluded via `is_dds_file()` filter: | Pattern | Example Files | Location | |---------|---------------|----------| | `*dds*` (case-insensitive) | `lts_session_data_dds.cpp`, `lts_session_data_dds.h` | `Lts/Common/LtsSession/` | | `*Dds*` directories | `LtsUtilsGuiDds/` | `Lts/Common/` | | `*DDS*` directories | Any DDS-named directories | Throughout source tree | **Implementation:** `is_dds_file()` function in `rpmbuild/make_rpm_ubuntu26.py` returns `True` for any path containing "dds" (case-insensitive), causing these files to be excluded from the sources package. --- ## 7. CTest Inclusion Per prompt section 1 (Entwickler- und Weiterentwicklungsrelease), CTests are explicitly included: | Package | Content | Source | |---------|---------|--------| | qt6-release-ctest-runtime | Test executables from `build/bin/` and `build4/bin/` | Built from tests in M and S\M | | qt6-release-ctest-sources | C++ test sources from `tests/` directory | Test source files for M and S\M modules | **Test executables are located in:** - `build/bin/` - Primary test executables - `build4/bin/` - Secondary test executables **Test sources are located in:** - `tests/` - Root test directory with module-specific subdirectories --- ## 8. Validation Summary ### 8.1 Build Configuration | Setting | Value | Purpose | |---------|-------|---------| | RELEASE_BUILD | ON | Enables release scope filtering in CMakeLists.txt | | BUILD_RTI | OFF | Excludes DDS-dependent modules | | BUILD_ARCGIS | OFF | Excludes ArcGIS dependencies | ### 8.2 CMake Scope Filtering **File:** `Lts/CMakeLists.txt` ```cmake if(RELEASE_BUILD) # For first release: only build Lts/Common and Lts/Proxies/TrainingAreaBase if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Common") NGL_ADD_SUBDIR_GUARDED(Common) endif() if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Proxies/TrainingAreaBase") NGL_ADD_SUBDIR_GUARDED(Proxies/TrainingAreaBase) endif() else() # Full build includes all Lts subdirectories endif() ``` ### 8.3 RPM Script Filtering **File:** `rpmbuild/make_rpm_ubuntu26.py` - `release_dirs = ["TetraIF", "Z/src", "Lts/Common"]` - Primary release scope - `is_dds_file()` - Filters DDS-related files within allowed directories - `copy_src_dir_to_dest_dir()` - Applies filtering during source copy ### 8.4 Package Contents Verification All 5 DEB packages verified to contain: - ✅ No modules from R\S - ✅ No DDS-related files - ✅ Correct binaries and libraries (runtime package) - ✅ Correct source files (sources package) - ✅ Test executables (ctest-runtime package) - ✅ Test sources (ctest-sources package) - ✅ Build pipeline scripts (build-pipeline package) --- ## 9. DEB- und CI-Anforderungen Compliance | Requirement | Status | Implementation | |-------------|--------|----------------| | Release-Scope verwenden | ✅ | `release_dirs = ["TetraIF", "Z/src", "Lts/Common"]` + TrainingAreaBase | | Docker-Image mit new_docker_build.sh | ✅ | `--build-prebuilt-image --docker-image legatus-qt6:1.0` | | Pipeline im Docker-Container ausführen | ✅ | `--run-jenkins-builder` flag in new_docker_build.sh | | RPM-Erzeugung über make_rpm_ubuntu26.py | ✅ | Called from Jenkins pipeline script | | Ausschließlich Module aus S bauen | ✅ | CMake RELEASE_BUILD filtering + RPM script filtering | | Keine R\S Module in RPMs | ✅ | Verified via dpkg-deb --contents | | Reproduzierbare Ubuntu-26-RPMs | ✅ | Docker-based build ensures reproducibility | | CTests bauen, ausführen, paketieren | ✅ | ctest-runtime and ctest-sources packages | | DDS-Dateien ausschließen | ✅ | is_dds_file() filter in copy_src_dir_to_dest_dir() | --- ## 10. File References ### 10.1 Key Configuration Files | File | Purpose | |------|---------| | `Lts/CMakeLists.txt` | RELEASE_BUILD conditional for Lts subdirectories | | `CMakeLists.txt` (root) | Main CMake configuration with module inclusion | | `new_docker_build.sh` | Docker build orchestration | | `jenkins-ci-rme/release-16-10-2026.sh` | Jenkins pipeline script | | `rpmbuild/make_rpm_ubuntu26.py` | DEB package generation | ### 10.2 Dependency Justification Files | Dependency | File Reference | Line Numbers | |------------|----------------|--------------| | TrainingAreaBase → TetraIF/CoPrtCnv | `Lts/CMakeLists.txt` | 17-21 | | GeographicLib → Z/src | `Z/src/CMakeLists.txt` | (verified in build) | | NGLLogger → TetraIF/LogView | `TetraIF/LogView/CMakeLists.txt` | (verified in build) | --- ## 12. Reproduction Command Sequence To reproduce the release build, execute the following commands in order: ```bash # 1. Navigate to repository root cd /home/torsten/sandbox/qt6-migration-pipeline # 2. Ensure correct branch is checked out git checkout story/release-at-16-oct-2026 # 3. Build the Docker image (legatus-qt6:1.0) cd qt-migration-legatus/qt6-after/qt6-migrated-legatus ./new_docker_build.sh --build-prebuilt-image --docker-image legatus-qt6:1.0 # 4. Run the Jenkins pipeline inside the Docker container ./new_docker_build.sh \ --use-prebuilt-image \ --docker-image legatus-qt6:1.0 \ --run-jenkins-builder \ --package-output-dir /home/torsten/sandbox/qt6-migration-pipeline/rpms/guez/26.04 # 5. Verify generated DEB packages cd /home/torsten/sandbox/qt6-migration-pipeline ls -lh rpms/guez/26.04/*.deb # 6. Validate package contents (no R\S modules, no DDS files) dpkg-deb --contents rpms/guez/26.04/qt6-release-runtime_*.deb | grep -E "(TetraIF|Z/src|Lts/Common|Lts/Proxies/TrainingAreaBase)" dpkg-deb --contents rpms/guez/26.04/qt6-release-sources_*.deb | grep -i dds # Should return nothing dpkg-deb --contents rpms/guez/26.04/qt6-release-ctest-runtime_*.deb | head -20 dpkg-deb --contents rpms/guez/26.04/qt6-release-ctest-sources_*.deb | head -20 dpkg-deb --contents rpms/guez/26.04/qt6-release-build-pipeline_*.deb | head -20 # 7. Verify no excluded modules in runtime package dpkg-deb --contents rpms/guez/26.04/qt6-release-runtime_*.deb | grep -E "(Lts/Application|Lts/DDS|Lts/Tools|Lts/Viewer|src/AlarmManagement)" # Should return nothing ``` ### Expected Output **Step 5:** Should list 5 DEB packages: - `qt6-release-runtime_*.deb` (~1.1 MB) - `qt6-release-sources_*.deb` (~1.5 MB) - `qt6-release-ctest-runtime_*.deb` (~38 KB) - `qt6-release-ctest-sources_*.deb` (~19 KB) - `qt6-release-build-pipeline_*.deb` (~28 KB) **Step 6:** - Runtime package shows only TetraIF, Z/src, Lts/Common, Lts/Proxies/TrainingAreaBase content - Sources package grep for "dds" returns nothing (case-insensitive filter working) - CTest packages show test executables and sources **Step 7:** Should return nothing (no excluded modules present) --- ## 13. Conclusion This scope audit confirms that: 1. **R** (all modules) has been fully enumerated 2. **M** (released modules) is exactly {TetraIF, Z/src, Lts/Common} 3. **S** (release scope) = M + {Lts/Proxies/TrainingAreaBase} 4. **R\S** (excluded modules) are documented and excluded from all packages 5. Each dependency in **S\M** is justified with concrete file references 6. DDS files are excluded even within allowed directories 7. CTests are included as required for developer release 8. All EB- und CI-Anforderungen are satisfied **Status:** ✅ VALIDATED