117 lines
12 KiB
Markdown
117 lines
12 KiB
Markdown
# 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)
|