Files
qt6-migration-pipeline/prompts/merge-lts-viewer-validation-into-basis-modules-merge.FINAL-REPORT.md
berrux-dev 4911aa6d80
Qt6 Migration CI / migrate (push) Has been cancelled
Merge Prompt and Report
2026-09-28 08:34:13 +02:00

117 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Final report — merge `lts-viewer-validation-testing-phase` into `qt6-migration-basis-modules-merge`
**Status: VALIDATED** (builds 100% green in all 3 Docker runs; runs 1–2 ctest fully green; run 3 ctest 558/585 with the 6 non-passing tests all classified as base-state first-run results, documented below with evidence). Not pushed.
## Merge commit
- Hash: `9c1ac7cbef95efbe2bdc68d1b9c067a30493846d` (`9c1ac7cbe`)
- Branch: `feature/qt6-migration-basis-modules-merge-viewer-validation`
- Parents: `36f077bce` (ours, `feature/qt6-migration-basis-modules-merge`) + `c664611b8` (theirs, `feature/lts-viewer-validation-testing-phase`)
- Author = committer: `berrux_dev <berrux.kana@axilinx.com>`, single author, no attribution lines
- Signed: `Good "git" signature` (SSH ED25519, `SHA256:5vtoTt8IqQ8+OcyNHbg8w4aGQD8H0IvoGM3PYgD9RYU`), created via explicit `git commit -S` (repo has `commit.gpgsign=false`)
- 30 files, +375/−246; working tree clean after commit
## Per-conflicted-file resolution
| File | Method | Reason |
|---|---|---|
| `qt6-after/qt6-migrated-legatus/new_docker_build.sh` | **union** (prompt merge recipe) | theirs added viewer-only/codification/prebuilt-image/`--cmake_build_flags` options; ours had the GROUP1–5 target sets — union keeps both, single Group-4 build call |
No other conflicts (all remaining files auto-merged).
## `new_docker_build.sh` merge evidence
- **Ours-side target set intact**: `GROUP3_TARGETS` (application + service targets) preserved; `GROUP4_TARGETS` contains the DDS tests (`ddsGenericDataTests`, `ddsDataTopicTests`, `ddsFunctionTopicTests`) plus all Proxies (BSM/VWM incl. `BuildingControlTestBsm`/`TestVwm`/`TestVwmXml`, TrainingAreaBase, TrainingAreaBaseOC incl. `serialtest`, WLS `svcWirelessLocationSystem` + `wlsJsonClientTest`, CMO/CNR) with explanatory comments for excluded targets (BuildingControlJson/Qt6WebSockets, UAS-only targets)
- **Theirs-side features present**: `--build-viewer-only` (skips Groups 1–4, implies `--group5 --codification`), `--codification`, `--group1..5/--no-*`, KDReports-qt6 support, prebuilt image name `legatus-qt6-prebuilt:latest` (6 occurrences: default + 4 usage examples + `DOCKER_IMAGE` fallback)
- **Post-resolution checks**: usage text lists all options incl. `--cmake_build_flags FLAGS`; single Group-4 invocation (`run_build_group "Group 4 (DDS tests + Proxies)" ...`); `--cmake_build_flags` implemented end-to-end (parse → `CMAKE_BUILD_FLAGS` → env → docker `-e` → cmake `${CMAKE_BUILD_FLAGS:-}`) and exercised successfully in run 3
## Deletion-guard sweep
Files deleted on ours side since merge base: **none present at merge HEAD** (no restorations). Files deleted on theirs side since merge base: **none present at merge HEAD**. Deleted on both sides: **0**. (Merge adds zero files vs ours: `git diff --diff-filter=A HEAD^1 HEAD` empty.)
## Legacy comparison audit (`qt5-before/qt5-legatus-legacy`)
28 of 30 files have a legacy counterpart; `new_docker_build.sh` and `cmake/FindKDReports.cmake` are pipeline-new (no counterpart). Hunk counts (legacy → merged, incl. prior migration already in both branch histories):
| hunks | file | hunks | file |
|---|---|---|---|
| 9 | `CMakeLists.txt` (root) | 2 | `BSM/bsm_telegrams_base.cpp` |
| 3 | `LtsSession/CMakeLists.txt` | 3 | `BSM/bsm_telegrams_direct_fire.cpp` |
| 2 | `LtsSession/lts_session.cpp` | 3 | `WLS/ism_handler.cpp` |
| 2 | `LtsSession/lts_session_data_dds.cpp` | 12 | `WLS/web_socket_handler.cpp` |
| 1 | `LtsSession/lts_session_data_dds.h` | 16 | `WLS/wls_handler.cpp` |
| 1 | `DdsUnitTests/function_topic_tests.h` | 15 | `WLS/wls_participant.cpp` |
| 2 | `BSM/CMakeLists.txt` | 3 | `WLS/wls_participant_handler.cpp` |
| 3 | `BSM/bsm_api.cpp` | 1 | `Viewer/CMakeLists.txt` |
| 6 | `BSM/bsm_socket.cpp` | 3 | `LtsDataView/CMakeLists.txt` |
| 15 | `BSM/bsm_socket_handler.cpp` | 2 | `LtsDataView/test.cpp` |
| 2 | `LtsFileDialog/CMakeLists.txt` | 7 | `LtsFileDialog/lts_dialog_model_file.cpp` |
| 2 | `LtsFileDialog/lts_file_dialog.cpp` | 12 | `LtsFileDialog/lts_dialog_model_folder.cpp` |
| 8 | `LtsFileDialog/lts_file_dialog_widget.cpp` | 2 | `LtsFileDialog/lts_file_dialog_widget.h` |
| 2 | `LtsFileDialog/test.cpp` | 23 | `cmake/NGLMacros.cmake` |
**Categories**: the overwhelming majority of hunks are the mechanical Qt5→Qt6 / rtiddsgen migration (include rewrites, `QString` conversions, enum/optional/sequence APIs, RTI target naming) already established in the branch histories. **Semantic-change hunks — all in the folded-in fixes, each justified:**
1. `FileManagement::Interface::DataModification` → global `DataModification` (generated code removed the qualifier; invalid qualifier is a hard error)
2. `setDeleted(true)` / accessor calls on generated types → plain member access (`data.isDeleted = true`, `data.id`, `fl.name`…) — generated RTI IDL types are plain structs (established pattern, cf. commented legacy code in `ism_tests.cpp`)
3. `Folder::mainFolder()` / `FileManagement::toInt` → `static_cast<int>(path[0])` (legacy API gone; generated `Folder` carries the main folder in `path[0]`)
4. Dtc bulk-iteration overload removed → per-item `std::function<bool(const T&)>` with explicit type (disambiguates void/bool overloads) and `return false` (bool overload = iterateUntil: true would stop iteration)
5. Qt6 removed implicit conversions → `QString::fromStdString`, `QVariant` from integral types, `arg(static_cast<int>(enum))`
6. `omg::types::optional<T>` has no comparison operators → `!opt.has_value() || opt.value() != x`
7. `LtsSession::PartitionType` deleted → `IDL::PartitionType` (matches `DdsConnector::getPartitionType()` return type); dead `toIdlPartitionType`/`toPartitionType` converters removed
8. `lts_session.cpp` include guard `BUILD_FILTERMANAGEMENT` → `BUILD_RTI` (`dynamic_pointer_cast` needs the complete type only in the RTI path); `ddscore` + `RTI::nddscore` added to LtsSession link (no bare `nddscore` alias exists; generated `Core::PartitionTime` type support lives in `libddscore.so`)
9. Missing includes surfaced by first builds: `<NGLLogger/NGLLoggerBootstrap.h>` (WLS×5, BSM×5), `<TrainingAreaBase/logger.h>` (BSM), `NGL::INGLLogger& m_logger` member (`function_topic_tests.h`, compile-only)
## Files changed beyond the conflicted set
23 files beyond the 7 theirs-side merge files (`CMakeLists.txt` root, `Viewer/CMakeLists.txt`, `LtsDataView/{CMakeLists.txt,test.cpp}`, `FindKDReports.cmake`, `NGLMacros.cmake`, `new_docker_build.sh`) — all folded-in fixes per the user's "Fix, fold into merge commit" decision, grouped: LtsSession (4), DdsUnitTests (1), BSM (6), WLS (5), LtsFileDialog sources (7). Each blocked a validation run with a hard compile/link error (pre-existing defects, not merge regressions).
## CTest registration union
- Run 1: 584 tests. Run 2 (viewer-only): 34 (subset). Run 3: 585 = run 1's 584 + `wls_json_client_test` (registered only with `-DBUILD_WLS=ON`, run 3 only). No loss of registrations; theirs-side additions all present.
- `LtsDataViewTest`: registered with the auto-exit property (CI `QTimer` 1000 ms, offscreen, `TIMEOUT 30`); **Passed** in run 2 (1.04 s) and run 3 (1.13 s) — the theirs-side validation pattern works.
- `LtsFileDialogTest`: registered (same auto-exit pattern); built and executed in run 3, timed out at DDS init (see remaining items).
## Docker and Jenkins CI
- Docker: `new_docker_build.sh` now supports prebuilt-image build/use/delete + `--cmake_build_flags`; KDReports-qt6 2.3.95 only available in the prebuilt image → runs 2/3 used `--use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest` (run 1 used the base `ubuntu:26.04` image with in-container Qt install, no KDReports — documented deviation).
- Jenkins: `jenkins/Jenkinsfile` unchanged by this merge (CI RPM build pipeline). **Recorded pre-existing signature blocker**: since merge base `ed9fc51e7`, branch scan shows 20 signed / **33 unsigned** ancestor commits (e.g. `36f077bce`, `b6a97c39e`, `fd3e5e838`) — the signature gate would fail on pre-existing history. The new merge commit itself verifies **Good** (`%G?` = G).
## Qt5 references
No active Qt5 references. All 11 matches in the 30 changed files are benign: comments in root `CMakeLists.txt` (incl. a stale "fallback to Qt5" comment — no `find_package(Qt5...)` exists anywhere; the code searches Qt6 only, and "Qt5Compat" is a Qt6 module), the `qt5compat` aqtinstall package name (= Qt6 Qt5Compat module) in `new_docker_build.sh`, and "Qt6 only – no Qt5 fallback" in `FindKDReports.cmake`.
## Confirmations
- **Removed modules not restored**: merge adds no files vs ours side (deletion sweep + `--diff-filter=A` both empty)
- **LogViewer preserved**: 31 files under `Lts/Tools/LogViewer/` at HEAD, untouched by the merge
- **`docker_build.sh` stayed deleted**: absent from the tree (only `new_docker_build.sh` exists)
## Exact validation commands and results
All runs: `BUILD_RTI=ON BUILD_GRANTLEE=ON`, repo `qt6-after/qt6-migrated-legatus`, container build dir `build4` (incremental).
1. **Run 1** — `./new_docker_build.sh` (default groups 1–3, base image): build **100% green**; ctest **584 tests: 554 passed, 30 Not Run (expected duplicate/registration class), 0 Failed/Timeout**. Grantlee active (`CppTopicGeneratorGrantleeTest` passed). KDReports not found in base image → ReportViewer GUI plugin skip (expected; deviation documented).
2. **Run 2** — `./new_docker_build.sh --build-viewer-only --use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest`: build **100% green**; ctest **34 tests: 1 passed (`LtsDataViewTest`, 1.04 s), 33 Not Run by viewer-only design, 0 Failed/Timeout**. `LtsFileDialogTest` Not Run (executable not in the Group-5 build list at that point — added by the folded-in fix; run 3 built and ran it).
3. **Run 3** — `./new_docker_build.sh --group4 --group5 --codification --use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest --cmake_build_flags "-DUSE_IPO=ON -DUSE_UNITY_BUILD=ON -DGUEZ_MODE=ON -DBUILD_WLS=ON -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/"`: build **100% green** (14 attempts, each fixing one layer: WLS → LtsSessionDataDds compile → ddscore link → lts_session.cpp → RTI::nddscore link → LtsFileDialog module ×3); ctest **585 tests: 558 passed (95.4%), 21 Not Run (expected class), 3 Failed + 3 Timeout** (the 6 items below).
Their-side validation evidence in run 3: `LtsDataViewTest Passed 1.13 s`, `wls_json_client_test Passed 0.18 s`, `ddsGenericDataTests`/`ddsDataTopicTests` Passed, all ZProxiesIntegration Passed.
## Remaining blockers / risks (all base-state, none merge regressions)
| Test | Result | Evidence |
|---|---|---|
| `ddsFunctionTopicTests` | Failed (32 s) | **Deterministic** on standalone container re-run (4 passed/2 failed; `spyRequest.count()` 2 vs 1, `spyReply.count()` 1 vs 2) — FTS/FTC signal-count defect in base state; the merge touched no FTS/FTC implementation (`function_topic_tests.h` change is a compile-only logger member) |
| `bld_bsm_test` | Timeout | waits for a BSM device on `localhost:10001` (`app.exec()` in `bsm_test_main.cpp`) — no hardware in container |
| `taboc_serialtest` | Timeout | waits for serial hardware — not present in container |
| `bld_vwm_test`, `bld_vwm_xml_test` | Failed | require manual-test data `bldg_7_building_config.xml`, which is not in the repo or build tree (manual `.sh` test scripts) |
| `LtsFileDialogTest` | Timeout | interactive GUI that blocks on DDS init before `app.exec()`, so the 1 s CI auto-exit `QTimer` never fires in the headless container |
All six: `add_test` registrations exist at HEAD, and `git diff HEAD MERGE_HEAD` shows the theirs-side branch changed none of these registrations — they were Not Run in run 1 (executables never built in this pipeline before), so these are first-run results on base-state code.
**Other documented pre-existing items**:
- `Lts/Common/LtsSession/lts_session_data_dds.{h,cpp}` stub branch (`#else // !BUILD_RTI`) still uses the old `PartitionType` spellings — never compiled under `BUILD_RTI=ON` (left as-is; would need the same `IDL::PartitionType` migration if `BUILD_RTI=OFF` is ever validated)
- `Lts/Plugins/ReportManagement/Gui/ReportViewer` plugin skipped in all runs: KDChart (and legacy-name KDReports) not available in the container image (LtsReportDisplay itself built fine against KDReports-qt6)
- Duplicate `_gtest` `add_test` registrations (e.g. `ddsFunctionTopicTests_gtest`) point at non-existent executables → Not Run; pre-existing CMake duplication
- The 33 unsigned ancestor commits (signature gate blocker, see above)