6.1 KiB
6.1 KiB
NewEditor Tree Actual Redundancy Reduction Plan
Date: 2026-04-22
Status: In Progress
Goal
- Remove only the redundancy that is structurally real in
new_editortree-related code. - Keep the existing panel refresh split, frame ownership, and hosted-panel dispatch architecture intact.
- Accept only changes that produce clear net code reduction and keep ownership clearer, not blurrier.
Why The Previous Plan Was Deleted
- The deleted plan incorrectly treated the rename flow as a shared tree host skeleton.
HierarchyPanelis a single-tree, single-surface rename owner.ProjectPanelis a tree/grid dual-surface rename owner and its rename bounds, state, and commit side-effects differ materially.- Because of that difference, extracting rename state handling upward adds request/status/surface glue instead of deleting real code.
- Any cross-panel rename abstraction is now considered a wrong direction for this codebase.
Hard Constraints
HierarchyPanel/ProjectPanelrename flow is explicitly not a dedup target.- Do not merge panel refresh loops.
- Do not merge project tree and asset grid behavior.
- Do not change viewport independent request/render flow.
- Do not change
EditorWindowFrameDriversingle frame owner semantics. - Do not move project or scene runtime semantics into
XCEditor. - Do not create new
Behavior,Host,Helper,Support,Tooling, or similar glue files. - Any phase must have a credible negative net diff before implementation starts.
Real Remaining Redundancy Targets
1. ProjectPanel Left-Tree Internal Repetition
This is the first valid target.
Current repetition shape:
- repeated left-tree layout rebuild sequences after navigation / drop / refresh paths
- repeated left-tree draw call setup for background / foreground / rename overlay / drop preview
- repeated left-tree state sync and cleanup around operations inside the same panel
Rules:
- Keep this work inside
ProjectPaneland existing tree modules. - Prefer local private functions or same-file narrowing over new files.
- Do not generalize tree/grid business logic together.
2. Cross-Panel Tree Draw Chain Re-Audit
This is only a candidate target, not an automatic extraction target.
Possible shared shape:
- append tree background
- append tree foreground
- append inline rename overlay
- append drop preview
Rules:
- Only extract if the result is a pure UI draw chain with no business ownership leakage.
- Only extract into existing
UIEditorTreeView.*if total code clearly goes down. - If the net diff is not negative, stop and keep the code local.
3. Final Intentional-Duplication Audit
After the valid reductions above, re-check what remains.
Expected intentional duplicates:
- rename ownership between
HierarchyPanelandProjectPanel - scene-specific drag/drop commit behavior
- project-specific folder / asset / breadcrumb / splitter / context menu orchestration
If a remaining overlap is only superficial orchestration around different business surfaces, record it as intentional and stop.
Execution Plan
Phase A. Freeze The Rename Boundary
Status: Completed
Target:
- Remove the invalid rename-dedup direction from the active plan baseline.
Completed result:
- Deleted the wrong plan that targeted cross-panel rename host dedup.
- Re-established rename as panel-owned business logic, not a shared tree abstraction target.
Validation:
- Documentation baseline corrected.
Phase B. Reduce ProjectPanel Left-Tree Internal Repetition
Status: Completed
Target:
- Shrink repeated left-tree orchestration inside
ProjectPanelwithout changing behavior boundaries.
Allowed scope:
new_editor/app/Features/Project/ProjectPanel.cppnew_editor/app/Features/Project/ProjectPanel.h
Rules:
- No new file.
- No tree/grid semantic merge.
- No rename abstraction promotion.
- Only keep helpers that delete more code than they add.
Validation:
cmake --build build --config Debug --target XCUIEditorApp- smoke-launch
build/new_editor/Debug/XCUIEditor.exe - confirm latest
runtime.logcontains:EnsureEditorStartupScene loaded scene=Main Scene[app] initialize end[app] shutdown end
Completed result:
- Reduced the real repeated reconcile chain inside
ProjectPanel. - Kept tree/grid business ownership split intact.
- Landed local private narrowing only:
- runtime-to-UI selection sync now funnels through one panel-local path
- layout/tree-frame rebuild now funnels through one panel-local path
ProjectBrowserModelalso now owns a single browser-state refresh chain instead of repeating:RefreshFolderTree()EnsureValidCurrentFolder()RefreshAssetList()
Phase C. Re-Audit The Shared Tree Draw Chain
Status: Pending
Target:
- Check whether a narrow draw-chain entry in existing
UIEditorTreeView.*can reduce real code acrossHierarchyPaneland the Project left tree.
Allowed scope:
new_editor/include/XCEditor/Collections/UIEditorTreeView.hnew_editor/src/Collections/UIEditorTreeView.cpp- the two panel files only where call sites get smaller
Rules:
- No state machine extraction.
- No rename surface abstraction.
- No drag/drop business extraction.
- Cancel the phase immediately if the predicted diff is not net-negative.
Validation:
rgverification of targeted duplicate draw blockscmake --build build --config Debug --target XCUIEditorApp- smoke-launch
build/new_editor/Debug/XCUIEditor.exe
Phase D. Final Closure Audit
Status: Pending
Target:
- Verify that all remaining overlap is either reduced or explicitly intentional.
Validation:
- targeted
rgaudit git diff --statconfirms accepted phases reduced code overallcmake --build build --config Debug --target XCUIEditorApp- smoke-launch
build/new_editor/Debug/XCUIEditor.exe
Acceptance
- The wrong rename-dedup plan no longer exists in
docs/plan. - Cross-panel rename dedup is explicitly excluded.
- The next implementation target is
ProjectPanelleft-tree internal repetition, not rename. - No new glue-layer file is introduced.
- Each accepted phase must reduce code, not grow it.
- Build and smoke validation pass after each completed implementation phase.