135 lines
28 KiB
Markdown
135 lines
28 KiB
Markdown
# 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.
|