8.3 KiB
8.3 KiB
PanoPainter Capability Map
Status: live Last updated: 2026-06-05
This map is the preservation checklist for the modernization. When a component is extracted, update the relevant rows with the owning component, test label, and validation command.
Project And Documents
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| PPI open/save | Canvas, serializer, dialogs |
pp_document, pp_assets, pano_cli |
Round-trip tiny project, old-version fixture, corrupt/truncated fixture, live-canvas-to-pp_document snapshot projection with captured RGBA8 payloads, pending renderer-readback counts, save-readiness reporting before retained live saves, pure PPI export from payload-complete snapshots, and renderer-neutral active-frame upload from the same snapshot |
| Open-document routing | App::open_document |
pp_app_core, pano_cli, pp_panopainter_ui, pp_document, pp_assets |
Project/ABR/PPBR route tests, malformed path tests, open-action plan tests, CLI route/action smoke, app open smoke |
| Document session decisions | App::open_document, App::request_close, save hotkeys, file menu, dialogs |
pp_app_core, pano_cli, pp_panopainter_ui |
Clean/dirty/prompt-open/save/save-as/save-version/save-before-workflow/name/new-document resolution/overwrite/version-target decision tests, CLI session, new-document, document-file, and document-version smoke, app close/open/save/new/browse smoke |
| Version metadata | scripts/pre-build.py, version.* |
build system, pp_foundation |
Generated header smoke test, missing-tag behavior |
| Thumbnail generation/read | Canvas, Image |
pp_assets, pp_paint_renderer |
Golden thumbnail, corrupt input, destination-feedback copy/fetch gate |
| Save-as, overwrite prompts | App/dialogs | pp_app_core, pp_panopainter_ui, pp_platform_* |
Decision tests, UI automation, and platform smoke |
| App status and renderer diagnostics | App title/status widgets, extension indicators | pp_app_core, pp_renderer_api, pp_panopainter_ui |
Title/status text tests, renderer diagnostic indicator tests, CLI status smoke, live layout adapter smoke |
Image And Export
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| PNG/JPEG import | Image, Canvas import paths |
pp_assets, pp_document |
Fixture import, malformed file |
| PNG/JPEG export | Canvas, Image, export dialogs |
pp_assets, pp_paint_renderer, pp_app_core |
Golden output tolerance, export start/target planning tests, live export-adapter document snapshot readiness |
| Equirectangular import/export | Canvas, shaders, RTT, export dialogs |
pp_paint_renderer, pp_app_core |
Tiny cube/equirect golden, app-core file target tests, live export-adapter renderer-upload readiness |
| Cube face export | Canvas fallback |
pp_paint_renderer, pp_app_core |
Pure six-face document frame composite, renderer texture-upload bridge, pure face-PNG export helper, app-core face filename planning and write/publish service execution, payload-complete canvas-snapshot renderer-upload and face-PNG automation, live document/renderer face-PNG writer with retained Canvas fallback, OpenGL command-plan coverage, six-face golden set |
| Depth export | Canvas, grid tools |
pp_paint_renderer |
Float/readback validation |
Brush And Painting
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| Brush settings serialization and stroke-panel controls | Brush, Serializer, NodePanelStroke |
pp_paint, pp_assets, pp_app_core, pp_panopainter_ui |
Round-trip and boundary values; stroke slider/toggle/blend/reset planning and invalid setting tests |
| ABR import | ABR, Brush |
pp_assets, pp_paint |
Sample ABR and malformed ABR |
| PPBR import/export | brush panel/dialog | pp_assets, pp_panopainter_ui |
Round-trip fixture |
| Stroke sampling | Stroke, Canvas |
pp_paint |
Property tests for spacing, pressure, jitter |
| Dual brush/pattern behavior | Brush, shaders |
pp_paint, pp_paint_renderer |
Stroke-alpha CPU reference, dual/pattern feedback planning, GPU golden |
| Blend modes | GLSL include files, layer rendering | pp_paint, pp_paint_renderer |
Final RGBA and stroke-alpha CPU reference vectors, pure pp_document face and six-face frame compositing plus renderer texture upload/OpenGL command-plan coverage, fixed-function/framebuffer-fetch/ping-pong stroke composite planning, live Canvas/NodeCanvas blend-gate coverage, live canvas stroke/thumbnail/brush-preview destination-copy coverage, and GPU parity |
| Erase/flood fill/masks | Canvas, modes, shaders |
pp_document, pp_paint_renderer |
Edge masks, alpha lock, dirty rects |
Layers And Animation
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| Layer rename/add/remove/move/merge | Canvas, Layer, actions |
pp_document, pp_app_core |
Rename and operation planning, service-dispatch, no-op preservation, undo/redo invariant tests |
| Blend/opacity/visibility/alpha lock | Layer, UI panels, shaders |
pp_document, pp_app_core, pp_paint_renderer |
Metadata planning, service-dispatch, live-canvas-to-pp_document snapshot projection, CPU model and render golden |
| Selection mask | Canvas mask layer |
pp_document, pp_paint_renderer |
Mask apply/clear edge cases |
| Animation frames | LayerFrame, animation panel |
pp_document, pp_panopainter_ui |
Duration, duplicate, remove, seek |
| MP4/timelapse export | MP4Encoder, recording thread, export dialogs |
pp_assets, pp_paint_renderer, pp_app_core, app |
Recording lifecycle/progress decision tests, smoke export, cancellation, suggested-name tests |
UI And Workflow
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| XML layout parsing | LayoutManager, Node |
pp_ui_core |
Layout fixtures and malformed XML |
| Yoga layout | Node |
pp_ui_core |
Deterministic geometry fixtures |
| Generic controls | NodeButton, sliders, text, images |
pp_ui_core |
Event dispatch and layout tests |
| PanoPainter panels/dialogs | NodePanel*, NodeDialog* |
pp_panopainter_ui |
UI automation scripts |
| Canvas viewport UI | NodeCanvas |
pp_panopainter_ui, pp_paint_renderer |
Input-to-command automation |
| Settings UI | Settings, NodeSettings |
pp_assets, pp_panopainter_ui |
Round-trip settings |
Input, Platform, And Devices
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| Mouse/keyboard/touch/gestures/cursor | App, platform entrypoints |
pp_app_core, pp_platform_api, pp_platform_*, app |
Cursor visibility decision tests, platform service dispatch tests, synthetic event playback |
| Wacom pressure | WacomTablet |
pp_platform_windows |
Adapter smoke with fallback |
| Clipboard/file picker/share/display | App platform methods |
pp_app_core, pp_platform_api, pp_platform_* |
Clipboard read/write, share saved-path, picked-path, and display-file decision tests, platform service display/share/picker dispatch tests, platform smoke or mocked service |
| Virtual keyboard | App, platform entrypoints |
pp_app_core, pp_platform_api, pp_platform_* |
Keyboard visibility decision tests, platform service dispatch tests, platform smoke |
| Desktop XR | HMD, Vive, app_vr, retained OpenVR bridge |
pp_platform_vr, app with OpenXR backend |
Runtime-selection policy tests, compile gate, and mocked pose tests |
| Quest/OVR | Android Quest files | pp_platform_android_quest |
Compile/package gate |
| Focus/Wave | Android Focus files | pp_platform_android_wave |
Compile/package gate |
Cloud, Logging, And Automation
| Capability | Current Area | Target Owner | Required Tests |
|---|---|---|---|
| Upload/download/browse | app_cloud, CURL helpers |
pp_app_core, app service, pp_platform_* |
Upload prompt/new-doc/no-canvas decision tests, bulk-upload progress decision tests, browse/selection decision tests, mocked HTTP and timeout tests |
| License/check flows | app/cloud code | app service | Mocked response tests |
| Logging/crash reporting | log, BugTrap/AppCenter |
pp_foundation, platform wrappers |
Log formatting and platform compile |
| Headless automation | none yet | tools/pano_cli |
JSON command fixtures |
| Tracing | none yet | pp_foundation |
Span nesting/timing tests |