This commit is contained in:
1 parent
11ccc9efcc
commit
4911aa6d80
5 files changed
+1919
No files matched your search
@@ -0,0 +1,502 @@
|
||||
# Strict Qt6 Migration Prompt: Merge of feature/qt6-migration-basis-modules-merge and feature/lts-viewer-validation-testing-phase
|
||||
|
||||
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
|
||||
The only allowed outcome is a merge commit on
|
||||
`feature/qt6-migration-basis-modules-merge-viewer-validation` that contains the full work of
|
||||
both source branches and preserves the legacy code behavior of every migrated file.
|
||||
|
||||
## Required base prompts
|
||||
|
||||
Before making changes, read and apply:
|
||||
|
||||
- ./prompts/combined-migration-subfolder-rti-compact.prompt.md
|
||||
- ./prompts/commit-policy.prompt.md (repository mapping, pre-commit checks, per-repo commits)
|
||||
|
||||
If a base prompt is stricter, follow it. This prompt overrides it only for:
|
||||
|
||||
- build variants: use ON variants only for `BUILD_RTI`/`BUILD_GRANTLEE`, never OFF
|
||||
- commit message format: max 2 lines, single author, no co-author lines (see "Commits")
|
||||
|
||||
## Task
|
||||
|
||||
Merge these two branches and resolve every conflict without changing code behavior:
|
||||
|
||||
- **ours (merge target base):** `feature/qt6-migration-basis-modules-merge`
|
||||
remote tip at prompt writing (2026-09-26): `36f077bce` ("Emit record_replay fromQVariant for plain enums; document PPM MOC exclusion")
|
||||
NOTE: the previous tip `7659b167d` (same subject) was **replaced** by `36f077bce` via
|
||||
force-push (it is not an ancestor of the new tip). The replacement commit absorbed the
|
||||
docker-script unification (deletion of `docker_build.sh`, merged `new_docker_build.sh`).
|
||||
If the local branch still points at `7659b167d`, resync it to
|
||||
`origin/feature/qt6-migration-basis-modules-merge` before starting.
|
||||
- **theirs (branch to merge in):** `feature/lts-viewer-validation-testing-phase`
|
||||
remote tip at prompt writing: `c664611b8` ("Migrates non-ArcGIS built successfully (tbc)")
|
||||
- **merge base:** `ed9fc51e7` ("Migrates ./Lts/Viewer successfully to Qt6")
|
||||
- **result branch:** `feature/qt6-migration-basis-modules-merge-viewer-validation`
|
||||
(does not exist yet at prompt writing; create it from
|
||||
`origin/feature/qt6-migration-basis-modules-merge`)
|
||||
|
||||
All work happens in the repository `./qt-migration-legatus` (it is a separate git
|
||||
repository; never commit its changes into the workspace root or the legacy repository).
|
||||
|
||||
## Branches and trees
|
||||
|
||||
Working repository:
|
||||
|
||||
- `./qt-migration-legatus`
|
||||
|
||||
Trees:
|
||||
|
||||
- Legacy Qt5 source tree (read-only reference, never modify):
|
||||
`./qt-migration-legatus/qt5-before/qt5-legatus-legacy`
|
||||
- Qt6 target tree (the only tree that is modified):
|
||||
`./qt-migration-legatus/qt6-after/qt6-migrated-legatus`
|
||||
|
||||
Before starting:
|
||||
|
||||
1. `git fetch origin` in `./qt-migration-legatus`.
|
||||
2. Verify both remote tips still match the hashes above (`git rev-parse origin/feature/qt6-migration-basis-modules-merge` and `git rev-parse origin/feature/lts-viewer-validation-testing-phase`).
|
||||
3. If either tip moved, recompute the merge base and re-run the dry-run merge (step 3 of the procedure) before resolving anything.
|
||||
4. Verify the working tree of `./qt-migration-legatus` is clean (`git status --short`). It was verified clean on 2026-09-26 (the docker-script unification is committed in `36f077bce`). Do not overwrite uncommitted user changes; if they block safe work, report the blocker.
|
||||
|
||||
## What each side contains
|
||||
|
||||
Understand both sides before resolving anything. The merge must keep the work of BOTH sides.
|
||||
|
||||
**merge-branch side (ours, 49 commits after the merge base, ~1287 files):**
|
||||
|
||||
- the full prior merge of `feature/qt6-migration-basis-modules-services`: complete
|
||||
Qt6/rtiddsgen 7.7 migration of residual Lts services/proxies/plugins, NmeaManagement
|
||||
tests, codegen template include-prefix fixes, Qt6::SerialPort manual IMPORTED target,
|
||||
GROUP4 (DDS tests + Lts/Proxies) and GROUP5 (Lts/Viewer) build configuration
|
||||
- follow-up fixes: stub-header relocation to the approved forward-declarations directories
|
||||
plus `BUILD_STATUS_REPORT.md` (`4223ca2ff`); `ci/allowed_signers` principal format fix
|
||||
(`e748e82c8`); completion of residual service migration + 19 CTest registrations
|
||||
(`a41001955`); record_replay `fromQVariant` for plain enums + PPM MOC exclusion
|
||||
(`36f077bce`, which also absorbed the docker-script unification)
|
||||
- docker-script unification: `new_docker_build.sh` is the **single** validation script —
|
||||
its GROUP3 carries the complete former `docker_build.sh` migrated-service target set
|
||||
(~200 targets incl. per-service tests), the apt-package union, and a single consolidated
|
||||
GROUP4 array (DDS tests + Proxies). `docker_build.sh` is deleted and must stay deleted.
|
||||
|
||||
**viewer-validation side (theirs, 3 commits after the merge base, 7 files, +171/−69):**
|
||||
|
||||
- `fd3e5e838` — `--build-viewer-only` option in `new_docker_build.sh`: skips Groups 1–4,
|
||||
builds Viewer targets only (sets `BUILD_VIEWER_ONLY=ON`, `BUILD_GROUP5=ON`,
|
||||
`BUILD_CODIFICATION=ON`, `RUN_CTEST=ON`). Viewer-only GROUP5 excludes `LtsFileDialog`
|
||||
(it needs Group-4 services `svcExmCommon`/`svcOpmCommon`/`svcFlmCommon`); GROUP5 target
|
||||
lists additionally gain the test executables `LtsDataViewTest`/`LtsFileDialogTest`.
|
||||
Passes `-DBUILD_VIEWER_ONLY` to CMake (new `OPTION(BUILD_VIEWER_ONLY ... OFF)` in the
|
||||
root `CMakeLists.txt`; `Lts/Viewer/CMakeLists.txt` adds `LtsDataView` also when
|
||||
`BUILD_VIEWER_ONLY` is set).
|
||||
- `b6a97c39e` — KDReports detection fix (`cmake/FindKDReports.cmake` rework: apt
|
||||
`libkdreports-dev` first, fallback build from the KDAB GitHub mirror into `/usr/local`)
|
||||
and codification support for viewer-only builds: `--codification/--no-codification`
|
||||
(`BUILD_CODIFICATION`, default OFF, requires KDReports) wired to
|
||||
`-DBUILD_CODIFICATION`; build-parts variables `BUILD_ALL`/`BUILD_SV`/`BUILD_WS`/
|
||||
`BUILD_AAR` (defaults ON) passed to CMake; `;/usr/local` appended to the container
|
||||
`CMAKE_PREFIX_PATH`; KDReports apt/source install block added to the prebuilt-image
|
||||
Dockerfile; DOCKER_IMAGE default block moved after argument parsing and the prebuilt
|
||||
image renamed to `legatus-qt6-prebuilt:latest`.
|
||||
Note: the CMake options `BUILD_CODIFICATION`, `BUILD_SV`, `BUILD_WS`, `BUILD_AAR`
|
||||
already exist on the ours side (root `CMakeLists.txt` + `cmake/NGLMacros.cmake`);
|
||||
theirs only wires them through the docker script.
|
||||
- `c664611b8` — non-ArcGIS viewer build validation: `LtsDataViewTest` auto-exit
|
||||
(`QTimer::singleShot(1000, &app, &QApplication::quit)`) for CI/headless runs,
|
||||
`QT_QPA_PLATFORM=offscreen` test property, unconditional `LtsDataViewTest` link
|
||||
(the `if(QT6_GUI_AVAILABLE)` guard was removed).
|
||||
|
||||
## Known conflict surface (dry run 2026-09-26)
|
||||
|
||||
A dry-run merge (`git worktree` + `git merge --no-commit --no-ff`) found **1 content
|
||||
conflict** and no modify/delete conflicts. Re-run the dry run after the fetch and treat
|
||||
its output as authoritative; the list below is the expected starting point.
|
||||
|
||||
Content conflict (1):
|
||||
|
||||
1. `qt6-after/qt6-migrated-legatus/new_docker_build.sh`
|
||||
|
||||
Auto-merged (theirs-side files, no conflict):
|
||||
|
||||
- `qt6-after/qt6-migrated-legatus/CMakeLists.txt` (+1: `OPTION(BUILD_VIEWER_ONLY ...)`)
|
||||
- `qt6-after/qt6-migrated-legatus/Lts/Viewer/CMakeLists.txt`
|
||||
- `qt6-after/qt6-migrated-legatus/Lts/Viewer/LtsDataView/CMakeLists.txt`
|
||||
- `qt6-after/qt6-migrated-legatus/Lts/Viewer/LtsDataView/test.cpp`
|
||||
- `qt6-after/qt6-migrated-legatus/cmake/FindKDReports.cmake`
|
||||
- `qt6-after/qt6-migrated-legatus/cmake/NGLMacros.cmake`
|
||||
|
||||
## Conflict resolution rules
|
||||
|
||||
These rules exist to guarantee: the merged tree keeps both branches' functionality and no
|
||||
file's behavior deviates from the legacy Qt5 behavior beyond the approved
|
||||
Qt6/C++17/rtiddsgen adaptations.
|
||||
|
||||
General:
|
||||
|
||||
- Resolve semantically, never mechanically. For every conflicted hunk read four versions:
|
||||
the merge-base version, ours, theirs, and the legacy Qt5 equivalent (for
|
||||
`new_docker_build.sh` there is no legacy counterpart — it is pure Qt6 build machinery —
|
||||
so use the merge-base version as the third reference and the merge-base-era
|
||||
`docker_build.sh`/`new_docker_build.sh` pair as context). The resolution must keep both
|
||||
sides' approved adaptations.
|
||||
- Never take `ours` or `theirs` wholesale unless you prove the losing side had no unique
|
||||
changes: `git diff <merge-base>..theirs -- <file>` (or `..ours`) must show nothing that
|
||||
the kept version lacks. Record the proof in the final report.
|
||||
- A merge commit must not drop functionality of either branch: every target, dependency,
|
||||
test registration, docker build option, and code fix present on one side must be present
|
||||
(or superseded by an equivalent) in the merged tree.
|
||||
- No behavior-changing edits beyond the merge itself. No refactoring, no style cleanup, no
|
||||
warning suppression, no new features.
|
||||
|
||||
`new_docker_build.sh` (the single conflict) — required merge recipe:
|
||||
|
||||
Keep from the ours side (none of this may be lost):
|
||||
|
||||
- GROUP3 full migrated-service target set (~200 targets) with per-service tests
|
||||
- `APT_PACKAGES` union (`libboost-dev`, `libqt6sql6-psql`, `qt6-svg-dev`,
|
||||
`qt6-serialport-dev`, `qt6-websockets-dev`, …)
|
||||
- the single consolidated GROUP4 array (DDS tests + Proxies) and the single
|
||||
`run_build_group "Group 4 (DDS tests + Proxies)"` call — theirs removed one of the two
|
||||
legacy Group-4 calls, but the DDS test targets must survive in the merged array
|
||||
- `./new_docker_build.sh` naming in usage text/examples/exit hint, header feature list,
|
||||
and the group log lines (incl. the Group 4/5 `log_group` lines)
|
||||
|
||||
Keep from the theirs side (none of this may be lost):
|
||||
|
||||
- `--codification/--no-codification` flags, `BUILD_CODIFICATION` variable (default OFF),
|
||||
`normalize_on_off`, export, and `-DBUILD_CODIFICATION` in the container cmake call
|
||||
- `--build-viewer-only` flag and `BUILD_VIEWER_ONLY` variable (default OFF): the flag
|
||||
handler (`BUILD_GROUP5=ON`, `BUILD_CODIFICATION=ON`, `RUN_CTEST=ON`), normalize,
|
||||
export, `-DBUILD_VIEWER_ONLY`, and the container-side block that switches Groups 1–4
|
||||
OFF and Group 5 ON before the `run_build_group` calls
|
||||
- `BUILD_ALL`/`BUILD_SV`/`BUILD_WS`/`BUILD_AAR` variables (defaults ON), exports, and the
|
||||
matching `-D` flags in the container cmake call
|
||||
- the DOCKER_IMAGE default block **relocated after argument parsing** and the prebuilt
|
||||
image name `legatus-qt6-prebuilt:latest`; make the usage Defaults/examples consistent
|
||||
with the name used in the logic (do not leave two different prebuilt image names in one
|
||||
script)
|
||||
- the KDReports apt/source install block in `build_prebuilt_image` and the `;/usr/local`
|
||||
suffix in the container `CMAKE_PREFIX_PATH`
|
||||
- the four-way GROUP5 conditional (BUILD_ARCGIS × BUILD_VIEWER_ONLY) including the
|
||||
viewer-only subset (no `LtsFileDialog`) and the `LtsDataViewTest`/`LtsFileDialogTest`
|
||||
test targets
|
||||
|
||||
Known theirs-side inconsistency to fix text-only: the usage line claims
|
||||
`--build-viewer-only … implies --group5 --no-ctest`, but the flag handler sets
|
||||
`RUN_CTEST=ON` (and the branch was validated with ctest running). Keep the handler
|
||||
behavior and correct the usage text to describe the actual behavior. No behavior change.
|
||||
|
||||
Group execution order in the container script: the theirs-side `BUILD_VIEWER_ONLY` block
|
||||
first, then `run_build_group` for Group 1, Group 4 (single call, consolidated array),
|
||||
Group 2, Group 3, Group 5.
|
||||
|
||||
Post-resolution script checks (record in the final report):
|
||||
|
||||
- `bash -n` on the host script and on the extracted container-side script
|
||||
- `--help` renders and lists both `--build-viewer-only` and the group options; an
|
||||
unknown option is still rejected
|
||||
- target-set check: every one of the ~200 GROUP3 service targets from the ours side is
|
||||
still present; the GROUP4 array still contains `ddsGenericDataTests`,
|
||||
`ddsDataTopicTests`, `ddsFunctionTopicTests`
|
||||
- no reference to `docker_build.sh` remains in the script
|
||||
|
||||
Modify/delete conflicts: none in the dry run. Still run the deletion-guard sweep below
|
||||
before resolving, so no services-side deletion is missed:
|
||||
|
||||
```bash
|
||||
git diff --diff-filter=D --name-only <merge-base>..origin/feature/lts-viewer-validation-testing-phase |
|
||||
while IFS= read -r f; do
|
||||
if git cat-file -e "origin/feature/qt6-migration-basis-modules-merge:$f" 2>/dev/null; then
|
||||
echo "KEEP $f"
|
||||
else
|
||||
echo "deleted-on-both-sides $f"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
Every `KEEP` line is a file that must be present in the final merge tree with the
|
||||
ours-side content (`git checkout --ours -- <file>`); every `deleted-on-both-sides` line
|
||||
may stay deleted. Record the full sweep output in the final report.
|
||||
|
||||
CMake conflicts: none expected in the dry run. If the re-run dry run shows new CMake
|
||||
conflicts: take the union of both sides' targets, dependencies, include directories, and
|
||||
link libraries; keep the `Qt6::SerialPort` manual IMPORTED target and the GROUP5/Viewer
|
||||
wiring (ours) side by side with the `BUILD_VIEWER_ONLY`/`LtsDataView` wiring (theirs).
|
||||
After resolving, verify with a fresh configure that both sides' targets/options exist
|
||||
(`make help` / `cmake --build … --target help`, or the docker script's group options).
|
||||
|
||||
## Mandatory build variants
|
||||
|
||||
Only these variants are valid:
|
||||
|
||||
- `BUILD_RTI=ON`
|
||||
- `BUILD_GRANTLEE=ON`
|
||||
|
||||
Forbidden: `BUILD_RTI=OFF`, `BUILD_GRANTLEE=OFF`.
|
||||
|
||||
- Do not implement, fix, preserve, test, or validate OFF variants of `BUILD_RTI`/`BUILD_GRANTLEE`.
|
||||
- Do not add CMake logic, tests, stubs, or fallbacks for those OFF variants.
|
||||
- Validation must use `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`.
|
||||
- The theirs-side options `BUILD_VIEWER_ONLY` (default OFF), `BUILD_CODIFICATION`
|
||||
(default OFF), and `BUILD_SV`/`BUILD_WS`/`BUILD_AAR` (default ON) are design features of
|
||||
the viewer-validation branch, not RTI/Grantlee variants: keep their defaults and
|
||||
semantics as-is; do not flip them.
|
||||
|
||||
## Preservation rules
|
||||
|
||||
Preserve module removals from commit `92ad7d468` ("remove all unneeded module listed from Niklas"): do not restore removed modules, files, targets, directories, or dependencies — on either side.
|
||||
|
||||
Preserve LogViewer reinsert from commit `1fa789767` ("Added LogViewer again"): do not remove, disable, or break LogViewer integration.
|
||||
|
||||
Preserve prior IDL warning fixes from commit `be912de9d`: do not reintroduce multiple enum definitions, duplicate enumerators, or builtin type/keyword collisions.
|
||||
|
||||
Preserve the ON-variant-only decisions already made on both branches.
|
||||
|
||||
Preserve the docker-script unification: `docker_build.sh` stays deleted;
|
||||
`new_docker_build.sh` remains the single validation script; the GROUP3 service target set
|
||||
and the consolidated GROUP4 array survive the script merge (see the merge recipe above).
|
||||
|
||||
## Stubs and forward declarations
|
||||
|
||||
Any required existing stub, compatibility declaration, or forward declaration must live only under:
|
||||
|
||||
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/forward-declarations/`
|
||||
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/.forward-declarations/include/`
|
||||
|
||||
- Do not leave such files in service directories unless they are real service source files.
|
||||
- Do not create or keep stubs for forbidden OFF variants.
|
||||
- Do not use stubs as replacements for real RTI, ndsgen, KTextTemplate, or Grantlee outputs in ON builds.
|
||||
- Report every moved, removed, or newly referenced stub/forward declaration.
|
||||
|
||||
## Qt link rules
|
||||
|
||||
No active target in the merged tree may link Qt5 imported targets.
|
||||
|
||||
Search the merged tree for and fix active uses of: `Qt5::`, `find_package(Qt5`, `QT5_`, `Qt5Core`, `Qt5Widgets`, `Qt5Network`.
|
||||
|
||||
Regression check specific to this merge: the theirs side touched `cmake/NGLMacros.cmake`
|
||||
(build-parts `BUILD_SV`/`BUILD_WS`/`BUILD_AAR` options) and `cmake/FindKDReports.cmake`.
|
||||
After the merge, re-run the search over ALL files touched by the merge, not just the
|
||||
conflicted hunk; the legacy `QT5_WRAP_UI`/`QT5_ADD_RESOURCES` function-name calls (compat
|
||||
shim) are allowed and pre-exist on both sides — imported-target links are not.
|
||||
|
||||
## Legacy comparison (required validation step)
|
||||
|
||||
This step proves the merge did not change code behavior.
|
||||
|
||||
For the single conflicted file (and for any other file you edit during conflict
|
||||
resolution):
|
||||
|
||||
1. Read the legacy Qt5 source at the same relative path in
|
||||
`./qt-migration-legatus/qt5-before/qt5-legatus-legacy`. If the file does not exist
|
||||
there (pure Qt6 build machinery — expected for `new_docker_build.sh`), say so and
|
||||
compare against the merge base instead.
|
||||
2. Produce three diffs: merge-base vs legacy (or: skip with justification), ours vs
|
||||
merge-base, theirs vs merge-base.
|
||||
3. Produce the audit diff: merged result vs merge base.
|
||||
4. Classify every hunk of the audit diff into exactly one category:
|
||||
- `qt6-api`: mandatory Qt5→Qt6 API adaptation
|
||||
- `rtiddsgen-api`: generated-API adaptation
|
||||
- `build`: CMake/docker/test-infra change with no runtime semantics
|
||||
- `merge-union`: line present because both branches required it
|
||||
- `semantic-change`: anything else
|
||||
5. Every `semantic-change` hunk is a failure of this merge unless you can point to the
|
||||
legacy source line that implements the same behavior. Fix it back to the legacy
|
||||
semantics (with approved adaptations) or report it as a blocker. Do not silently accept
|
||||
`semantic-change` hunks. (For `new_docker_build.sh`, `build`/`merge-union` are the
|
||||
expected categories; a `semantic-change` there means a behavior of one side's script
|
||||
was silently dropped.)
|
||||
6. Record the per-file hunk classification (counts per category is sufficient; list every
|
||||
`semantic-change` hunk explicitly) in the final report.
|
||||
|
||||
Additional equivalence checks on the merged tree:
|
||||
|
||||
- CMake option union: `BUILD_VIEWER_ONLY`, `BUILD_CODIFICATION`, `BUILD_SV/WS/AAR`, the
|
||||
`Qt6::SerialPort` IMPORTED target, and the GROUP5/Viewer wiring all exist after the
|
||||
auto-merge (the 6 auto-merged files are not re-read by default — verify them).
|
||||
- `LtsDataViewTest` registration: CTest `add_test` present, `QT_QPA_PLATFORM=offscreen`
|
||||
test property present, auto-exit `QTimer` present in `test.cpp`.
|
||||
- Docker build script: every target group, apt package, and build option both sides added
|
||||
is present (see the script checks in the merge recipe); the container-side script still
|
||||
starts with `set -euo pipefail`.
|
||||
|
||||
## Code generation rules
|
||||
|
||||
If generated files are required (not expected for this merge):
|
||||
|
||||
- reconstruct the real legacy generation flow
|
||||
- generate into the build tree
|
||||
- consume from the build tree
|
||||
- list complete OUTPUT and BYPRODUCTS
|
||||
- set correct DEPENDS and MAIN_DEPENDENCY where useful
|
||||
- use deterministic WORKING_DIRECTORY
|
||||
- use VERBATIM
|
||||
- wire generated sources with target_sources
|
||||
- wire generated include dirs with target_include_directories
|
||||
- ensure compilation depends on generation
|
||||
- ensure incremental rebuilds trigger on input/template changes
|
||||
|
||||
Never commit generated .idl, .h, .hpp, or .cpp outputs. Never consume generated outputs from the source tree. Never fabricate generated outputs.
|
||||
|
||||
## Tests
|
||||
|
||||
- Both sides' test suites must build and run; this merge adds no new feature tests.
|
||||
- Keep the theirs-side `LtsDataViewTest` adaptations (auto-exit timer, offscreen
|
||||
property, unconditional link) — they are what make the viewer-only ctest pass in CI.
|
||||
- If a conflict resolution changed C++ semantics (it should not), add CTest tests under
|
||||
`./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests/` that pin the legacy
|
||||
behavior, registered with CTest, running with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON`,
|
||||
policy-compatible names (`test_<name>.cpp`, …).
|
||||
- No OFF-variant tests of `BUILD_RTI`/`BUILD_GRANTLEE`. No host-local paths.
|
||||
|
||||
## Docker and CI
|
||||
|
||||
Authoritative migration Dockerfile:
|
||||
|
||||
- `./app/Dockerfile`
|
||||
|
||||
Authoritative validation script (single script after the merge; the former
|
||||
`docker_build.sh` was merged into it and deleted):
|
||||
|
||||
- `./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh`
|
||||
|
||||
Validation container expectations:
|
||||
|
||||
- repository root at `/workspace` (the script's documented mount path)
|
||||
- external dependencies under `/workspace/external` (including `external/rti_connext_dds-7.7.0`, `external/ArcGIS` where the scripts expect them)
|
||||
- `./rti_license.dat` mounted read-only if RTI requires it
|
||||
- no developer-local paths
|
||||
|
||||
Jenkins CI must be able to discover and run the merged test set. Inspect and minimally
|
||||
update only if needed:
|
||||
|
||||
- `./qt-migration-legatus/ci/Dockerfile.*`
|
||||
- `./qt-migration-legatus/ci/check_pr_policies.py`
|
||||
|
||||
Known pre-existing blocker (do not fix in this merge, record in the final report):
|
||||
`ci/check_pr_policies.py` currently exits 1 because commits `881d44f4d` (services-side
|
||||
tip, unsigned) and `36f077bce` (ours tip, unsigned) carry no SSH signature accepted by
|
||||
`ci/allowed_signers`. Fixing it requires re-signing/history rewrite of source-branch
|
||||
commits, which is out of scope here.
|
||||
|
||||
## Required procedure
|
||||
|
||||
1. Read the base prompts. Run `git fetch origin` and verify both remote tips and the merge base (incl. the `7659b167d`→`36f077bce` resync note above).
|
||||
2. Create/checkout `feature/qt6-migration-basis-modules-merge-viewer-validation` from `origin/feature/qt6-migration-basis-modules-merge` in `./qt-migration-legatus` (working tree must be clean).
|
||||
3. Re-run the dry-run merge in a throwaway worktree; confirm the conflict list (expected: 1).
|
||||
4. Run the real merge: `git merge --no-ff origin/feature/lts-viewer-validation-testing-phase` (do not auto-commit; resolve first).
|
||||
5. Run the deletion-guard sweep and resolve the conflicts one file at a time using the four-version method and the `new_docker_build.sh` merge recipe above.
|
||||
6. Run the legacy comparison audit (previous section) over every resolved/edited file.
|
||||
7. Run the regression checks: Qt5 links, removed modules, LogViewer, IDL warnings, stub locations, ON-variant-only CMake, docker script integrity (bash -n, --help, target-set and GROUP4 checks), CMake option union, CTest registration union.
|
||||
8. Validate in Docker with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON` — all three runs below.
|
||||
9. Run CTest in each validated build (executed as part of the docker runs).
|
||||
10. Check Jenkins/policy compatibility (record the pre-existing signature blocker).
|
||||
11. Create the merge commit (see Commits).
|
||||
12. Report factual status.
|
||||
|
||||
Do not push. The merge result stays local on `feature/qt6-migration-basis-modules-merge-viewer-validation` until the user says otherwise.
|
||||
|
||||
## Required validation
|
||||
|
||||
From `./qt-migration-legatus/qt6-after/qt6-migrated-legatus`, run (in order):
|
||||
|
||||
```bash
|
||||
# 1. Full default run (groups 1–3: DDS core, migration_tests, full migrated-service set)
|
||||
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh
|
||||
|
||||
# 2. Viewer-only run (validates the new theirs-side feature end to end;
|
||||
# resolves the "(tbc)" of the branch tip)
|
||||
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --build-viewer-only
|
||||
|
||||
# 3. Coverage run (Lts/Proxies + full Lts/Viewer incl. LtsFileDialog)
|
||||
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh --group4 --group5
|
||||
```
|
||||
|
||||
If a direct clean build is useful, use:
|
||||
|
||||
```bash
|
||||
cmake -S /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus -B /workspace/build-merge-viewer-rti-on-grantlee-on -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON -DBUILD_GRANTLEE=ON
|
||||
cmake --build /workspace/build-merge-viewer-rti-on-grantlee-on --parallel
|
||||
ctest --test-dir /workspace/build-merge-viewer-rti-on-grantlee-on --output-on-failure
|
||||
```
|
||||
|
||||
CTest baseline: ctest exits with code 8 when tests are "Not Run". A pre-existing set of
|
||||
Not Run tests (for example nglcomp_test, NGLToolsQtSmoke, test_nglpdfwidget,
|
||||
GrantleeParserSmoke, lts_coord_trans_unit_test, utils_test, aes_crypt_test, the
|
||||
aes/bld suites, and — when `--group4`/`--group5` are OFF — ddsGenericDataTests/
|
||||
ddsDataTopicTests/ddsFunctionTopicTests and their `_gtest` variants, taboc_serialtest,
|
||||
LtsDataViewTest, LtsFileDialogTest) belongs to sibling targets or OFF groups outside
|
||||
the run's target list and is not a failure. Treat only `***Failed` entries as failures.
|
||||
Do not widen this exception to skip real failures, and do not add missing sibling targets
|
||||
to fix the exit code. In the `--build-viewer-only` run, `LtsDataViewTest` (and
|
||||
`LtsFileDialogTest` where built) MUST run and pass — if it does not, that is a merge
|
||||
regression: fix it or report it as a blocker. If a previously passing test becomes Not
|
||||
Run or Failed after the merge, that is a merge regression: fix it or report it as a
|
||||
blocker.
|
||||
|
||||
Do not run or validate OFF variants of `BUILD_RTI`/`BUILD_GRANTLEE`.
|
||||
|
||||
## Commits
|
||||
|
||||
- Single author: the user's git identity. The user is the only author; do not add any co-author, co-authored-by, or bot attribution lines of any kind.
|
||||
- Commit message: maximum 2 lines (one subject line plus at most one short body line), no blank-line separators, no extra metadata.
|
||||
- Merge commit subject example (2 lines max):
|
||||
`Merge feature/lts-viewer-validation-testing-phase into feature/qt6-migration-basis-modules-merge`
|
||||
body line: `Resolves 1 conflict (new_docker_build.sh) keeping viewer-only + codification options; validates with BUILD_RTI=ON BUILD_GRANTLEE=ON.`
|
||||
- If a conflict resolution requires an additional fix commit on top of the merge commit, the same 2-line / single-author rules apply.
|
||||
- Follow `./prompts/commit-policy.prompt.md` for repository mapping and pre-commit checks. If it requires signed commits and signing is not configured in this repository context, stop and report the exact reason instead of committing unsigned.
|
||||
|
||||
## Success criteria
|
||||
|
||||
Success requires:
|
||||
|
||||
- `feature/qt6-migration-basis-modules-merge-viewer-validation` contains a merge commit with both parents `origin/feature/qt6-migration-basis-modules-merge` (or its verified successor tip) and `origin/feature/lts-viewer-validation-testing-phase` (or its verified successor tip)
|
||||
- the single conflicted file (`new_docker_build.sh`) resolved with the four-version method + merge recipe; resolution evidence and the post-resolution script checks recorded
|
||||
- deletion-guard sweep run and its output recorded
|
||||
- both branches' functionality preserved: the full migrated-service set, GROUP4/GROUP5 wiring, stub relocation, and docker-script unification from the ours side; `--build-viewer-only`, `BUILD_CODIFICATION`, KDReports detection/`FindKDReports.cmake` rework, build-parts wiring, GROUP5 test targets, and the `LtsDataViewTest` adaptations from the theirs side
|
||||
- legacy comparison audit done for every resolved file; zero unexplained `semantic-change` hunks
|
||||
- configure, build, and CTest pass with `BUILD_RTI=ON` and `BUILD_GRANTLEE=ON` in all three validation runs
|
||||
- `new_docker_build.sh` runs the merged test set and fails on test failure; `--build-viewer-only` builds the Viewer targets and passes its ctest (incl. `LtsDataViewTest`)
|
||||
- Jenkins/policy discovery accepts the merged test set (or the pre-existing signature blocker is recorded as the only failure)
|
||||
- no active Qt5 imported target links remain in the merged tree
|
||||
- generated outputs are build-tree only, freshly produced, never committed or consumed from the source tree
|
||||
- no fake generated files, dummy files, mocks, placeholders, or stubbed generated outputs
|
||||
- required stubs/forward declarations only in allowed directories; `docker_build.sh` stays deleted
|
||||
- removed modules remain removed; LogViewer preserved
|
||||
- no OFF-variant logic, tests, or stubs introduced for `BUILD_RTI`/`BUILD_GRANTLEE`
|
||||
- no push performed
|
||||
|
||||
## If blocked
|
||||
|
||||
Do not fake success. Report:
|
||||
|
||||
- failing command
|
||||
- key error output
|
||||
- affected file/branch
|
||||
- category: project, path, merge, CMake, Qt API, codegen, Docker, RTI/license, Grantlee/KTextTemplate, KDReports, test, CTest, Jenkins CI, stub relocation, or environment
|
||||
- which side (ours/theirs) the problematic hunk came from
|
||||
- what was resolved safely
|
||||
- what remains blocked
|
||||
- whether stale artifacts were ruled out
|
||||
- whether generated files were involved
|
||||
- exact missing files, targets, or generator step
|
||||
- whether tests and CTest integration succeeded
|
||||
- whether Docker validation and Jenkins discovery succeeded
|
||||
- the legacy comparison status for the unresolved files
|
||||
|
||||
## Final report
|
||||
|
||||
Keep it short. Include:
|
||||
|
||||
- status: validated, partially validated, or blocked
|
||||
- merge commit hash, both parents, branch name
|
||||
- per-conflicted-file resolution: file, method (union / four-version semantic / merge recipe), and the one-line reason
|
||||
- `new_docker_build.sh` merge evidence: ours-side target-set check (GROUP3 intact, GROUP4 DDS tests present), theirs-side feature list (viewer-only, codification, build-parts, KDReports, prebuilt image name), and the post-resolution script checks
|
||||
- deletion-guard sweep result (full KEEP / deleted-on-both-sides list)
|
||||
- legacy comparison audit summary: per-file hunk counts by category, and every `semantic-change` hunk with its justification or fix
|
||||
- files changed beyond the conflicted set (expected: none beyond the auto-merged theirs-side files)
|
||||
- CTest registration union check result (incl. `LtsDataViewTest` property/auto-exit)
|
||||
- Docker and Jenkins CI changes (incl. the recorded pre-existing signature blocker)
|
||||
- Qt5 references removed or remaining
|
||||
- confirmation that removed modules were not restored, LogViewer was preserved, and `docker_build.sh` stayed deleted
|
||||
- exact validation commands and results for all three runs
|
||||
- remaining blockers or risks
|
||||
Reference in new issue
Block a user