14 KiB
Strict Qt6 Test/Validation Prompt: CMake targets under ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
Required base prompt
Before making changes, read and apply:
- ./prompts/combined-migration-subfolder-rti-compact.prompt.md
If that prompt is stricter, follow it. This prompt overrides it only for build variants: use ON variants only. Do not pursue OFF variants.
Critical instruction for the agent receiving this prompt
Lts/DDS is already migrated to Qt6. Do not perform a new migration pass unless a small, targeted fix is directly required to make the already-migrated DDS targets configure, build, link, or pass tests.
Primary task:
- discover all real CMake targets under
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS - ensure the corresponding already-migrated DDS targets are built or validated by
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh - fix the existing test failures for DDS targets
- add or complete functionality and integration tests with already Qt6-migrated modules in the DDS path
Do not execute this prompt as a planning document. Execute it only as a repository task in the target branch named below.
Module in scope
Work only on CMake targets and directly related tests
from:
./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/DDS
to:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS
The DDS code is already migrated. Treat the path above as the scoped DDS module path for target discovery, build-script registration, and test repair.
Do not migrate sibling services or unrelated modules.
Mandatory build variants
Only these variants are valid:
- BUILD_RTI=ON
- BUILD_GRANTLEE=ON
Forbidden:
- BUILD_RTI=OFF
- BUILD_GRANTLEE=OFF
Rules:
- Do not implement, fix, preserve, test, or validate OFF variants.
- Do not add CMake logic, tests, stubs, or fallbacks for OFF variants.
- Do not report OFF variants as supported or partially supported.
- Validation must use BUILD_RTI=ON and BUILD_GRANTLEE=ON.
Branches and trees
Target branch:
- feature/migrate-and-test-DDS-targets
Qt5 legacy branch, if comparison is needed:
- story/qt6-migration
Scoped DDS tree:
from Qt5:
./qt-migration-legatus/qt5-before/qt5-legatus-legacy/Lts/DDSto Qt6:./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS
Authoritative validation script to update:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh
Do not modify unrelated trees. Do not restore removed modules.
Scope rules
Touch files outside the DDS target directory only when directly required to configure, generate, build, link, test, or validate DDS targets.
Allowed outside-scope changes:
- parent CMakeLists.txt entries required for DDS targets
- central CMake helper fixes required by DDS targets
- shared include path fixes required by DDS targets
- RTI, codegen, ndsgen, KTextTemplate, or Grantlee integration fixes required by DDS targets
- test infrastructure needed by DDS functionality or integration tests
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.shchanges needed to build or validate all real DDS CMake targets- minimal Jenkins CI discovery or policy updates needed for DDS tests
- relocation of required stubs or forward declarations to allowed directories
Not allowed:
- restoring removed modules
- reintroducing stale dependencies on removed modules
- removing or disabling active modules to hide failures
- disabling DDS targets instead of fixing root causes
- broad refactoring, cleanup, renaming, or modernization
- warning suppression instead of fixing causes
- committing generated files
- consuming generated outputs from the source tree
- fake success, dummy files, handwritten generated replacements, mocks, placeholders, or generated-output stubs
CMake targets under DDS
- Discover real CMake targets defined under
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS. - Add every required real CMake target under that DDS path to
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.shso the validation container builds or validates it. - Do not invent CMake targets under DDS.
- Do not add targets that do not exist.
- If the DDS folder does not exist, has no CMake targets, or a target is intentionally out of scope, report that fact and the reason.
- Do not weaken validation to make DDS CMake targets pass.
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.
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, "Removes .IDL warnings: multiple enum definitons and builtin-type collisions"
Do not blindly replay that commit. Use it only as reference. Do not reintroduce removed modules.
IDL regressions to avoid:
- multiple enum definitions
- duplicate enumerators
- builtin type or keyword collisions
Check first for duplicate inputs, stale paths, removed-module references, source-tree generated outputs, source/build-tree confusion, and repeated IDL definitions before treating an issue as semantic.
Stubs and forward declarations
Any required existing stub, compatibility declaration, or forward declaration must live only under approved forward-declaration directories in the active tree, for example:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/forward-declarations/./qt-migration-legatus/qt6-after/qt6-migrated-legatus/include/
Rules:
- Do not leave such files in DDS service directories unless they are real DDS source files.
- Do not create or keep stubs for forbidden OFF variants.
- Do not use stubs or forward declarations as replacements for real RTI, ndsgen, KTextTemplate, or Grantlee outputs in ON builds.
- Report every moved, removed, or newly referenced stub/forward declaration.
Test repair and additions
The DDS module is already migrated, but tests still fail. Fix the real causes of DDS test failures.
For DDS-related code changes, add or update meaningful CTest tests where feasible.
Required test focus:
- functionality tests for DDS target behavior
- integration tests using already Qt6-migrated modules in
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/ - regression tests for the specific failing DDS behavior, when the failure can be reproduced deterministically
Rules:
- tests must validate behavior, not only compilation
- tests must be registered with CTest
- tests must run with BUILD_RTI=ON and BUILD_GRANTLEE=ON
- do not add OFF-variant tests
- use deterministic tests without host-local paths
- do not use fake DDS, RTI, ndsgen, KTextTemplate, Grantlee, or generated-output replacements
- if three meaningful tests per C++ behavior change are impossible, add the maximum meaningful set and explain why
- update
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.shso it runs the DDS tests and fails on test failure
Preferred location:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests
Use policy-compatible names, for example:
test_<name>.cpp<name>_test.cpp<name>test.cpp<name>gtest.cpp
Migration checks limited to test/build fixes
For each DDS CMake target, inspect and adjust only as needed:
- source and header files directly involved in failing DDS builds or tests
- CMakeLists.txt and parent CMake registration
- ui, qrc, resource, plugin, and service metadata directly required by DDS targets
- RTI IDL, ndsgen, KTextTemplate, and Grantlee inputs/templates used by DDS targets
- tests directly tied to DDS targets
Fix only real Qt6/C++17 build or test issues, such as:
- Qt module imports and target links
- moc, uic, and rcc handling
- QRegExp to QRegularExpression when required
- QTextCodec replacement when required
- QDesktopWidget or QApplication::desktop() replacement when required
- QString, QVariant, QMetaType, QDateTime, QAction, QMenu, signal/slot, enum, plugin, or metadata compatibility issues when required
- incorrect or incomplete CTest registration
- missing DDS target registration in the authoritative validation script
No opportunistic refactoring or style cleanup.
Qt link rules
No active target in the scoped tree may link Qt5 imported targets.
Search for and fix active uses of:
- Qt5::
- find_package(Qt5
- QT5_
- Qt5Core
- Qt5Widgets
- Qt5Network
Use Qt6 equivalents. Prefer central CMake helper fixes when the issue is central and required by DDS targets.
Code generation rules
If generated files are required:
- reconstruct the real existing 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.
Docker and CI
Authoritative migration Dockerfile:
./app/Dockerfile
Authoritative validation script:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh
Do not use other Dockerfiles as task authority.
Validation container expectations:
- repository root at /repo, or the script's documented mount path
- external dependencies under /repo/external, or the script's documented equivalent
- RTI 7.7 at /repo/external/rti_connext_dds-7.7.0, or documented equivalent
./rti_license.datmounted read-only if RTI requires it- no developer-local paths
Jenkins CI must be able to discover and run the DDS tests, or verify that new_docker_build.sh runs them. Inspect and minimally update only if needed:
./qt-migration-legatus/ci/Dockerfile.*./qt-migration-legatus/ci/check_pr_policies.py
Required procedure
- Inspect repository state, branch, working tree, submodules, required prompts, DDS path, validation script, and forward-declaration directories.
- Confirm DDS is already migrated and identify current DDS test failures.
- Discover all real CMake targets under
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS. - Add the required DDS CMake targets to
./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh. - Identify DDS dependencies, generated inputs, Qt modules, parent CMake entries, removed-module references, LogViewer interactions, and required stub/forward-declaration relocations.
- Apply the smallest valid test/build fixes.
- Add or repair required functionality and integration CTest tests with already Qt6-migrated DDS modules.
- Review RTI, ndsgen, KTextTemplate, and Grantlee generation paths used by DDS targets.
- Check regressions: Qt5 links, removed modules, LogViewer, IDL warnings, source-tree generated consumption, stale artifacts, and misplaced stubs.
- Validate in Docker with BUILD_RTI=ON and BUILD_GRANTLEE=ON.
- Run CTest in the validated build directory.
- Check Jenkins/policy compatibility.
- Report factual status.
Do not overwrite uncommitted user changes. If they block safe work, report the blocker.
Required validation
From:
./qt-migration-legatus/qt6-after/qt6-migrated-legatus
Run:
BUILD_RTI=ON BUILD_GRANTLEE=ON ./new_docker_build.sh
CTest must run as part of validation. If a direct clean build is useful, use:
cmake -S /repo/qt-migration-legatus/qt5-before/qt5-legatus-legacy -B /repo/build-rti-on-grantlee-on -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_RTI=ON -DBUILD_GRANTLEE=ON
cmake --build /repo/build-rti-on-grantlee-on --parallel
ctest --test-dir /repo/build-rti-on-grantlee-on --output-on-failure
Also check whether this file exists and run it only if present:
./new_docker-build.h
If it is absent or a typo, report that. Do not invent a replacement.
Do not run or validate OFF variants.
Success criteria
Success requires:
- DDS CMake targets are confirmed already migrated or fixed only where directly required for tests/builds
- all real DDS CMake targets are included in the authoritative validation script
- configure, build, and CTest pass with BUILD_RTI=ON and BUILD_GRANTLEE=ON
- functionality and integration tests for already Qt6-migrated DDS modules are registered with CTest
new_docker_build.shruns the relevant DDS tests and fails on test failure- Jenkins/policy discovery accepts the DDS tests and validation changes
- no active Qt5 imported target links remain for DDS targets
- generated outputs are build-tree only and freshly produced when required
- no generated outputs are committed or consumed from the source tree
- no fake generated files, dummy files, mocks, placeholders, or stubbed generated outputs exist
- required stubs/forward declarations are only in allowed directories
- removed modules remain removed
- LogViewer remains preserved
- RTI/codegen and Grantlee/KTextTemplate success is real, not stale or faked
If blocked
Do not fake success. Report:
- failing command
- key error output
- affected DDS target or service
- category: project, path, merge, CMake, Qt API, codegen, Docker, RTI/license, Grantlee/KTextTemplate, test, CTest, Jenkins CI, stub relocation, or environment
- what was fixed safely
- what remains blocked
- whether stale artifacts were ruled out
- whether generated files were involved
- exact missing files, targets, or generator step
- whether functionality and integration tests were added or repaired
- whether tests and CTest integration succeeded
- whether Docker validation and Jenkins discovery succeeded
Final report
Keep it short. Include:
- status: validated, partially validated, or blocked
- DDS CMake targets discovered and added to
new_docker_build.sh - files changed
- C++ files changed
- functionality tests added or repaired
- integration tests added or repaired
- tests added per C++ change
- CTest registration changes
- CMake and generator changes
- stub/forward-declaration moves or removals
- Docker and Jenkins CI changes
- Qt5 references removed or remaining
- confirmation that removed modules were not restored
- confirmation that LogViewer was preserved
- exact validation commands and results
- result of
new_docker-build.hif present - remaining blockers or risks