Files
qt6-migration-pipeline/SCOPE_AUDIT.md
T
torsten 8b571031f4 Adds sectio: reproduction command sequence for release first
Entire-Checkpoint: 01M4T67MGKEVVY0QNYK0ZF9SZT
2026-10-13 08:31:58 +00:00

425 lines
19 KiB
Markdown

# 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