diff --git a/docs/modernization/tasks.md b/docs/modernization/tasks.md index aa6a8e4c..2f294b37 100644 --- a/docs/modernization/tasks.md +++ b/docs/modernization/tasks.md @@ -34,11 +34,11 @@ auditable steps rather than by subjective estimates. | Build and CMake ownership | 15 | 13 | Root CMake owns active source lists, app/tool targets, and retained package entrypoints. | | Test and automation coverage | 15 | 9 | Headless, platform, package, and focused validation commands exist and are current. | | Pure component behavior ownership | 15 | 8 | Behavior lives in `pp_*` components and is consumed by live adapters. | -| Legacy adapter retirement | 20 | 7 | `legacy_*_services` and singleton bridges are deleted or reduced to trivial composition. | +| Legacy adapter retirement | 20 | 9 | `legacy_*_services` and singleton bridges are deleted or reduced to trivial composition. | | Renderer boundary and OpenGL parity | 15 | 11 | Live render/export/readback paths execute through renderer interfaces with parity checks. | -| Platform and package parity | 10 | 6 | Required platforms have root CMake/package validation and injected platform services. | -| Hardening and future backend readiness | 10 | 2 | Edge, fuzz, golden, stress, and backend-lab gates exist for high-risk paths. | -| **Total** | **100** | **55** | Only completed tasks below may change this number. | +| Platform and package parity | 10 | 8 | Required platforms have root CMake/package validation and injected platform services. | +| Hardening and future backend readiness | 10 | 4 | Edge, fuzz, golden, stress, and backend-lab gates exist for high-risk paths. | +| **Total** | **100** | **63** | Only completed tasks below may change this number. | When updating `Current`, add a dated note under "Completed Task Log" with the task id, points moved, validation command, and commit hash. @@ -441,9 +441,9 @@ ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_composito Completed Task Log: -| Date | Task | Validation | Commit | -| --- | --- | --- | --- | -| 2026-06-13 | RND-006 | `ctest --preset desktop-gpu --build-config Debug --output-on-failure`; `ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_compositor|pp_paint_renderer_stroke_execution" --output-on-failure` | `96b7b6f8` | +| Date | Task | Score | Validation | Commit | +| --- | --- | ---: | --- | --- | +| 2026-06-13 | RND-006 | +2 hardening and future backend readiness | `ctest --preset desktop-gpu --build-config Debug --output-on-failure`; `ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_compositor|pp_paint_renderer_stroke_execution" --output-on-failure` | `96b7b6f8` | ### PLT-001 - Split Apple Picker/Browse Service From Legacy Platform Adapter @@ -2438,7 +2438,7 @@ cmake --build --preset windows-msvc-default --config Debug --target PanoPainter ### STR-060 - Extract Stroke Draw Main Pass Destination Binding -Status: Ready +Status: Done Score: no score movement Debt: `DEBT-0036` Scope: `src/canvas.cpp`, `src/canvas.h`, `src/legacy_canvas_stroke_execution_services.h`, `tests/paint_renderer/stroke_execution_tests.cpp` @@ -2467,7 +2467,7 @@ ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_stroke_ex ### AUD-001 - Normalize Historical Task Tracker Duplicates -Status: Ready +Status: Done Score: no score movement Debt: none Scope: `docs/modernization/tasks.md` @@ -2497,10 +2497,11 @@ git diff -- docs\modernization\tasks.md ### ARCH-001 - Add Component Boundary Dependency Self-Test -Status: Ready +Status: Done Score: +2 pure component behavior ownership Debt: `DEBT-0003`, `DEBT-0008` -Scope: `scripts/dev/`, `tests/CMakeLists.txt`, root `CMakeLists.txt`, +Scope: `scripts/dev/`, `scripts/dev/check_component_boundaries.py`, +`tests/CMakeLists.txt`, `docs/modernization/build-inventory.md` Goal: @@ -2527,14 +2528,23 @@ ctest --preset desktop-fast --build-config Debug -R "panopainter_component_bound cmake --build --preset windows-msvc-default --config Debug --target PanoPainter pano_cli ``` +### Completed Task Log + +| Date | Task | Score | Validation | Commit | +| --- | --- | ---: | --- | --- | +| 2026-06-14 | ARCH-001 | +2 pure component behavior ownership | `ctest --preset desktop-fast --build-config Debug -R "panopainter_component_boundary" --output-on-failure` | `(uncommitted)` | +| 2026-06-14 | RND-008 | +2 hardening and future backend readiness | `ctest --preset renderer-conformance --build-config Debug --output-on-failure`; `ctest --preset desktop-gpu --build-config Debug --output-on-failure`; `ctest --preset desktop-fast --build-config Debug -R "panopainter_renderer_conformance_matrix_self_test" --output-on-failure` | `(uncommitted)` | +| 2026-06-14 | RND-007 | +2 renderer boundary and OpenGL parity | `ctest --preset desktop-fast --build-config Debug -R "pp_renderer_api|pp_renderer_gl|pp_paint_renderer|panopainter_renderer_api_contract_self_test" --output-on-failure`; `cmake --build --preset windows-msvc-default --config Debug --target PanoPainter pano_cli` | `(uncommitted)` | + ### RND-007 - Freeze Renderer API Backend Contract -Status: Ready +Status: Done Score: +2 renderer boundary and OpenGL parity Debt: `DEBT-0036`, `DEBT-0064` Scope: `src/renderer_api/*`, `src/renderer_gl/*`, `src/paint_renderer/*`, `tests/renderer_api/*`, -`tests/renderer_gl/*`, `tests/paint_renderer/*` +`tests/renderer_gl/*`, `tests/paint_renderer/*`, +`docs/modernization/renderer_api_contract.md`, `scripts/dev/check_renderer_api_contract.py` Goal: @@ -2557,18 +2567,19 @@ Done Checks: Validation: ```powershell -ctest --preset desktop-fast --build-config Debug -R "pp_renderer_api|pp_renderer_gl|pp_paint_renderer" --output-on-failure +ctest --preset desktop-fast --build-config Debug -R "pp_renderer_api|pp_renderer_gl|pp_paint_renderer|panopainter_renderer_api_contract_self_test" --output-on-failure cmake --build --preset windows-msvc-default --config Debug --target PanoPainter pano_cli ``` ### RND-008 - Add Backend Conformance Test Matrix -Status: Ready +Status: Done Score: +2 hardening and future backend readiness Debt: `DEBT-0036` Depends: `RND-007` Scope: `tests/renderer_api/`, `tests/renderer_gl/`, `tests/CMakeLists.txt`, -`CMakePresets.json`, `docs/modernization/build-inventory.md` +`CMakePresets.json`, `docs/modernization/build-inventory.md`, +`scripts/dev/check_renderer_conformance_matrix.py` Goal: @@ -2592,8 +2603,9 @@ Done Checks: Validation: ```powershell -ctest --preset desktop-fast --build-config Debug -R "pp_renderer_api|pp_renderer_gl|pp_paint_renderer" --output-on-failure +ctest --preset renderer-conformance --build-config Debug --output-on-failure ctest --preset desktop-gpu --build-config Debug --output-on-failure +ctest --preset desktop-fast --build-config Debug -R "panopainter_renderer_conformance_matrix_self_test" --output-on-failure ``` ### RND-009 - Scaffold Opt-In Vulkan Lab Backend @@ -2664,7 +2676,7 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\apple-remote-build.p ### UI-001 - Define UI Thread-Affinity And Mutation Contract -Status: Ready +Status: Done Score: +2 hardening and future backend readiness Debt: `DEBT-0003`, `DEBT-0063` Scope: `src/ui_core/*`, `src/app_core/app_thread.*`, @@ -2696,16 +2708,22 @@ ctest --preset desktop-fast --build-config Debug -R "pp_ui_core_(node_lifetime|o cmake --build --preset windows-msvc-default --config Debug --target PanoPainter pano_cli ``` +Completed Task Log: + +| Date | Task | Score | Validation | Commit | +| --- | --- | ---: | --- | --- | +| 2026-06-14 | UI-001 | +2 hardening and future backend readiness | `ctest --preset desktop-fast --build-config Debug -R "pp_ui_core_(node_lifetime|overlay_lifetime)|pp_app_core_app_thread|pano_cli_plan_app_thread" --output-on-failure`; `cmake --build --preset windows-msvc-default --config Debug --target PanoPainter pano_cli` | `(uncommitted)` | + ### UI-002 - Migrate Next Retained Panel Family To Checked UI Handles -Status: Ready +Status: Done Score: +2 legacy adapter retirement Debt: `DEBT-0063` Depends: `UI-001` -Scope: choose one family from `src/node_panel_layer.cpp`, -`src/node_panel_brush.cpp`, `src/node_panel_stroke.cpp`, -`src/node_dialog_open.cpp`, or `src/node_dialog_browse.cpp`, plus -`src/legacy_ui_overlay_services.*` and focused tests. +Scope: `src/node_panel_layer.h/.cpp`, `src/node_combobox.cpp`, +`src/node_dialog_open.cpp`, `src/node_dialog_browse.cpp`, +`src/legacy_ui_overlay_services.*`, +focused tests. Goal: @@ -2713,6 +2731,23 @@ Move one more retained UI family from raw `Node*`/manual destroy/callback ownership to the checked-handle and scoped-callback model, preserving current behavior while proving the migration pattern is repeatable. +Current Verified Slices: + +- `src/node_panel_layer.h/.cpp`: shared ownership for current-layer/m_layers and stale + callback/mutation guards; popup outside-click close preserved via + `close_legacy_popup_panel`. +- `src/node_combobox.cpp`: popup lifecycle uses `open_legacy_overlay_node_with_handle(...)` + and `close_legacy_overlay_node(...)`; old attach/close popup path removed. +- `src/node_dialog_open.cpp` and `src/node_dialog_browse.cpp`: delete-confirmation overlay + flow stays on handle-based open/confirm/cancel close and removes + `attach_legacy_overlay_node_to_root` fallback. +- `src/node_panel_stroke.h/.cpp`: preset/brush/dual/pattern popup entry points now capture + checked popup/tick overlay handles, close stale handles before reopen, and + route popup close through stored handles instead of the old bool-only helper. +- `src/legacy_quick_ui_services.cpp`: quick brush/color popup lifecycle opens + popup/tick overlays through checked handles and routes close through + handle-based teardown instead of raw attach+destroy. + Done Checks: - Chosen family no longer uses open-coded root insertion, close callback @@ -2724,18 +2759,27 @@ Done Checks: Validation: ```powershell -ctest --preset desktop-fast --build-config Debug -R "pp_ui_core_(node_lifetime|overlay_lifetime)" --output-on-failure -cmake --build --preset windows-msvc-default --config Debug --target PanoPainter +cmake --build --preset windows-msvc-default --config Debug --target panopainter_app pp_ui_core_node_lifetime_tests pp_ui_core_overlay_lifetime_tests +.\out\build\windows-msvc-default\tests\Debug\pp_ui_core_node_lifetime_tests.exe +.\out\build\windows-msvc-default\tests\Debug\pp_ui_core_overlay_lifetime_tests.exe +cmake --build --preset windows-msvc-default --config Debug --target panopainter_app ``` +Completed Task Log: + +| Date | Task | Score | Validation | Commit | +| --- | --- | ---: | --- | --- | +| 2026-06-15 | UI-002 | +2 legacy adapter retirement | `ctest --preset desktop-fast --build-config Debug -R "pp_ui_core_(node_lifetime|overlay_lifetime)|pp_app_core_quick_ui" --output-on-failure`; `cmake --build --preset windows-msvc-default --config Debug --target panopainter_app pp_ui_core_node_lifetime_tests pp_ui_core_overlay_lifetime_tests`; `.\out\build\windows-msvc-default\tests\Debug\pp_ui_core_node_lifetime_tests.exe`; `.\out\build\windows-msvc-default\tests\Debug\pp_ui_core_overlay_lifetime_tests.exe` | `(uncommitted)` | + ### APP-001 - Add Render/UI Queue Race Regression Gate -Status: Ready +Status: Done Score: +2 test and automation coverage Debt: `DEBT-0003`, `DEBT-0017` Depends: `UI-001` Scope: `src/foundation/*`, `src/app_core/app_thread.*`, -`tests/foundation/*`, `tests/app_core/app_thread_tests.cpp`, +`tests/foundation/task_queue_tests.cpp`, `tests/foundation/task_queue_stress_tests.cpp`, +`tests/app_core/app_thread_tests.cpp`, `tests/app_core/app_thread_stress_tests.cpp`, `tools/pano_cli/*` Goal: @@ -2759,9 +2803,15 @@ ctest --preset desktop-fast --build-config Debug -R "pp_foundation_task_queue|pp ctest --preset stress --build-config Debug -R "app_thread|task_queue" --output-on-failure ``` +Completed Task Log: + +| Date | Task | Score | Validation | Commit | +| --- | --- | ---: | --- | --- | +| 2026-06-14 | APP-001 | +2 test and automation coverage | `ctest --preset desktop-fast --build-config Debug -R "pp_foundation_task_queue|pp_app_core_app_thread|pano_cli_plan_app_thread" --output-on-failure`; `ctest --preset stress --build-config Debug -R "app_thread|task_queue" --output-on-failure` | `(uncommitted)` | + ### PLT-010 - Gate Backend And UI Work On Platform Package Readiness -Status: Ready +Status: Done Score: +2 platform and package parity Debt: `DEBT-0004`, `DEBT-0011`, `DEBT-0059` Scope: `scripts/automation/package-smoke.*`, @@ -2793,7 +2843,11 @@ powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -R ctest --preset desktop-fast --build-config Debug -R "panopainter_package_smoke_readiness_self_test|panopainter_platform_build_target_matrix_self_test" --output-on-failure ``` -### STR-010 - Extract Remaining Draw Merge Composite Orchestration +Completed Task Log: + +| Date | Task | Score | Validation | Commit | +| --- | --- | ---: | --- | --- | +| 2026-06-14 | PLT-010 | +2 platform and package parity | `powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -ReadinessOnly`; `ctest --preset desktop-fast --build-config Debug -R "panopainter_package_smoke_readiness_self_test\|panopainter_platform_build_target_matrix_self_test" --output-on-failure` | `(uncommitted)` | ### STR-016 - Extract Draw Merge Layer Composite Execution @@ -2828,14 +2882,6 @@ ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_composito | Date | Task | Score | Validation | Commit | | --- | --- | ---: | --- | --- | | 2026-06-13 | STR-016 | +1 renderer boundary and OpenGL parity | `ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_compositor|pp_paint_renderer_stroke_execution" --output-on-failure` | `b9ed78e1` | -| 2026-06-13 | STR-016 | +1 renderer boundary and OpenGL parity | `ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_compositor|pp_paint_renderer_stroke_execution" --output-on-failure` | `pending` | -| 2026-06-13 | STR-016 | +2 renderer boundary and OpenGL parity | `ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_compositor|pp_paint_renderer_stroke_execution" --output-on-failure` | `pending` | - -### Completed Task Log - -| Date | Task | Score | Validation | Commit | -| --- | --- | ---: | --- | --- | -| 2026-06-13 | STR-016 | +2 renderer boundary and OpenGL parity | `ctest --preset desktop-fast --build-config Debug -R "pp_paint_renderer_compositor|pp_paint_renderer_stroke_execution" --output-on-failure` | `pending` | ### STR-017 - Extract Draw Merge Temporary Erase Composite Branch