Centralize legacy document open bridge
This commit is contained in:
@@ -583,10 +583,15 @@ Known local toolchain state:
|
||||
decisions, plus bulk upload progress visibility, zero-file, and clamped
|
||||
progress-total decisions.
|
||||
- `pp_app_core_document_session_tests` covers clean and dirty app session,
|
||||
document-open action planning, save-request, save-before-workflow,
|
||||
new-document target/resolution/overwrite planning, document file target,
|
||||
combined save-file overwrite planning, and save-version target decisions
|
||||
without requiring a window, canvas, or message box.
|
||||
document-open action planning and executor dispatch/rejection, save-request,
|
||||
save-before-workflow, new-document target/resolution/overwrite planning,
|
||||
document file target, combined save-file overwrite planning, and save-version
|
||||
target decisions without requiring a window, canvas, or message box.
|
||||
- `src/legacy_document_open_services.*` is the current app-shell bridge between
|
||||
`pp_app_core` document-open plans and live ABR/PPBR import prompts,
|
||||
unsaved-project discard prompts, project opening, layer UI refresh, title
|
||||
updates, and action-history clearing; remaining legacy execution ownership is
|
||||
tracked by `DEBT-0039`.
|
||||
- `src/legacy_history_services.*` is the current app-shell bridge between
|
||||
`pp_app_core` history plans and legacy `ActionManager`; toolbar and
|
||||
`NodeCanvas` hotkeys share it while document-history extraction remains
|
||||
|
||||
@@ -56,6 +56,7 @@ agent or engineer to remove them without reconstructing context from chat.
|
||||
| DEBT-0036 | Open | Modernization | `pp_renderer_api`, `pp_paint_renderer`, `pano_cli plan-paint-feedback`, and `pano_cli plan-stroke-composite` can choose backend-neutral complex paint feedback strategies for fixed-function blending, framebuffer-fetch-capable renderers, or ping-pong render targets. OpenGL extension detection now stores `pp::renderer::RenderDeviceFeatures` through `ShaderManager`, using `pp_renderer_gl::render_device_features` as the backend conversion point. `pp_paint_renderer::plan_canvas_blend_gate` owns the compatibility mapping from persisted layer/brush blend indices to the extracted stroke-composite planner, and live `Canvas::draw_merge` plus `NodeCanvas` panorama rendering both call it with the stored renderer-neutral feature set for their existing shader-blend gates and destination-copy versus framebuffer-fetch decisions. `pp_paint_renderer::plan_canvas_stroke_feedback` also owns the current destination-feedback decision, and live `Canvas::stroke_draw`, thumbnail layer blending, and `NodeStrokePreview` brush-preview rendering use it for framebuffer-fetch versus destination-copy decisions. Actual live stroke rasterization, dual-brush compositing, pattern feedback math, thumbnail layer compositing, and brush-preview compositing still use legacy OpenGL canvas/UI execution | Preserve current painting behavior while the renderer boundary matures for OpenGL parity and later Vulkan/Metal experiments | `pp_renderer_api_tests`; `pp_renderer_gl_capabilities_tests`; `pp_paint_renderer_compositor_tests`; `pano_cli plan-paint-feedback --framebuffer-fetch --explicit-transitions --render-only`; `pano_cli plan-paint-feedback --texture-copy`; `pano_cli plan-stroke-composite --stroke-blend 10 --framebuffer-fetch --explicit-transitions --render-only`; `pano_cli plan-stroke-composite --layer-blend 4 --dual-blend --texture-copy`; `ctest --preset desktop-fast --build-config Debug`; `cmake --build --preset windows-msvc-default --config Debug --target PanoPainter` | Live stroke/layer compositing chooses its feedback path through `pp_paint_renderer` and renderer services, with OpenGL golden parity and Vulkan/Metal lab tests covering framebuffer-fetch and ping-pong behavior |
|
||||
| DEBT-0037 | Open | Modernization | Recording lifecycle/export planning and execution dispatch now consume pure `pp_app_core` through `App::rec_start`, `App::rec_stop`, `App::rec_clear`, `App::rec_export`, `pano_cli plan-recording-session`, and the `RecordingServices` boundary; live execution is centralized in `src/legacy_recording_services.*`, but the bridge still owns legacy recording thread startup/shutdown, platform recorded-file cleanup, progress UI, PBO readback through `App::rec_loop`, and `MP4Encoder::write_mp4` execution | Preserve current timelapse/MP4 behavior while recording moves toward app/document/renderer/video services | `pp_app_core_document_recording_tests`; `pano_cli plan-recording-session --running --frame-count 12`; `pano_cli plan-recording-session --platform-clears-files`; `ctest --preset desktop-fast --build-config Debug` | Recording thread lifecycle, frame readback, platform cleanup, progress reporting, and MP4 writing are owned by injected app/renderer/video services with `App` methods acting only as adapters |
|
||||
| DEBT-0038 | Open | Modernization | Cloud upload/browse/bulk planning and execution dispatch now consume pure `pp_app_core` through `App::cloud_upload`, `App::cloud_upload_all`, `App::cloud_browse`, `pano_cli plan-cloud-upload`, `pano_cli plan-cloud-upload-all`, `pano_cli plan-cloud-browse`, and the `CloudServices` boundary; live execution is centralized in `src/legacy_cloud_services.*`, but the bridge still uses legacy save-before-upload, `upload`/`download` network helpers, progress/message UI, OpenGL context guarding, `NodeDialogCloud`, `Canvas` project open, layer refresh, and `ActionManager` reset | Preserve current cloud behavior while cloud/network/document import flows move toward app/document/platform services | `pp_app_core_document_cloud_tests`; `pano_cli plan-cloud-upload --new-document --unsaved`; `pano_cli plan-cloud-browse --selected-file demo.ppi`; `pano_cli plan-cloud-upload-all --file-count 3`; `ctest --preset desktop-fast --build-config Debug` | Cloud upload/download, save-before-upload, progress reporting, cloud browse dialog, downloaded project opening, layer refresh, OpenGL context ownership, and action-history reset are owned by injected app/document/network/platform/renderer services with `App` methods acting only as adapters |
|
||||
| DEBT-0039 | Open | Modernization | Document-open planning and execution dispatch now consume pure `pp_app_core` through `App::open_document`, `pano_cli plan-open-route`, `DocumentOpenServices`, and `src/legacy_document_open_services.*`, but the bridge still opens ABR/PPBR import prompts, launches legacy brush preset import threads, applies unsaved-project discard prompts, calls legacy project-open execution, refreshes layer UI, updates the app title, and clears legacy history directly | Preserve current file-open/import behavior while document loading and brush import move toward app/document/asset/UI services | `pp_app_core_document_route_tests`; `pp_app_core_document_session_tests`; `pano_cli plan-open-route --path D:/Paint/Scenes/demo.ppi --unsaved`; `pano_cli plan-open-route --path D:/Paint/Brushes/clouds.ABR --unsaved`; `ctest --preset desktop-fast --build-config Debug` | Brush import prompting/execution, project-open execution, unsaved-project discard prompting, layer refresh, title updates, and history clearing are owned by injected app/document/asset/UI services with `App::open_document` acting only as an adapter |
|
||||
|
||||
## Closed Debt
|
||||
|
||||
|
||||
@@ -728,6 +728,11 @@ layer-refresh, and action-history work remains tracked under `DEBT-0038`.
|
||||
`pano_cli parse-layout` exercises the XML layout path. Continue expanding
|
||||
document behavior toward legacy Canvas parity and then port OpenGL classes
|
||||
behind the renderer boundary.
|
||||
`App::open_document` now routes through the app-core document-open executor and
|
||||
`src/legacy_document_open_services.*`, preserving ABR/PPBR import prompts,
|
||||
unsaved-project discard prompts, project open, layer refresh, title updates,
|
||||
and history clearing while those live effects remain tracked under
|
||||
`DEBT-0039`.
|
||||
|
||||
Implementation tasks:
|
||||
|
||||
@@ -1260,6 +1265,13 @@ Results:
|
||||
- `scripts/automation/package-smoke.ps1 -Preset windows-msvc-default
|
||||
-Configuration Debug` passed executable/data checks after the cloud bridge
|
||||
split; package target migration blockers remain under `DEBT-0011`.
|
||||
- `PanoPainter`, `pp_app_core_document_session_tests`, and `pano_cli` built
|
||||
after `App::open_document` moved live execution behind the document-open
|
||||
services bridge. A clean rebuild was required once because MSVC reported the
|
||||
known Debug PDB `LNK1103` corruption, after which the build passed.
|
||||
- Focused document-open CTest coverage passed for
|
||||
`pp_app_core_document_route_tests`, `pp_app_core_document_session_tests`, and
|
||||
the `pano_cli_plan_open_route_*` smoke tests after the live bridge split.
|
||||
- `pp_app_core_document_recording_tests` passed, covering recording start/stop,
|
||||
clear, platform recorded-file cleanup, frame-count reset, export progress
|
||||
totals, and oversized progress-total clamping.
|
||||
|
||||
Reference in New Issue
Block a user