Files
qt6-migration-pipeline/prompts/merge-projects-application-tools-viewer-validation.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

28 KiB
Raw Permalink Blame History

Final report — merge feature/qt6-migration-basis-modules-merge-viewer-validation into feature/migrate-lts-projects-and-application (+ cherry-pick 5501d1e50, + tools containment)

Status: COMPLETE — all 3 validation runs done (no merge regressions found); merge commit 593c221d2 created and verified. Not pushed (per prompt).

Commits on result branch feature/qt6-migration-projects-app-tools-viewer-validation

Commit Kind Author Signed
b2e787a70 cherry-pick of 5501d1e50 (bugfix/dds-fix-pre-existing-errors) Torsten Wierschin (original author preserved) yes — see signature nuance below
593c221d2 merge of 9c1ac7cbe (theirs), parents b2e787a70 + 9c1ac7cbe berrux_dev berrux.kana@axilinx.com (user, sole author and committer) yes — explicit git commit -S, verifies G (ED25519, berrux.kana@axilinx.com); message exactly 2 lines, no attribution lines
  • Base: origin/feature/migrate-lts-projects-and-application = b18844a20
  • Tools containment: 2b8f3f02c (feature/migrate-lts-tools-d-and-l) is an ancestor of b18844a20 → all LTS Tools D/L content already in the base; no merge of the tools branch needed (verified pre-start)
  • Cherry-pick supersession: 5501d1e50 ≡ 4223ca2ff (theirs-side viewer-val copy): same author/subject; patches byte-identical except include/ → .forward-declarations/include/ path prefix; BUILD_STATUS_REPORT.md byte-identical on both sides; service file Lts/Services/ParticipantManagement/ppm_types.h converges to identical content → auto-merged

Cherry-pick handling (step-by-step evidence)

  1. Cherry-picked first onto a clean projects base (b18844a20) in a throwaway worktree — applied cleanly, 0 conflicts (40 files: 38 stub headers + BUILD_STATUS_REPORT.md + Lts/Services/ParticipantManagement/ppm_types.h)
  2. Original author preserved (Torsten Wierschin); Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> line dropped; cherry-pick ref line (cherry picked from commit 5501d1e5019f116ef4700912e6a582891dd5103b) kept
  3. Signed via git cherry-pick -S (repo commit.gpgsign=false); commit message subject unchanged: Qt6 Migration: Update stub headers to include generated files
  4. Signature nuance: at commit time the verification showed U (No principal matched) because gpg.ssh.allowedsignersfile points at the working-tree file ci/allowed_signers, which on the projects side does not yet contain the signer's ED25519 key (it is added by viewer-val's e748e82c8). After the merge, the file contains the key and git verify-commit b2e787a70 re-verifies G (cryptographic signature was Good in both states — the U was only a principal-matching artifact of the pre-merge file content)

Conflict resolution

24 UD (modify/delete) stub conflicts — all resolved as deletions

Theirs (viewer-val) relocated all include/*/*_dtc.h / pdm_enums.hpp stubs to .forward-declarations/include/ (commit 4223ca2ff). Our side (cherry-pick) modified them at the old location. Git auto-merged rename+modify for the 14 files whose cherry-pick modification matched the rename target; the remaining 24 raised UD conflicts.

For each of the 24, content check: git show :0:<file> (cherry-pick content) vs the already-relocated .forward-declarations/include/<file> content at theirs HEAD → 24/24 MATCH → git rm (keep deletion).

Deviation from prompt prediction (honestly documented): the prompt predicted "14 non-relocated files stay at old include/ location". Actual: all 38 cherry-pick stub files are deleted at the old location; the 14 that the prompt expected to stay were auto-merged into .forward-declarations/include/ by git's rename tracking (rename on theirs + modify on ours = no conflict). Final state is the canonical one: 0 stub files under include/, all 38 present under .forward-declarations/include/ with content verified identical to the cherry-pick content (38/38).

The 24 resolved files (all under qt6-after/qt6-migrated-legatus/include/): AlarmManagement/alm_dtc.h, AreaEffectSimulation/aes_dtc.h, AssetManagement/asm_dtc.h, AudioVideoManagement/avm_dtc.h, Buildings/bld_dtc.h, CentralEffectSimulation/ces_dtc.h, ComponentMonitor/cmo_dtc.h, Core/core_dtc.h, EffectShowClient/esc_dtc.h, EffectShowManagement/esm_dtc.h, Evaluations/evl_dtc.h, ExerciseManagement/exm_dtc.h, GuezIedManagement/gim_dtc.h, GuezNasat/gna_dtc.h, NotificationManagement/nom_dtc.h, OcSituationServer/oss_dtc.h, ScenarioManagement/scm_dtc.h, SituationReplay/srp_dtc.h, SituationReplayManagement/srm_dtc.h, Skeleton/skl_dtc.h, SoundManagement/som_dtc.h, TrainingAreaBase/tab_dtc.h, TrainingAreaBaseOC/taboc_dtc.h, ProjectDataManagement/pdm_enums.hpp

1 UU — qt6-after/qt6-migrated-legatus/new_docker_build.sh (3 hunks, union per prompt recipe)

Hunk Location Resolution
1 usage text (~line 48) kept ours' --group6–--group11 option lines + theirs' corrected --build-viewer-only line (implies --group5 --codification; ctest runs); dropped ours' stale --no-ctest line (no longer exists in script)
2 export line (~line 898) union: export BUILD_ALL BUILD_RTI BUILD_GRANTLEE BUILD_ARCGIS BUILD_CODIFICATION BUILD_GROUP1 … BUILD_GROUP11 BUILD_VIEWER_ONLY RUN_CTEST TESTS_ONLY INTEGRATION_TEST USE_PREBUILT_IMAGE BUILD_PREBUILT_IMAGE DELETE_PREBUILT_IMAGE DOCKER_IMAGE CMAKE_BUILD_FLAGS
3 log_group calls (~line 1053) theirs' Group 3/4/5 labels + ours' Group 7–11; added log_group "Build Group 6 (LTS Tools)" "$BUILD_GROUP6" — text-only consistency fix (Group 6 was built but not logged), recorded here

Post-resolution script checks (all passed): bash -n clean; no conflict markers; GROUP3 = 179 service targets incl. PDM block; GROUP4 single invocation with 3 DDS test targets; GROUP5 four-way split (BUILD_ARCGIS × BUILD_VIEWER_ONLY); GROUP6–11 six arrays with 6 target sets; 11 run_build_group calls; 11 × 3 container default values; 11 -e BUILD_GROUP* passthroughs (+ -e BUILD_ARCGIS at line 1277); viewer-only block present; prebuilt-image name ×6; --help renders all options; unknown option → exit 1; only 4 historical docker_build.sh comments remain (0 functional refs).

Legacy comparison audit (qt5-before/qt5-legatus-legacy)

new_docker_build.sh has no legacy counterpart (pipeline-new script; legacy build entry point was docker_build.sh, deleted on ours side and staying deleted — confirmed absent at merge HEAD). Audit category for the resolved file: build/merge-union only — all 3 hunks are union/label changes to the build orchestration; no Qt5/Qt6 or rtiddsgen semantic changes in this file. (The other 24 conflicted files are stub-header deletions; their content is byte-identical to the canonical relocated copies and was already covered by the prior migration audits in the branch histories.)

Files changed beyond the conflicted set

All other merge files auto-merged (per dry run): tests/CMakeLists.txt (GLOB of test_*.cpp — 34 tool test files from projects side auto-register; both sides' existing registrations structurally intact), BUILD_STATUS_REPORT.md (cherry-pick ≡ theirs-side copy, byte-identical), Lts/Services/ParticipantManagement/ppm_types.h (convergent content), GROUP6–11 CMake/target plumbing from projects side, GROUP3/4/5/codification/prebuilt plumbing from viewer-val side. No files added vs the cherry-pick base beyond the merge's auto-merged theirs-side additions. Deletion sweep: git diff --diff-filter=A <merge-base> HEAD checked — merge adds no files vs ours side beyond theirs-side additions already accounted for; docker_build.sh stays deleted; LogViewer preserved (31 files under Lts/Tools/LogViewer/ at merge HEAD = merge base = both pre-merge heads — unchanged by the merge; GROUP6 target present).

Folded-in base-state fixes (not merge conflicts — pre-existing defects that blocked the mandatory run-2 ArcGIS-ON path, fixed per the prompt's "fix or report as a blocker" and folded into the merge commit, cf. the prior merge's 23 folded-in fixes): 9 files, all in the ArcGIS-only advancedSymbology module / its CMake, none touched by either branch since the merge base:

  • cmake/FindArcGIS.cmake (APPEND vs overwrite of INTERFACE_INCLUDE_DIRECTORIES)
  • Lts/Viewer/SituationMap/SymbologyImpl/base_symbol_model.{h,cpp}
  • Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor.h
  • Lts/Viewer/SituationMap/SymbologyImpl/symbol_dictionary_impl.{h,cpp}
  • Lts/Viewer/SituationMap/Symbology/symbol_dictionary.cpp
  • Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor_app6d.cpp
  • Lts/Viewer/SituationMap/SymbologyImpl/esri_dictionary_processor_mil2525d.cpp

Each is a mechanical Qt5→Qt6 / SDK include / CMake fix (documented per-file in the Run-2 section above). The one remaining base-state defect (TaskWatcher removed from ArcGIS SDK 300.0.0) is a semantic redesign and is reported as a blocker, not fixed.

Qt5 references

No active Qt5 references introduced by the merge. All Qt5 mentions in the merged tree are the previously-verified benign class: comments in root CMakeLists.txt (stale "fallback to Qt5" comment — no find_package(Qt5…) exists anywhere), the qt5compat aqtinstall package name (= Qt6 Qt5Compat module) in new_docker_build.sh, "Qt6 only – no Qt5 fallback" in cmake/FindKDReports.cmake, and the allowed compat shims QT5_WRAP_UI/QT5_ADD_RESOURCES/QT5_WRAP_CPP/QT5_ADD_BIG_RESOURCES in cmake/NGLMacros.cmake.

CTest registration union

  • Run 1: 614 registered — 584 Passed, 30 Not Run (pre-existing class: executables only built in groups 4/5), 0 Failed, 0 Timeout; the 30 newly registered projects-side tool tests that build in groups 1–3 all Passed.
  • Run 2 (coverage): 615 registered — 577 Passed, 34 Not Run (pre-existing classes, incl. the DdsUnitTestsPlaceholder _smoke/_gtest duplicate registrations and LtsFileDialogTest blocked by the LtsSession link failure), 2 Failed + 2 Timeout = exactly the 4 documented base-state failures, 0 NEW. 34 tool tests from tests/CMakeLists.txt GLOB registered; LtsDataViewTest Passed; LtsFileDialogTest Not Run (blocked by the base-state LtsSession link failure — could not reach its expected Timeout).
  • Run 3 (viewer-only): LtsDataViewTest ran and Passed (1.04s) — 34 registered, 1 Passed, 33 Not Run (pre-existing viewer-only class), 0 Failed, 0 Timeout.
  • Expected base-state first-run failures (from prior FINAL-REPORT, allowed to remain — only NEW failures beyond these count as merge regressions): ddsFunctionTopicTests (deterministic FTS/FTC signal-count defect), bld_bsm_test + taboc_serialtest (hardware waits, Timeout), bld_vwm_test + bld_vwm_xml_test (manual data bldg_7_building_config.xml absent), LtsFileDialogTest (GUI blocks before auto-exit timer, Timeout)

GROUP11 / svcPdmClient classification (run 2)

Projects side blocked GROUP11 (OperatorApplication/thp_viewer/aarApp) on a pre-existing svcPdmClient Qt6 MOC failure (see GROUP10_VALIDATION_RESULTS.md on projects side). Viewer-val side contains the PDM service migration (a41001955, 36f077bce).

Result: svcPdmClient builds successfully — confirmed in run 1 ([100%] Built target svcPdmClient, log merge-pav-run1.log line 94010) and again in run 2's GROUP3 phase. The pre-existing projects-side Qt6 MOC blocker is cleared by the viewer-val PDM service migration (a41001955, 36f077bce) — a merge success, not a regression. GROUP11 application targets (run-2 continuation): OperatorApplication blocked by the base-state LtsSession.so link failure (no own error); aarApp fails on its own base-state stale generated-DDS field names (m_id → id); thp_viewer is not a configured target (ADD_SUBDIRECTORY(THP) commented out — VLC dependency unavailable, pre-existing at merge base).

Docker validation runs

All runs from qt6-after/qt6-migrated-legatus/, repo qt6-after/qt6-migrated-legatus, container build dir build4 (fresh per run — the script does rm -rf build4 at the start of every build; the run-2 continuation reused run-2f's build4 because it ran make/ctest directly inside it), prebuilt image legatus-qt6-prebuilt:latest (KDReports-qt6 2.3.95 only available there).

  1. Run 1 (default groups 1–3): BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest → log merge-pav-run1.log
    • Result: build 100% green (no CMake errors; no compile/link errors — the only "error" log matches are rtiddsgen codegen lines for IDL member names like configError/IedError). KDReports-qt6 found via prebuilt image (Found KDReports-qt6 package config ×4; only the legacy-name KDReports::KDReports stub target created, benign). svcPdmClient builds successfully ([100%] Built target svcPdmClient) — the pre-existing projects-side Qt6 MOC blocker that blocked GROUP11 is cleared by the viewer-val PDM service migration.
    • ctest: 614 tests — 584 Passed, 30 Not Run, 0 Failed, 0 Timeout. The 30 Not Run are the pre-existing class (executables only built in groups 4/5: nglcomp/NGLToolsQtSmoke/nglpdfwidget, 9× dds* (incl. _gtest duplicate registrations), GrantleeParserSmoke, lts_coord_trans_unit_test, aes_crypt_test, utils_test, 7× aesUnitTest*, bld_bsm_test, bld_vwm_test, bld_vwm_xml_test, bld_vwm_math_unit_test, taboc_serialtest, LtsDataViewTest, LtsFileDialogTest). The 30 newly registered projects-side tool tests that build in groups 1–3 all Passed. No NEW failures beyond the documented base-state class.
  2. Run 2 (coverage: groups 4–11 + codification, ArcGIS ON): BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_ARCGIS=ON ./new_docker_build.sh --use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest --group4 --group5 --group6 --group7 --group8 --group9 --group10 --group11 --codification → logs merge-pav-run2*.log
    • Result: GROUP1–4 build 100% green (incl. svcWirelessLocationSystem + wlsJsonClientTest after adding the script's documented --cmake_build_flags "-DBUILD_WLS=ON" — see WLS note below). GROUP5 (ArcGIS branch) surfaced a series of base-state defects in the ArcGIS-only advancedSymbology module (never compiled in this pipeline before — all prior runs were ArcGIS-OFF, where the target is not in the list). Each was a pre-existing defect (no branch touched these files since the merge base), fixed and folded into the merge commit (9 files, listed below); the one irreducible SDK blocker (TaskWatcher) is reported, not fixed. The continuation (GROUP5 minus advancedSymbology + GROUP6–11) classified every remaining failing target as base-state — no merge regression found (full classification below).
      • cmake/FindArcGIS.cmake: SET_PROPERTY ... INTERFACE_INCLUDE_DIRECTORIES overwrote the ArcGIS SDK include dir set two lines earlier (identical defect in the legacy Qt5 file) → APPEND PROPERTY. Without this, no ArcGIS header (Symbol.h etc.) resolved for any consumer.
      • SymbologyImpl/{base_symbol_model.h, esri_dictionary_processor.h, symbol_dictionary_impl.h}: missing #include <QUuid> (Qt6: no transitive include; QUuid used as member fields / slot params).
      • SymbologyImpl/esri_dictionary_processor.h: missing #include <SymbolStyleSearchResult.h> (class exists in SDK 300.0.0; transitive include gone).
      • Symbology/symbol_dictionary.cpp: NGL::INGLLogger &m_logger reference member never initialized (a local LOGGER_T m_logger shadowed it) → initialized in the ctor init-list (codebase idiom).
      • SymbologyImpl/{esri_dictionary_processor_mil2525d.cpp, esri_dictionary_processor_app6d.cpp, base_symbol_model.cpp, symbol_dictionary_impl.cpp}: removed Qt5 APIs — rightRef/leftRef/midRef → right/left/mid; QString::split() now returns QStringList (was bound to QVector<QStringView>), QStringView::split() returns QList<QStringView>; .last().toString() → .last() (QString has no toString() in Qt 6.10, verified against the container header).
    • Remaining base-state blocker (reported, not fixed): Esri::ArcGISRuntime::TaskWatcher was removed from ArcGIS Maps SDK Qt 300.0.0 (TaskWatcher.h absent from the SDK include dir). The module's completion-matching design is built on TaskWatcher::taskId() (QUuid) + isValid(); the new SDK exposes fetchSymbolAsync() → QFuture<Symbol*> and createSwatchAsync() → QFuture<QImage> (no task ID). Migrating this is a semantic redesign (QFuture/QFutureWatcher), not a mechanical one, and it cannot be validated headlessly (needs a live ArcGIS runtime + GUI symbol rendering). Per the prompt's "fix or report as a blocker", this is reported as a base-state blocker, out of scope for this merge. The mechanical fixes above are kept (they are real migration debt required for any future build of the module).
    • WLS note: --group4 requires --cmake_build_flags "-DBUILD_WLS=ON" because the (theirs-side, auto-merged) GROUP4_TARGETS lists svcWirelessLocationSystem/wlsJsonClientTest unconditionally while those CMake targets only exist with BUILD_WLS=ON. This is a pre-existing theirs-side latent defect (present at 9c1ac7cbe; prior viewer-val runs only ever ran group 4 with the flag). The merge preserved theirs' behavior verbatim; run 2 was executed with the flag, per the script's own documented usage.
    • Continuation (same container/mounts/build dir, script's exact make+ctest): to still validate the merge's actual scope past the blocked advancedSymbology, a continuation ran make -j8 -k over the GROUP5 (minus advancedSymbology) + GROUP6–11 target lists, then ctest --test-dir . --output-on-failure. (GROUP10/11 do not depend on advancedSymbology/ArcGIS — the only ArcGIS/BUILD_ARCGIS consumers in Lts/ are CentralEffectSimulation and Symbology, neither in the GROUP10/11 target set.) Log: merge-pav-run2-continue.log (MAKE_STATUS=2 CTEST_STATUS=8).
    • ctest (615 tests): 577 Passed, 34 Not Run, 2 Failed, 2 Timeout — the 2+2 are EXACTLY the documented base-state first-run failures (bld_vwm_test 0.04s Failed, bld_vwm_xml_test 0.02s Failed — manual data absent; bld_bsm_test 1500s Timeout, taboc_serialtest 1500.01s Timeout — hardware waits). No NEW ctest regressions. LtsDataViewTest built and Passed (not in the Not Run list). The 34 Not Run are the pre-existing classes: nglcomp_test/NGLToolsQtSmoke/test_nglpdfwidget (executables never built), 9× dds* incl. 3 _smoke + 3 _gtest duplicate registrations (Lts/DDS/DdsUnitTestsPlaceholder registers same-named tests against never-built _smoke/_gtest executables — base-state placeholder quirk, same class as run 1), GrantleeParserSmoke, lts_coord_trans_unit_test, aes_crypt_test, utils_test, 7× aesUnitTest*, bld_vwm_math_unit_test, LtsFileDialogTest (blocked by the LtsSession link failure below), 7× LtsWidgetsQt6.*, exmDtUnitTest/scmDtUnitTest.
    • Build-failure classification (make, groups 5–11): every failing target is a BASE-STATE defect — per-file git diff --name-only fd3e5e838..{b18844a20,9c1ac7cbe} check shows 0 of the failing files touched by either branch since the merge base; none is a merge regression. Groups of base-state defects:
      1. LtsSession.so link failure (undefined LtsSession::TopicLockHandler::*, TopicLockHanderData::*, Core::Interface::Ftc::create) → cascades to Splash, OperatorApplication, LtsFileDialog, LtsFileDialogTest (no own errors). Root cause: Lts/Common/LtsSession/lts_session_lock_handler.cpp is an empty-namespace stub (11 lines, "STUB implementations – RTI DDS not available") while the header declares a full class — commit b1ff11043 "LtsSession: STUB-Entfernung" predates the merge base; the stub only links with BUILD_RTI=OFF (its intended mode), but the pipeline always runs BUILD_RTI=ON. Additionally Core::Interface::Ftc::create (generated Core client) is not linked. Reported as a base-state blocker (fixing = porting the 290-line legacy Qt5 implementation + wiring the generated Core client — out of merge scope; silently stubbing the methods would hide runtime behavior).
      2. Qt6 API debt in tool sources (never compiled in the pipeline): LogViewer (Qt::TextColorRole → Qt::ForegroundRole, QtWidgets/QAction → QtGui/QAction, QString::SkipEmptyParts → Qt::SkipEmptyParts), ProjectSettingsEditor + AdlerWebSocketSimulator (QtWidgets/QAction), qledline (QHBoxLayout::setMargin → setContentsMargins) → cascades to displayPanelSimulator.
      3. Stale generated-DDS (rtiddsgen 7.7.0) field/API names: ddsview (m_description → description), aarApp (m_id → id), ParticipantDataGenerator (omg::types::optional<int> not callable; ErrorConfigSelfTest enum member missing), tDataSampleGenerator/tDataSampleReceiver (optional/std::string wrapper APIs).
      4. CnrProxyTester: mainwindow.ui absent from the source dir (autouic fails) — base-state missing file.
      5. 4 GROUP10 plugins (ProjectEtsPlugin/ProjectAhtcPlugin/ProjectQatarPlugin/ProjectL400P2Plugin): PRE_BUILD LtsAppDescriptorChecker (macro NGL_TEST_APPS_JSON) fails: resources/apps.json references IIDs (e.g. tln.view) with no matching *_gui_plugin.h under Lts/Plugins/ — the EventTimelineClassic (tln.view) plugin was removed pre-merge-base (commit 92ad7d468 "remove all unneeded module listed from Niklas"); apps.json still references it. Identical at both pre-merge branch heads (not changed by the merge). Note: this contradicts the projects-side GROUP10_VALIDATION_RESULTS.md claim "all 9 built" (same tree content at b18844a20; that run's conditions must have differed).
      6. 16× "No rule to make target" (target absent from the generated Makefile — CMake wiring, not compile errors): 5 GROUP10 plugins (ProjectGuezPlugin, ProjectQatarMOUTPlugin, ProjectLegatusPlugin, ProjectDemoTabletPlugin, ProjectComMasterPlugin) — their CMakeLists call NGL_COMPILE_RESOURCES whose Qt6 path ends in return() inside a macro(), which CMake treats as return-from-current-CMakeLists → NGL_ADD_LIBRARY and everything after is silently skipped, so the target is never created (verified via cmake --trace-source; NGL_COMPILE_RESOURCES unchanged since merge base; the 4 working plugins use NGL_ADD_BIG_RESOURCES instead); thp_viewer (# ADD_SUBDIRECTORY(THP) # Disabled: VLC dependency not available in Lts/Application/CMakeLists.txt, pre-MB); videoimport (#ADD_SUBDIRECTORY(VideoImport) commented, pre-MB); AsmWorkstationCertifier (if(BOTAN_FOUND) — botan2 dev package absent from the prebuilt image); and 8 GROUP7/9 script-array name mismatches (projects-side latent defect, same class as the WLS flag issue): QLedLine→qledline, QLedMatrix→qledmatrix, Times→ctime/stime, TopicDiscover→topicdiscover(+topicdiscoverexe), VapixConfig→vapixconfig, SqlBrowser→sqlbrowser, TextEditorTest→textEditorTest, TrajectoryWidget→TrajectoryShader (the real lowercase targets exist; e.g. qledline has its own base-state compile failure above).
    • GROUP11 / application classification: svcPdmClient builds (run 1 + run 2 GROUP3) — the projects-side GROUP11 blocker is cleared (see section above). OperatorApplication and aarApp do not build: OperatorApplication is blocked by the LtsSession.so link cascade (base-state, item 1); aarApp fails compilation on its own base-state stale-DDS field names (item 3). thp_viewer is not a configured target (VLC-disabled subdir, base-state).
  3. Run 3 (viewer-only): BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --build-viewer-only --use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest → log merge-pav-run3.log
    • Result: viewer group 100% built (situationMapCommon, advancedSymbologyXML, LtsDataView, LtsDataViewTest, LtsReportDisplay — viewer-only implies --group5 --codification, ArcGIS OFF, so the advancedSymbology/TaskWatcher blocker is not on this path). ctest (34 tests): 1 Passed — LtsDataViewTest (1.04s) — the mandatory requirement is met; 33 Not Run (the pre-existing viewer-only class: those test executables are only built in the other groups — dds placeholder dupes, bld_* hardware tests, LtsFileDialogTest (blocked by the base-state LtsSession link failure), migration_tests_NOT_BUILT); 0 Failed, 0 Timeout → no new regressions. Script exit 8 is ctest's "Not Run present" status, not a build failure.

Jenkins / CI policy

  • Signature gate (ci/check_pr_policies.py): pre-existing blocker — 8 unsigned/mismatched (U) ancestor commits on the projects side since merge base fd3e5e838. Both new commits on this branch verify G at branch head (cherry-pick nuance above).
  • Jenkins jenkins/Jenkinsfile unchanged by this merge.

Confirmations

  • Tools containment: 2b8f3f02c ancestor of b18844a20 (no tools-branch merge needed)
  • Cherry-pick: clean apply, 24/24 content check before git rm, all 38 stubs at canonical .forward-declarations/ location (deviation documented)
  • docker_build.sh stays deleted (absent at HEAD; only new_docker_build.sh present)
  • LogViewer: 31 files preserved (identical count at merge base / both pre-merge heads / merge HEAD), GROUP6 target present
  • Both BUILD_STATUS_REPORT.md and GROUP10_VALIDATION_RESULTS.md present in merged tree
  • Merge commit 593c221d2: parents b2e787a70+9c1ac7cbe, sole author/committer berrux_dev <berrux.kana@axilinx.com>, 2-line message, no attribution lines, git verify-commit = Good
  • Working tree clean after merge commit; dry-run worktree removed; not pushed

Remaining blockers / risks

  • Signature gate (pre-existing, projects side): 8 unsigned/mismatched (U) ancestor commits since merge base fd3e5e838. Both new commits on this branch verify G at branch head.
  • advancedSymbology ArcGIS-ON build (base-state blocker, reported): Esri::ArcGISRuntime::TaskWatcher removed from ArcGIS Maps SDK Qt 300.0.0 → the completion-matching design needs a semantic QFuture/QFutureWatcher redesign, not a mechanical migration; not verifiable headless. The 9 mechanical fixes are folded into the merge (they are real migration debt for any future build of the module).
  • LtsSession.so link failure (base-state blocker, reported): empty-namespace lts_session_lock_handler.cpp stub (pre-MB) + missing Core::Interface::Ftc::create → blocks Splash, OperatorApplication, LtsFileDialog, LtsFileDialogTest under the pipeline's BUILD_RTI=ON. Fixing = porting the 290-line legacy Qt5 implementation + wiring the generated Core client (out of merge scope).
  • Base-state tool/app build defects (groups 4–11, never compiled in the pipeline before): Qt6 API debt (LogViewer, ProjectSettingsEditor, AdlerWebSocketSimulator, qledline), stale generated-DDS naming (ddsview, aarApp, ParticipantDataGenerator, tDataSampleGenerator/Receiver), missing CnrProxyTester/mainwindow.ui, apps.json IIDs without matching *_gui_plugin.h (4 GROUP10 plugins), and 16 missing/mismatched make targets (5 plugin CMakeLists return()-in-macro, thp_viewer/videoimport subdirs commented, AsmWorkstationCertifier needs botan2, 8 GROUP7/9 array-name mismatches). None is a merge regression; none blocks the merge's validated scope (services, viewer core, GROUP1–5 non-ArcGIS).
  • Documented base-state first-run ctest failures (allowed to remain): bld_vwm_test/bld_vwm_xml_test (Failed, manual data absent), bld_bsm_test/taboc_serialtest (Timeout, hardware), ddsFunctionTopicTests (deterministic FTS/FTC defect — Not Run here due to the placeholder _smoke registration), LtsFileDialogTest (Not Run here — blocked by the LtsSession link failure above).
  • GROUP11/svcPdmClient: cleared — svcPdmClient builds (the projects-side MOC blocker is removed by the viewer-val PDM migration). Application targets: OperatorApplication blocked by the LtsSession cascade (base-state), aarApp fails on base-state stale-DDS naming, thp_viewer not configured (VLC).
  • Run-specific blockers: none beyond the above.