Thin retained app and render runtime seams

This commit is contained in:
2026-06-17 18:33:36 +02:00
parent 04a1c5d0b1
commit dd638e5af4
12 changed files with 344 additions and 132 deletions

View File

@@ -18,6 +18,24 @@ agent or engineer to remove them without reconstructing context from chat.
## Reductions
- 2026-06-17: `DEBT-0036` was narrowed again. Retained `Shape`,
`src/shader.cpp`, and `src/font.cpp` now queue render-thread create/update/
destroy work through `src/renderer_gl/render_runtime_dispatch.h` instead of
calling `App::I` directly, and `Shader` render-thread entry points now assert
that explicit runtime contract while shader-program and mesh ownership remain
retained.
- 2026-06-17: `DEBT-0036` was narrowed again. `NodeStrokePreview` no longer
owns static worker-thread, queue, or render-mutex state directly;
`src/legacy_node_stroke_preview_runtime_services.*` now owns the retained
preview worker lifecycle and queue helpers, leaving the node as a thinner
adapter while the retained preview runtime still reaches app/render helpers
internally.
- 2026-06-17: `DEBT-0029` was narrowed again.
`LegacyFileMenuServices::pick_image_for_import()` in
`src/legacy_app_shell_services.cpp` now delegates retained import execution
to `src/legacy_document_image_import_services.*`, so the File-menu adapter no
longer defines the live `DocumentImageImportServices` implementation inline;
legacy `Image` loading and retained canvas/import-mode execution still remain.
- 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