Harden app runtime and thin export shell

This commit is contained in:
2026-06-17 18:15:54 +02:00
parent bc9ba75e49
commit 04a1c5d0b1
13 changed files with 426 additions and 206 deletions

View File

@@ -18,6 +18,23 @@ agent or engineer to remove them without reconstructing context from chat.
## Reductions
- 2026-06-17: `DEBT-0003` was narrowed again. `src/app_runtime.cpp` and
`src/app_runtime.h` now synchronize render/UI worker running state, reject
cross-thread work once those workers stop, and drain queued work through
explicit runtime-owned post/shutdown semantics consumed by
`src/legacy_app_runtime_shell_services.cpp`; broader singleton reach, app
shell ownership, and remaining runtime service adoption still remain.
- 2026-06-17: `DEBT-0017` was narrowed again.
`cmake/PanoPainterSources.cmake` no longer compiles
`${PP_PLATFORM_WEB_SOURCES}` into `PP_PANOPAINTER_APP_SOURCES`, so root app
source ownership no longer mixes live Web platform implementation files into
the retained app group; broader platform entrypoint/package cleanup remains.
- 2026-06-17: `DEBT-0043` was narrowed again.
`src/legacy_canvas_document_io_services.cpp` now delegates the live
equirectangular export family through `src/legacy_document_export_services.*`
instead of carrying that orchestration inline with the broader canvas
document-I/O shell; retained export directory creation, Web handoff, and
remaining legacy `Canvas` export execution still remain.
- 2026-06-17: `DEBT-0003` was narrowed again.
`src/platform_windows/windows_runtime_flow.*` now owns the live Win32
startup/session composition flow, including the bound app/session preflight

View File

@@ -76,12 +76,12 @@ Current conclusion:
debt.
- Renderer API contracts exist, but retained OpenGL resource classes still leak
into app/UI/document code.
- `AppRuntime` is a useful step toward owned queues, but thread affinity and
shutdown safety are still expressed mostly by convention, mutable booleans,
and singleton call sites.
- Platform extraction improved substantially, but CMake and entrypoint cleanup
are not complete. In particular, Web platform sources still appear inside
`PP_PANOPAINTER_APP_SOURCES`, even though `pp_platform_web` also exists.
- `AppRuntime` now owns synchronized running flags and explicit
same-thread/post-reject queue behavior, but broader app/runtime singleton
reach and retained shell ownership still remain.
- Platform extraction improved substantially and the root app source group no
longer compiles Web platform sources directly, but broader CMake and
entrypoint cleanup are not complete.
## Target Architecture

View File

@@ -55,11 +55,9 @@ Key facts:
- Raw `Node*` and callback captures remain a dominant UI lifetime risk.
- `RTT`, `Texture2D`, `Shape`, `Shader`, `Font`, and `CanvasLayer` still route
render work through `App::I` queues.
- `AppRuntime` uses `std::jthread`, which is progress, but queue ownership,
running flags, thread affinity, and shutdown contracts are not yet component
contracts.
- `PP_PANOPAINTER_APP_SOURCES` still includes `${PP_PLATFORM_WEB_SOURCES}`,
which should be removed in favor of concrete `pp_platform_web` ownership.
- `AppRuntime` now owns synchronized running flags plus explicit post/reject,
same-thread execution, and queue-drain behavior, but broader singleton reach
and app-shell ownership remain.
## Parallel Assignment Rules