This commit is contained in:
1 parent
784d1cc2c5
commit
6b84e24b59
1 file changed
+439
@@ -0,0 +1,439 @@
|
||||
# Strict Qt6 Migration Prompt: ArcGIS 300 Symbology — verify & complete the SituationMap + AdvancedSymbology migration
|
||||
|
||||
This prompt is binding task context. Keep changes minimal, scoped, and reproducible.
|
||||
The only allowed outcome is a fully-verified ArcGIS-300 symbology migration in
|
||||
`qt6-after/qt6-migrated-legatus` in which every migrated symbology file preserves the
|
||||
legacy Qt5 behavior **except** for the approved Qt5→Qt6 / ArcGIS-Maps-SDK-300 API
|
||||
adaptations. No behavior change is allowed in the ON-variant (validated) build.
|
||||
|
||||
ArcGIS version in use: **ArcGIS Maps SDK for Qt 300.0.0**
|
||||
(`external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk`).
|
||||
|
||||
## 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 adds:
|
||||
|
||||
- build variants: ON variants only for `BUILD_RTI`/`BUILD_GRANTLEE`; validation uses
|
||||
`BUILD_ARCGIS=ON` (this is **not** an RTI/Grantlee OFF variant — the prohibition on OFF
|
||||
RTI/Grantlee does not apply to ArcGIS)
|
||||
- scope: the symbology subsystem (SituationMap + AdvancedSymbology), ArcGIS 300.0.0
|
||||
|
||||
## Task
|
||||
|
||||
Verify — and where the migration is incomplete or diverges from legacy, complete — the
|
||||
ArcGIS 300 migration of the symbology subsystem:
|
||||
|
||||
- the SituationMap viewer's military (SIDC) symbology: `Symbology/`, `SymbologyImpl/`,
|
||||
`SymbologyXML/` (the pure-Qt SIDC codec/builder/dictionary **plus** the Esri
|
||||
dictionary-symbol processors that parse ArcGIS `.style` dictionaries)
|
||||
- the ArcGIS map layer: `SituationMap/Map/` (now on the new ArcGIS Maps SDK for Qt 300.0.0)
|
||||
- the AdvancedSymbology plugin: `Lts/Plugins/AdvancedSymbology/` (symbol editor, symbol
|
||||
proxy, data plugin, helper renderer)
|
||||
- the one remaining ArcGIS-dependent service file:
|
||||
`Lts/Services/CentralEffectSimulation/Plugins/Explosions/expand_polygon.cpp`
|
||||
|
||||
For every file in scope, diff it against the legacy Qt5 tree and prove each hunk is
|
||||
migration-only (or restore it to the legacy semantics with approved adaptations, or report
|
||||
a blocker).
|
||||
|
||||
## Branches and trees
|
||||
|
||||
Working repository (a separate git repo; never commit its changes into the workspace root
|
||||
or the legacy 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`
|
||||
|
||||
Working branch: the dedicated ArcGIS-300 symbology branch the user created for this work
|
||||
(verify its name with `git branch --show-current`; do not conflate it with the main
|
||||
migration branch).
|
||||
|
||||
Before starting:
|
||||
|
||||
1. `git fetch origin` in `./qt-migration-legatus`.
|
||||
2. Confirm the working tree state with `git status --short`. Known state at prompt writing
|
||||
(2026-10-06): the main worktree is on
|
||||
`feature/qt6-migration-projects-app-tools-viewer-validation-tetraif` at `1e07bf76b`
|
||||
("Add ddsview topic-type-plugin deps to GROUP6") with **two uncommitted files** —
|
||||
`qt6-after/qt6-migrated-legatus/new_docker_build.sh` (the `ensure_database` step) and
|
||||
`qt6-after/qt6-migrated-legatus/tests/CMakeLists.txt` (10 `migration_tests` target-guard
|
||||
fixes). Do not lose these: if they are not part of this task, commit or stash them on
|
||||
their own branch first; do not fold unrelated changes into the symbology commit.
|
||||
3. Confirm both trees exist and that the ArcGIS SDK 300.0.0 directory exists at the path
|
||||
below. If the working tree has unrelated uncommitted changes that block safe work,
|
||||
report the blocker.
|
||||
|
||||
## What is already established (verified 2026-10-06 — starting state; re-verify cheaply)
|
||||
|
||||
Treat the following as the verified starting state. Re-run the cheap checks to confirm the
|
||||
current state, but do not re-derive the whole picture.
|
||||
|
||||
- **The migration STUBBED almost all ArcGIS.** Legacy `Lts/Viewer` uses the OLD ArcGIS
|
||||
Runtime SDK (100.x) with **399** `#include <arcgis/...>`. The migrated tree has **11**
|
||||
arcgis includes total, all in:
|
||||
- `Lts/Viewer/SituationMap/Map/situation_map_utils.h` (SceneViewTypes.h, Error.h)
|
||||
- `Lts/Viewer/SituationMap/Map/situation_map_utils.cpp` (CoreTypes.h, MapTypes.h,
|
||||
Viewpoint.h, Camera.h, arcgisversion.h)
|
||||
- `Lts/Viewer/SituationMap/Map/map_initializer.cpp` (arcgisversion.h)
|
||||
- `Lts/Viewer/SituationMap/Map/layer_factory.h` (arcgisversion.h)
|
||||
- `Lts/Services/CentralEffectSimulation/Plugins/Explosions/expand_polygon.cpp`
|
||||
(PolygonBuilder.h, GeometryEngine.h)
|
||||
- `Lts/Viewer/SituationMap/ElevationMap/` (**7 files** in legacy) is **removed** entirely in
|
||||
the migrated tree. Do not restore it unless this task explicitly requires it.
|
||||
- The SIDC symbology (`Symbology/`, `SymbologyImpl/`, `SymbologyXML/`) is **pure Qt** —
|
||||
**zero** arcgis includes. The ArcGIS dependency is confined to the map layer and the one
|
||||
service file above.
|
||||
- The migrated arcgis includes use the **new 300.0.0 header names** (`MapTypes.h`,
|
||||
`Viewpoint.h`, `Camera.h`, `CoreTypes.h`, `SceneViewTypes.h`, `PolygonBuilder.h`,
|
||||
`GeometryEngine.h`, `arcgisversion.h`) and keep the `Esri::ArcGISRuntime::` namespace
|
||||
(e.g. `Esri::ArcGISRuntime::SymbolStyleSearchResult` in
|
||||
`SymbologyImpl/esri_dictionary_processor.cpp`). The **include style is inconsistent**:
|
||||
some keep the `arcgis/` prefix (`#include <arcgis/Viewpoint.h>`), some drop it
|
||||
(`#include <TaskWatcher.h>`). This must be reconciled (see step 6 of the procedure).
|
||||
- **Audit baseline (2026-10-06, CRLF-ignored diff of files present in both trees):**
|
||||
- SituationMap: **96** common source files differ, ~1149 changed lines, all migration-only
|
||||
so far.
|
||||
- AdvancedSymbology: **37** common source files differ (no added/removed source files).
|
||||
- The Esri dictionary processors (`esri_dictionary_processor*.cpp`) changed only includes
|
||||
(`#include <arcgis/X.h>` → `#include <X.h>`, Qt include-path churn,
|
||||
`qAsConst`→`std::as_const`); the Esri types and symbol-search logic are unchanged.
|
||||
|
||||
## Scope (the files to audit)
|
||||
|
||||
Audit, diff-vs-legacy, and classify **every** source file in:
|
||||
|
||||
1. `Lts/Viewer/SituationMap/Symbology/` — SIDC codec/builder/dictionary/definitions
|
||||
(`sidc_codec.*`, `sidc_builder*.*`, `symbol_dictionary*.*`, `symbol_properties.*`,
|
||||
`symbol_result.*`, `sidc_definitions.*`, `bulk_renderer.*`, `property_result.*`,
|
||||
`result_watcher.*`, `symbol_data_to_render*.*`, `symbology_type.*`, …).
|
||||
2. `Lts/Viewer/SituationMap/SymbologyImpl/` — `esri_dictionary_processor*.cpp/.h`
|
||||
(`esri_dictionary_processor`, `..._app6`, `..._app6d`, `..._mil2525d`),
|
||||
`base_symbol_model.*`, `symbol_dictionary_impl.*`, `symbol_extension_renderer.*`,
|
||||
`advanced_symbology_logging.*`.
|
||||
3. `Lts/Viewer/SituationMap/SymbologyXML/` — `symbol.*`, `symbol_reader.*`,
|
||||
`symbol_writer.*`, `symbol_exporter.*`, `symbol_table.*`, `pixmap_symbol_cache.*`,
|
||||
`symbol_custom_graphics_item_group.*`, `attribute_data.h`, `symbol_types.h`,
|
||||
`xml_symbol_codec.h`, `Gui/symbol_dialog.*`.
|
||||
4. `Lts/Viewer/SituationMap/Map/` — the ArcGIS map layer (57 files): `map.*`,
|
||||
`map_initializer.*`, `layer_factory.h`, `situation_map_utils.*`, `camera.*`,
|
||||
`fill_style.*`, `line_style.*`, `geometry_model_renderer.*`, `object_container.*`,
|
||||
`object_factory.*`, `map_settings.*`, `operator_map_settings.*`, `map_notifier.*`,
|
||||
`bounding_box.*`, `grid.h`, `measurement.h`, … and every sibling present in the dir.
|
||||
5. `Lts/Plugins/AdvancedSymbology/` (37 files): `Data/asb_data_plugin.*`,
|
||||
`Data/asb_foreign_interface_impl.*`, `Data/logger.*`, `Gui/SymbolEditor/*`,
|
||||
`Gui/SymbolProxy/*`, `Helper/table_model_symbol_renderer*.*`, and the
|
||||
`asb_*_interface.h` headers.
|
||||
6. `Lts/Services/CentralEffectSimulation/Plugins/Explosions/expand_polygon.cpp`.
|
||||
|
||||
Do **not** touch `ElevationMap/` (removed) unless the task requires restoring it.
|
||||
|
||||
## Expected migration patterns (each must verify as migration-only)
|
||||
|
||||
These are the changes seen in the baseline audit. Each is an approved adaptation; when you
|
||||
see one, confirm it is the exact legacy-equivalent transformation and leave it. If a file
|
||||
deviates from the pattern (extra/missing logic), classify it as `semantic-change` and act.
|
||||
|
||||
- Qt include path churn: `#include <QX>` → `#include <QtCore/QX>` (and
|
||||
`QtGui/`, `QtWidgets/`, `QtMultimedia/`, `QtNetwork/`, `QtSql/`, `QtXml/`,
|
||||
`QtPrintSupport/`).
|
||||
- `qAsConst(x)` → `std::as_const(x)` (Qt6 removed `qAsConst`).
|
||||
- `QRegExp::exactMatch(s)` → `QRegularExpression::match(s).hasMatch()`; `QRegExp`
|
||||
→ `QRegularExpression` (type + include).
|
||||
- `QString::count()` → `QString::size()` (`count()` removed in Qt6).
|
||||
- `QString::leftRef(n)` → `QString::left(n)` (`leftRef` removed in Qt6; a `// Qt6:
|
||||
leftRef removed` note may accompany it).
|
||||
- `QString::split(...)`: in Qt6 the `QStringView` overload is gone and `split()` returns
|
||||
`QStringList`. Sites may now use `QVector<QStringView>` or `QStringList` — verify the
|
||||
chosen type is behavior-identical (same element order/values, same `last()`/indexing).
|
||||
- New `const QStringView &` overloads added to the SIDC codec helpers
|
||||
(`decodeSymbology`, `decodeSidc`, `encodeBaseSymbolCode`, `encodeComplete`,
|
||||
`encodeCivilEts`, `encodeCivilXml`) that delegate to the `QString` overloads
|
||||
(`.toString()`). Verify the delegate body is an exact pass-through.
|
||||
- ArcGIS include path: old `<arcgis/X.h>` → the SDK-300 layout. Reconcile to ONE consistent
|
||||
form (see procedure step 6) that matches how the CMake sets the SDK include path.
|
||||
- `const QImage &img = x.image()` → `const QImage img = x.image()` (Qt6 `QImage::image()`
|
||||
returns by value).
|
||||
|
||||
## Verify carefully (potential behavior changes — do NOT auto-accept)
|
||||
|
||||
These are the non-obvious changes. For each, prove the legacy semantics are preserved in
|
||||
the validated (ON) build, or report a blocker. Files are given so you do not hunt.
|
||||
|
||||
1. **`ParticipantManagement::Role_def::*` → `Role::*`** — file
|
||||
`Lts/Viewer/SituationMap/Symbology/symbol_data_to_render_role.h`. Legacy references the
|
||||
DDS-generated enumerator set `Role_def`; migrated references `Role`. This is a
|
||||
DDS-generated-type rename. **VERIFY the enum value mapping is 1:1** — every
|
||||
`Role_def::X` → `Role::X` with the same numeric value/meaning (`Unknown`, `Friend`,
|
||||
`Neutral`, `Enemy`, `Pending`, `AssumedFriend`, `Suspect`, …). If the generated `Role`
|
||||
enum dropped, added, or reordered any enumerator, flag it (the value→role mapping must be
|
||||
preserved).
|
||||
2. **`#ifdef BUILD_WITH_EXTERNAL_DDS` role-conversion stub** — files
|
||||
`Lts/Viewer/SituationMap/Symbology/symbol_data_to_render_role.h` and
|
||||
`Lts/Plugins/AdvancedSymbology/Data/asb_foreign_interface_impl.{h,cpp}`. When external
|
||||
DDS types are absent, `roleToRole(...)` returns `Role::Unknown` (a STUB) instead of the
|
||||
real conversion. This is a runtime behavior change vs legacy. **Confirm:**
|
||||
(a) the real path (external-DDS available) still matches legacy 1:1; (b) the STUB path is
|
||||
never the one exercised in the validated ON build; (c) the stub is documented as
|
||||
intentional migration scaffolding. Do NOT "fix" the stub to look real, and do NOT let it
|
||||
leak into the validated build.
|
||||
3. **Logger pattern** — files `Lts/Viewer/SituationMap/SymbologyImpl/
|
||||
advanced_symbology_logging.{h,cpp}`, `symbol_dictionary_impl.cpp`,
|
||||
`esri_dictionary_processor.cpp`, `base_symbol_model.cpp`. Legacy
|
||||
`LOGGER_T m_logger = getLogger("...")` (local) → migrated **member**
|
||||
`NGL::INGLLogger &m_logger` initialized in the constructor (`, m_logger(getLogger(...))`).
|
||||
Matches the known export-header/logger migration pattern. **VERIFY** there is no
|
||||
double-allocation, lifetime, or initialization-order issue, and the logger name string is
|
||||
unchanged.
|
||||
4. **QAbstractItemModel filter API** — file
|
||||
`Lts/Viewer/SituationMap/SymbologyImpl/base_symbol_model.cpp`. Legacy
|
||||
`invalidateFilter()` → migrated `beginFilterChange()` / `endFilterChange()` (Qt6 removed
|
||||
`invalidateFilter()`). **VERIFY** every `invalidateFilter()` call is correctly wrapped
|
||||
(a `beginFilterChange()` before the change and an `endFilterChange()` after), preserving
|
||||
the same filtering semantics.
|
||||
|
||||
## Mandatory build variants
|
||||
|
||||
Only these variants are valid for validation:
|
||||
|
||||
- `BUILD_RTI=ON`
|
||||
- `BUILD_GRANTLEE=ON`
|
||||
- `BUILD_ARCGIS=ON`
|
||||
|
||||
Forbidden: `BUILD_RTI=OFF`, `BUILD_GRANTLEE=OFF`. Do not implement, fix, preserve, test, or
|
||||
validate OFF variants of `BUILD_RTI`/`BUILD_GRANTLEE` (no CMake logic, tests, stubs, or
|
||||
fallbacks for them). `BUILD_ARCGIS` must be **ON** for this task (the ArcGIS map layer is
|
||||
the point). The `#ifdef BUILD_ARCGIS` / `#ifdef BUILD_WITH_EXTERNAL_DDS` guards and their
|
||||
STUB fallbacks are accepted migration scaffolding, but the validated build must use the
|
||||
real, legacy-faithful (ON) path.
|
||||
|
||||
## Preservation rules
|
||||
|
||||
- Migration-only: every change must be justified against the legacy Qt5 source at the same
|
||||
relative path. No behavior change in the ON-variant / validated build.
|
||||
- No refactoring, no style cleanup, no warning suppression, no new features, no
|
||||
opportunistic modernization.
|
||||
- Do not restore removed modules or the `ElevationMap/` directory unless this task
|
||||
explicitly requires it.
|
||||
- Never commit generated outputs. No fake/dummy/stub files beyond the accepted
|
||||
`BUILD_ARCGIS`/`BUILD_WITH_EXTERNAL_DDS` scaffolding that already exists.
|
||||
- Any required existing stub/forward declaration must live only under
|
||||
`qt6-after/qt6-migrated-legatus/forward-declarations/` or
|
||||
`qt6-after/qt6-migrated-legatus/.forward-declarations/include/`; do not leave such files
|
||||
in service/plugin directories.
|
||||
- Keep the `Esri::ArcGISRuntime::*` type names (do not "modernize" them away).
|
||||
- Keep the SIDC symbology pure-Qt: do not introduce arcgis includes into `Symbology/`,
|
||||
`SymbologyImpl/`, or `SymbologyXML/` (they have none today).
|
||||
|
||||
## Legacy comparison (required validation step)
|
||||
|
||||
This step proves the migration did not change code behavior.
|
||||
|
||||
Reference audit command (reproduce; CRLF-ignored, only files present in both trees):
|
||||
|
||||
```bash
|
||||
cd ./qt-migration-legatus
|
||||
LEG=qt5-before/qt5-legatus-legacy/Lts/Viewer/SituationMap
|
||||
MIG=qt6-after/qt6-migrated-legatus/Lts/Viewer/SituationMap
|
||||
: > /tmp/sym_cr.diff; n_real=0
|
||||
while IFS= read -r rel; do
|
||||
if [[ -f "$LEG/$rel" && -f "$MIG/$rel" ]] && ! diff -q "$LEG/$rel" "$MIG/$rel" >/dev/null 2>&1; then
|
||||
if diff -q --strip-trailing-cr "$LEG/$rel" "$MIG/$rel" >/dev/null 2>&1; then :; else
|
||||
n_real=$((n_real+1)); diff -u --strip-trailing-cr "$LEG/$rel" "$MIG/$rel" >> /tmp/sym_cr.diff
|
||||
fi
|
||||
fi
|
||||
done < <(cd "$LEG" && find . -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.hpp' \) | sed 's#^\./##' | sort)
|
||||
echo "files with real changes: $n_real"
|
||||
```
|
||||
|
||||
For every file you edit (and, as a sweep, every in-scope file):
|
||||
|
||||
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
|
||||
(e.g. a pure-Qt6 scaffolding header), say so and compare against the pre-migration
|
||||
baseline.
|
||||
2. Produce the audit diff: migrated result vs legacy (CRLF-ignored).
|
||||
3. Classify every hunk of the audit diff into exactly one category:
|
||||
- `qt6-api`: mandatory Qt5→Qt6 API adaptation (the pattern list above)
|
||||
- `sdk300-api`: mandatory ArcGIS old-SDK → Maps-SDK-300 adaptation
|
||||
- `build`: CMake/docker/test-infra change with no runtime semantics
|
||||
- `stub-scaffolding`: an accepted `#ifdef BUILD_ARCGIS` / `BUILD_WITH_EXTERNAL_DDS`
|
||||
guard (documented, OFF-path only)
|
||||
- `semantic-change`: anything else
|
||||
4. Every `semantic-change` hunk is a failure of this task 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.
|
||||
5. Record the per-file hunk classification (counts per category is sufficient; list every
|
||||
`semantic-change` hunk explicitly) in the final report.
|
||||
|
||||
## Docker and CI
|
||||
|
||||
- Authoritative validation script:
|
||||
`./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh`
|
||||
- Prebuilt image `legatus-qt6-prebuilt:latest` (has local PostgreSQL; the DB is
|
||||
auto-provisioned by the `ensure_database` step — no office DB needed).
|
||||
- ArcGIS SDK under `/workspace/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/
|
||||
qt300.0.0/sdk` (mounted from the pipeline root `external/`); repo root at `/workspace`.
|
||||
- `new_docker_build.sh` is the single validation script; do not reintroduce a second script.
|
||||
|
||||
## Required procedure
|
||||
|
||||
1. Read the base prompts. `git fetch origin`; confirm the working branch and the working-
|
||||
tree state (protect the two uncommitted files from "Branches and trees").
|
||||
2. Confirm the ArcGIS SDK 300.0.0 directory exists at the pipeline-root `external/` path
|
||||
(and therefore `/workspace/external/...` in the container).
|
||||
3. Re-run the audit command over `SituationMap/` and `Lts/Plugins/AdvancedSymbology/`
|
||||
(CRLF-ignored); confirm the baseline (SituationMap ~96 files, AdvancedSymbology 37 files,
|
||||
all migration-only). Record any drift.
|
||||
4. For each in-scope file, diff vs legacy and classify every hunk (see "Legacy comparison").
|
||||
Fix any `semantic-change` back to legacy semantics (with approved adaptations) or report
|
||||
a blocker.
|
||||
5. Resolve the four "Verify carefully" items (Role value mapping; the DDS roleToRole stub
|
||||
real-path vs legacy; the logger pattern; the filter API pairing).
|
||||
6. Reconcile the ArcGIS include style (the `arcgis/` prefix question) across the 11 migrated
|
||||
arcgis includes to ONE consistent form that matches the SDK 300 include path set in CMake.
|
||||
Record which form you chose and why.
|
||||
7. Confirm the Esri dictionary processors still parse the same `.style` / MIL-STD-2525D /
|
||||
App-6 / App-6D dictionaries as legacy (same `Esri::ArcGISRuntime::*` types, same symbol
|
||||
results; only includes changed).
|
||||
8. Build the symbology targets with `BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_ARCGIS=ON` (the
|
||||
Viewer/SituationMap targets + the AdvancedSymbology plugin targets + `expand_polygon`)
|
||||
and confirm they compile **and link** against the 300.0.0 SDK.
|
||||
9. Run the relevant CTest tests.
|
||||
10. Create the commit(s) (see "Commits").
|
||||
11. Report factual status and write the summary (see "Summary").
|
||||
|
||||
Do not push. The result stays local on the working branch until the user says otherwise.
|
||||
|
||||
## Required validation
|
||||
|
||||
Targeted (fast, focused) — from the repo root, in the validation container (repo at
|
||||
`/workspace`):
|
||||
|
||||
```bash
|
||||
cmake -S /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus \
|
||||
-B /workspace/build-arcgis300-symbology -G Ninja -DCMAKE_BUILD_TYPE=Debug \
|
||||
-DBUILD_RTI=ON -DBUILD_GRANTLEE=ON -DBUILD_ARCGIS=ON \
|
||||
-DUSE_IPO=ON -DUSE_UNITY_BUILD=ON -DGUEZ_MODE=ON -DBUILD_WLS=ON \
|
||||
-DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/
|
||||
# Discover the exact SituationMap + AdvancedSymbology target names from the
|
||||
# SituationMap/AdvancedSymbology CMakeLists (or new_docker_build.sh's GROUP5_TARGETS),
|
||||
# then build only those (faster than the whole tree):
|
||||
cmake --build /workspace/build-arcgis300-symbology --target <situationmap_target> \
|
||||
<asb_symbol_editor> <asb_symbol_proxy> <asb_data_plugin> --parallel
|
||||
ctest --test-dir /workspace/build-arcgis300-symbology --output-on-failure
|
||||
```
|
||||
|
||||
End-to-end via the validation script (the Viewer group carries the SituationMap targets;
|
||||
also build the group that owns the AdvancedSymbology plugin targets — identify it from
|
||||
`GROUPn_TARGETS` in `new_docker_build.sh`):
|
||||
|
||||
```bash
|
||||
cd ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
|
||||
BUILD_RTI=ON BUILD_GRANTLEE=ON BUILD_ARCGIS=ON ./new_docker_build.sh \
|
||||
--use-prebuilt-image --docker-image legatus-qt6-prebuilt:latest --group5
|
||||
```
|
||||
|
||||
Mandatory positive checks:
|
||||
|
||||
- The SituationMap map layer compiles and links against the ArcGIS Maps SDK 300.0.0 targets
|
||||
(no undefined `Esri::ArcGISRuntime::*` refs; no Qt5 imported-target links).
|
||||
- The Esri dictionary-symbol processors build and the SIDC codec/dictionary tests pass
|
||||
(same symbol results as legacy for the same inputs).
|
||||
- The AdvancedSymbology plugin targets build.
|
||||
- No `***Failed`/`***Timeout` CTest entries beyond documented base-state failures
|
||||
(record any base-state failures as base state, do not weaken a test to make it pass).
|
||||
- No active Qt5 imported-target links (`Qt5::`, `find_package(Qt5`, `Qt5Core`, …) in the
|
||||
touched targets.
|
||||
|
||||
Do not run or validate OFF variants of `BUILD_RTI`/`BUILD_GRANTLEE`.
|
||||
|
||||
## Commits
|
||||
|
||||
Commits on the working branch:
|
||||
|
||||
- Single author — the user's git identity (berrux-dev <berrux.kana@axilinx.com>). The user is
|
||||
the only author; do NOT add any co-author, co-authored-by, or bot attribution lines of any
|
||||
kind.
|
||||
- Message: maximum 2 lines (one subject line plus at most one short body line), no blank-line
|
||||
separators, no extra metadata. Subject example:
|
||||
`Qt6: verify/complete ArcGIS 300 symbology migration (SituationMap + AdvancedSymbology)`
|
||||
- The repository has `commit.gpgsign=false`: sign every created commit explicitly
|
||||
(`git commit -S`). Follow `./prompts/commit-policy.prompt.md` for repository mapping and
|
||||
pre-commit checks. If signing is not configured in this repository context, stop and
|
||||
report the exact reason instead of committing unsigned.
|
||||
- Keep the two unrelated uncommitted files (`new_docker_build.sh` DB step,
|
||||
`tests/CMakeLists.txt` guard fixes) OUT of the symbology commit unless the user says
|
||||
otherwise.
|
||||
- If a fix requires an additional commit, the same 2-line / single-author / no-attribution /
|
||||
signed rules apply.
|
||||
|
||||
## Success criteria
|
||||
|
||||
Success requires:
|
||||
|
||||
- every in-scope file diffed vs legacy and every hunk classified; zero unexplained
|
||||
`semantic-change` hunks (each one either fixed to legacy semantics or reported as a blocker)
|
||||
- the four "Verify carefully" items resolved with evidence (Role 1:1 mapping; the DDS
|
||||
roleToRole stub real-path matches legacy and does not leak into the ON build; the logger
|
||||
pattern is sound; the filter API pairing is correct)
|
||||
- the 11 migrated arcgis includes reconciled to ONE consistent include style (recorded)
|
||||
- the Esri dictionary processors confirmed to parse the same dictionaries as legacy
|
||||
- configure, build (link), and CTest pass with `BUILD_RTI=ON BUILD_GRANTLEE=ON
|
||||
BUILD_ARCGIS=ON` for the symbology targets
|
||||
- no active Qt5 imported-target links in the touched targets; generated outputs build-tree
|
||||
only, never committed; no fake/dummy/stub files beyond the accepted scaffolding
|
||||
- required stubs/forward declarations only in allowed directories
|
||||
- no OFF-variant logic/stubs for `BUILD_RTI`/`BUILD_GRANTLEE` introduced
|
||||
- the commits are signed (verify Good), single-author, ≤2-line, no bot attribution
|
||||
- no push performed
|
||||
|
||||
## If blocked
|
||||
|
||||
Do not fake success. Report:
|
||||
|
||||
- failing command and key error output
|
||||
- affected file/branch
|
||||
- category: project, path, CMake, Qt API, ArcGIS-SDK-300, DDS-generated-types, codegen,
|
||||
Docker, RTI/license, test, CTest, stub scaffolding, or environment
|
||||
- the specific in-scope file and hunk, and which category it was misclassified as
|
||||
- what was resolved safely, what remains blocked
|
||||
- whether stale artifacts were ruled out
|
||||
- whether generated files or the ArcGIS SDK path were involved
|
||||
- the legacy comparison status for the unresolved files
|
||||
|
||||
## Final report
|
||||
|
||||
Keep it short. Include:
|
||||
|
||||
- status: validated, partially validated, or blocked
|
||||
- the working branch name and the commit hash(es) (signed)
|
||||
- the re-run audit baseline (SituationMap / AdvancedSymbology file + changed-line counts) and
|
||||
any drift vs the 2026-10-06 baseline
|
||||
- per-scope-area hunk counts by category, and every `semantic-change` hunk with its
|
||||
justification or fix
|
||||
- the four "Verify carefully" resolutions with evidence (Role mapping; DDS stub real-path;
|
||||
logger; filter API)
|
||||
- the ArcGIS include-style decision (prefix vs bare) and the reason
|
||||
- the Esri dictionary-processor equivalence evidence
|
||||
- exact validation commands and results (targeted build + the `--group5` docker run + ctest)
|
||||
- remaining blockers or risks
|
||||
|
||||
## Summary
|
||||
|
||||
Write a `MIGRATION_SUMMARY_ARCGIS300_SYMBOLOGY.md` (same style/convention as
|
||||
`MIGRATION_SUMMARY_Z_AND_PROXIES.md`) documenting: the scope audited, the migration-only
|
||||
pattern classes found, the four verify-carefully resolutions, the ArcGIS 300 include-style
|
||||
reconciliation, the validation commands/results, and the remaining blockers. Place it at the
|
||||
migrated-tree root (`qt6-after/qt6-migrated-legatus/`) and commit it with the work.
|
||||
Reference in new issue
Block a user