@@ -25,8 +25,9 @@ selection-action groups, the Select-by-Type/Tag/Material, Align-Selection,
2525Distribute-Selection, and Mirror-Selection submenus, and the Copy-Properties,
2626Convert-to-Definition, Export-Subtree, Break-Instance, Drop-to-Ground,
2727Snap-to-Grid, Group-Scale, Linear-Array, and Scatter-Along-Curve items plus the
28- Group/Ungroup pair. The detailed toolbar Snap interval contents and the
29- remaining MenuBar sections are still application-owned. Camera bookmark, walk,
28+ Group/Ungroup pair, plus every File-menu action through Open Recent. The detailed
29+ toolbar Snap interval contents and the remaining MenuBar sections are still
30+ application-owned. Camera bookmark, walk,
3031document, undo, clipboard, selection, grid, and dialog state have ** not** moved
3132again: they remain in their existing editor/application owners; the UI
3233component only reads presentation state and invokes application-owned
@@ -179,6 +180,17 @@ before when explicitly requested (`SYS-W14-##` rows).
179180 undo, clipboard, selection, grid, preferences, command-palette, and
180181 shortcut-dialog state remain in their existing owners; the menu receives
181182 only read-only state plus application-owned callbacks.
183+ - ** Recently implemented (2026-07-25):** ` SYS-W3-01 ` Phase 13 moved the
184+ ` File → Open Recent ` presentation into ` Application::UI::MenuBar ` through
185+ ` FileOpenRecentContext ` . It receives only current availability, a lazy
186+ recent-files provider, an open callback, and a clear callback. The component
187+ preserves the submenu label, numbered hidden IDs, basename labels, full-path
188+ tooltips, separator, and empty-list disabled state; persistence, unsaved
189+ document handling, loading, document replacement, and status/error reporting
190+ remain application-owned. `CCACHE_DISABLE=1 cmake --build b-release -j4
191+ --target MeshCraft` and ` ctest --test-dir b-release -R '^mc3_commands$'
192+ --output-on-failure` passed; the latter already exercises recent-files'
193+ load, save, MRU de-duplication, cap, and restart round-trip contract.
182194- ** Recently implemented (2026-07-20 through 2026-07-25):** all 7
183195 raw-OpenGL(ES)-vs-CNA migrations, ` AUD-082 ` through ` AUD-088 ` — full
184196 detail with file: line evidence and
@@ -793,7 +805,7 @@ Edit-play-macro, Edit-macro-editor, Edit-lock-selection, Edit-reset-transform,
793805Edit-transform-clipboard, Edit-isolate-selection, Edit-hide-selection,
794806Edit-show-all-hidden, File-merge-scene, File-export-selection, File-export-GLB,
795807File-export-OBJ, File-save, File-save-as, File-import-OBJ, File-new,
796- File-open, and File-exit slices.
808+ File-open, File-open-recent, and File-exit slices.
797809` EditHistoryContext ` exposes only ` canUndo ` /` canRedo ` plus Undo, Redo, and
798810Open History callbacks; ` Editor::UndoManager ` , document replacement,
799811selection restoration, dialog state, and keyboard handling remain
@@ -997,6 +1009,13 @@ pending-action state, dialog buffers and state, file loading, document
9971009replacement, selection and undo initialization, title and status updates, error
9981010handling, and the Ctrl+O keyboard route remain in their existing owners;
9991011` MenuBar ` owns only the unchanged label, shortcut, and click dispatch.
1012+ ` FileOpenRecentContext ` exposes only current availability, a lazy recent-files
1013+ provider, one open callback, and one clear callback. Recent-file storage and
1014+ persistence, unsaved-change handling, pending-action state, file loading,
1015+ document replacement, title/status updates, and error handling remain
1016+ application-owned; ` MenuBar ` owns the unchanged submenu label, numbered hidden
1017+ IDs, filename labels, full-path tooltips, separator, disabled state, and click
1018+ dispatch.
10001019` FileExitContext ` exposes only one exit callback. Unsaved-change handling,
10011020pending-action state, application shutdown, all platform lifecycle work, and
10021021the Escape fallback route remain in their existing owners; ` MenuBar ` owns only
@@ -1008,19 +1027,12 @@ The sequence below is planning only. Per `CLAUDE.md`, each item must be
10081027described and explicitly confirmed immediately before implementation; finishing
10091028one item does not authorize the next.
10101029
1011- 1 . ** File → Open Recent.** Extract the dynamic submenu with availability, a
1012- lazy recent-files provider, one open-recent callback, and one clear callback.
1013- ` MenuBar ` would preserve the submenu label, numbered hidden IDs, filename
1014- labels, full-path tooltips, separator, and disabled behavior. Recent-file
1015- storage and persistence, unsaved-change handling, pending-action state, file
1016- loading, document replacement, title/status updates, and error handling stay
1017- application-owned.
1018- 2 . ** View → Bloom/SSAO controls.** Audit and extract only the text-shader
1030+ 1 . ** View → Bloom/SSAO controls.** Audit and extract only the text-shader
10191031 effects block, including its supported and unsupported presentation. Preserve
10201032 the conditional controls, labels, slider ranges, ` AlwaysClamp ` flags, and
10211033 existing state changes; renderer-capability checks and effect state remain
10221034 application-owned.
1023- 3 . ** Post-menu boundary audit.** Once the remaining File and View blocks are
1035+ 2 . ** Post-menu boundary audit.** Once the remaining File and View blocks are
10241036 complete, identify one new narrow presentation boundary before changing
10251037 ` MeshCraftApplication ` . Do not start a broad application refactor.
10261038
0 commit comments