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

12 KiB
Raw Blame History

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)