You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .planning/REQUIREMENTS.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -237,7 +237,7 @@ Added 2026-05-21 when the v1.7.x patch-cycle runway (Phases 999.51–999.56) was
237
237
- [x] **VIEW-INSP-03** _(✓ UAT PASS 2026-05-21 — Material transparency slider visibly works; closes GH #527)_ (Phase 999.52 · v1.7.x-30 · GH #527): a working transparency control in the Inspector `materialSection`, superseding the broken legacy `MaterialSettings` transparency slider — _IMPLEMENTATION-COMPLETE / AWAITING GUI HUMAN-VERIFY (Plan 999.52-01 commits ce4061a93d/7374d42ae8; libVIEW + BALLView.app green BALL_UI_V2=ON). MaterialController gained an int transparency (0-255) property driving `Representation::setTransparency()` + `rep_->update(false)` — the per-vertex alpha path the interactive GLRenderer honors — NOT the dead `Stage::Material.transparency` field (the #527 bug; grep-verified unwritten). MaterialSection shows a raw 0-255 Transparency slider sharing Representation state with the Model-section slider. Legacy MaterialSettings dialog untouched (Phase 999.53 deletes it). Checkbox flips to [x] after the blocking running-BALLView human-verify confirms the Material-tab slider visibly changes transparency, the Model-section slider reflects the same value, and reset works._
238
238
-[x]**VIEW-CLEAN-02** (Phase 999.57 · prerequisite for 999.53) — _✓ UAT PASS 2026-05-21_: `createModelProcessor`/`createColorProcessor` relocated out of the legacy `modelSettingsDialog`/`coloringSettingsDialog` into headless `ModelProcessorFactory`/`ColorProcessorFactory` (MODELS layer, no QWidget dep); `displayProperties.C:451/487` + `modelController`/`coloringController` repointed onto the factories (grep-proven no legacy reach-throughs); CONFIG-01 compiled-default invariant preserved; render UAT confirmed Model + Coloring representations render correctly. _(scene.C's MaterialSettings/LightSettings/Stage + the remaining displayProperties consumers moved to VIEW-CLEAN-03 / Phase 999.58.)_
239
239
-[x]**VIEW-CLEAN-03**_(✓ UAT PASS 2026-05-22 — materials/lights/stage render via the Inspector; scene.C dialog-free; stereo defers cleanly; tri-OS CI confirming)_ (Phase 999.58 · 2nd prerequisite for 999.53): `scene.C` no longer constructs `MaterialSettings`/`LightSettings`/`StageSettings` (lines 141/142/161) — their Preferences-stack + `applyPreferences` + **stereo render-path** (scene.C:2664-3165) responsibilities relocated into Inspector Stage/Light/Material coverage; the Material/Light/Stage Inspector sections drive lights/materials/stereo end-to-end (GUI-verified); tri-OS green
240
-
-[]**VIEW-CLEAN-04** (Phase 999.65 · 3rd prerequisite for 999.53): `DisplayProperties::createRepresentation` + the default-rep orchestration (`onNotify(NEW_MOLECULE)`, `RepresentationManager::restoreRepresentations`, `MainControl::enableCreationForNewMolecules`) relocated onto a dialog-free `RepresentationBuilder` (consuming the 999.57 factories); molecule-load + project-restore render identically (GUI-verified); after this, `displayProperties`/`modelSettingsDialog`/`coloringSettingsDialog` are unreferenced + deletable
240
+
-[x]**VIEW-CLEAN-04**_(✓ UAT PASS 2026-05-22 — molecule-load + project-restore render identically via the headless RepresentationBuilder; DisplayProperties::createRepresentation orchestration retired)_ (Phase 999.65 · 3rd prerequisite for 999.53): `DisplayProperties::createRepresentation` + the default-rep orchestration (`onNotify(NEW_MOLECULE)`, `RepresentationManager::restoreRepresentations`, `MainControl::enableCreationForNewMolecules`) relocated onto a dialog-free `RepresentationBuilder` (consuming the 999.57 factories); molecule-load + project-restore render identically (GUI-verified); after this, `displayProperties`/`modelSettingsDialog`/`coloringSettingsDialog` are unreferenced + deletable
241
241
-[ ]**VIEW-CLEAN-01** (Phase 999.53 · v1.7.x-08, depends on VIEW-CLEAN-02 + VIEW-CLEAN-03 + VIEW-CLEAN-04): the 9 superseded legacy VIEW dialog files (commit `7f56f80d89` breadcrumb) + `displayProperties.{C,h,ui,.sip}` + `lightSettings.sip` + the `Tools › Legacy Settings` submenu / `LegacySettingsHelper` deleted; `grep -r` for all 9 names in `source/`+`include/` returns 0; tri-OS CI green
242
242
-[x]**VIEW-UX-01** (Phase 999.54 · v1.7.x-31 · GH #501): BALLView emits a `Log`/status-bar warning at startup when zero renderer plugins are discovered
243
243
-[~]**BUILD-ACCEL-08** (Phase 999.55 · v1.7.x-09 PCH half): **ATTEMPTED + REVERTED.** Extending PCH to the test build via `REUSE_FROM BALL`/`VIEW` forces test TUs to inherit the SHARED library's compile-definitions (`NDEBUG` etc.), which flipped `Debug_test`'s debug-macro behavior under GCC → Linux runtime failure (CI run 26233705613; macOS never caught it — AppleClang has PCH guarded off). Reverted in `test/CMakeLists.txt`. The **library** PCH (BUILD-ACCEL-01 / 999.16: Windows −35.6% cold, Linux −15%) already delivers the build-time win; test-suite PCH is dropped as not worth the cross-platform fragility. No further action.
Copy file name to clipboardExpand all lines: .planning/ROADMAP.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,7 +31,7 @@ This roadmap mirrors the human-authored `/Users/kohlbach/Claude/BALL/ROADMAP-1.6
31
31
-[ ]**Phase 999.56: Refresh the PDF tutorial for the modernized stack (#560) (v1.7.x)** - Update tutorial content/screenshots/URLs/build flow to v1.7.x.
32
32
- [x] **Phase 999.57: Complete Inspector controller cut-over — unwire displayProperties.C from the rendering pipeline (v1.7.x) — PREREQUISITE FOR 999.53** - Relocate `createModelProcessor`/`createColorProcessor` (the rendering-path factories at displayProperties.C:451/487) out of the legacy Model/Coloring settings dialogs into the Inspector/Controller layer; and the displayProperties references in mainControl/mainframe. Highest-risk (touches the threaded renderer) — incremental + verifiable per CLAUDE.md. **Planner scope-corrected:** scene.C's MaterialSettings/LightSettings/StageSettings are NOT dead (load-bearing for the Preferences stack + the entire stereo render path) — split out as 999.58. 3 plans created; unblocks deleting the Model/Coloring/displayProperties triples. **Code+build+audit COMPLETE 2026-05-21** (all 3 plans landed; render path grep-proven detached; BALLView.app links clean BALL_UI_V2=ON) — **but Plan 03's BLOCKING running-BALLView render UAT is PENDING**, so VIEW-CLEAN-02 stays PARTIAL and the phase is not yet closed. (completed 2026-05-22)
33
33
-[x]**Phase 999.58: scene.C settings-dialog cut-over — Material/Light/Stage incl. the stereo render path (v1.7.x) — 2nd PREREQUISITE FOR 999.53** - Relocate scene.C's `MaterialSettings`/`LightSettings`/`StageSettings` (lines 141/142/161; load-bearing across ~15 sites incl. the Preferences stack, applyPreferences, and the full stereo rendering path scene.C:2664-3165) into Inspector Stage/Light/Material coverage. Independent high-risk threaded-renderer migration, comparable in size to 999.57; own GUI UAT (lights/materials/stereo must still render). Needed before 999.53 deletes those 3 dialog triples. (completed 2026-05-22)
34
-
-[]**Phase 999.65: Headless representation-builder extraction (v1.7.x) — 3rd PREREQUISITE FOR 999.53** - Relocate `DisplayProperties::createRepresentation` + the default-rep orchestration (`onNotify(NEW_MOLECULE)` auto-rep, `RepresentationManager::restoreRepresentations`, `MainControl::enableCreationForNewMolecules`) onto a dialog-free `RepresentationBuilder`, so `displayProperties`/`modelSettingsDialog`/`coloringSettingsDialog` become deletable. 999.57 moved only the processor factories; this moves the orchestration off the core load→render path. HIGHEST risk (touches molecule-load rendering); own GUI UAT. Unblocks the final 3-file + Legacy-Settings-menu deletion in 999.53.
34
+
-[x]**Phase 999.65: Headless representation-builder extraction (v1.7.x) — 3rd PREREQUISITE FOR 999.53** - Relocate `DisplayProperties::createRepresentation` + the default-rep orchestration (`onNotify(NEW_MOLECULE)` auto-rep, `RepresentationManager::restoreRepresentations`, `MainControl::enableCreationForNewMolecules`) onto a dialog-free `RepresentationBuilder`, so `displayProperties`/`modelSettingsDialog`/`coloringSettingsDialog` become deletable. 999.57 moved only the processor factories; this moves the orchestration off the core load→render path. HIGHEST risk (touches molecule-load rendering); own GUI UAT. Unblocks the final 3-file + Legacy-Settings-menu deletion in 999.53. (completed 2026-05-22)
35
35
36
36
<!-- v1.7.4 milestone — Inspector depth + the contract (ingested from design handover 2026-05-22; renumbered +1 from handover 999.58-999.63 to clear the 999.58 collision) -->
37
37
-[ ]**Phase 999.59: Controller cut-over · command-shaped `apply()` (v1.7.4 · Wave A · GATING)** - Land the command-shaped `Controller::apply()` contract (validate → guard → mutate → notify → invalidate → record reversible payload) on all 8 mutating Controllers + `ApplyGuard`/`ApplyPayload` base types; narrow `Stage`/`Representation` setters to Controller-`friend` scope. Maps to v1.7.x-24. *Depends on 999.57.* See [Phase 999.59 detail](#phase-99959-controller-cut-over--command-shaped-apply-v174--wave-a--gating).
@@ -2492,10 +2492,10 @@ Plans:
2492
2492
**Requirements:** `VIEW-CLEAN-04`.
2493
2493
**Risk:** HIGHEST — the core load→render path. Incremental + GUI-verified (load a molecule → default rep renders; open a project → reps restore).
2494
2494
**Depends on:** 999.57 (factories). **Blocks:** the final-3 deletion in 999.53 (999.53-03).
2495
-
**Plans:** 1/3 plans fully executed; 999.65-02 + 999.65-03 CODE DONE + linked clean (BALL_UI_V2=ON) — both PAUSED at their blocking GUI UATs (molecule-load + project-restore render parity). On UAT approval VIEW-CLEAN-04 flips + 999.53 final-3 unblocked.
2495
+
**Plans:** 3/3 plans complete
2496
2496
- [x] 999.65-01-PLAN.md — Build the headless `RepresentationBuilder` + `RepresentationSpec` in the MODELS layer (consumes the 999.57 ModelProcessorFactory/ColorProcessorFactory; mirrors `DisplayProperties::createRepresentation` orchestration; static project-restore data-string parse helper). Pure addition, links clean. (VIEW-CLEAN-04, wave 1)
2497
-
- [] 999.65-02-PLAN.md — Repoint the `onNotify(NEW_MOLECULE)` default-rep path onto the builder via a new `DisplayProperties::buildCurrentSpec()` snapshot; blocking GUI UAT (molecule load auto-renders the default rep identically). (VIEW-CLEAN-04, wave 2) — **CODE DONE** (buildCurrentSpec + nested Notifier_ added, NEW_MOLECULE branch repointed onto RepresentationBuilder, VIEW+BALLView link clean BALL_UI_V2=ON); **PAUSED at blocking GUI UAT** (Task 3 — human confirms molecule-load auto-renders identically before 999.65-03).
2498
-
- [ ] 999.65-03-PLAN.md — Repoint `RepresentationManager::restoreRepresentations` onto the builder (parse+create+named-property replay), confirm `enableCreationForNewMolecules` still gates the builder-backed auto-rep, retire the dead String overload; grep-prove `DisplayProperties::createRepresentation` has no live external caller; blocking GUI UAT (project restore renders identically + auto-rep suppression intact). Unblocks the 999.53 final-3 deletion. (VIEW-CLEAN-04, wave 3) — **CODE DONE** (restoreRepresentations repointed onto RepresentationBuilder via parseDataString -> CompositeIterator resolution -> createRepresentation -> named-property base64 replay; friend-routed RestoreNotifier -> RepresentationManager::notifyMessage_ -> MainControl::notify_; dead `DisplayProperties::createRepresentation(String,...)` + orphaned `getSettingsFromString` REMOVED, grep-proven no live external caller; VIEW+BALLView link clean BALL_UI_V2=ON); **PAUSED at blocking GUI UAT** (Task 3 — human confirms a saved project re-opens with every rep restored + rendered identically, clipping re-linked, auto-rep suppressed during project load + re-enabled after, fresh molecule still auto-renders). **On approval VIEW-CLEAN-04 flips + 999.53 final-3 unblocked.**
2497
+
- [x] 999.65-02-PLAN.md — Repoint the `onNotify(NEW_MOLECULE)` default-rep path onto the builder via a new `DisplayProperties::buildCurrentSpec()` snapshot; blocking GUI UAT (molecule load auto-renders the default rep identically). (VIEW-CLEAN-04, wave 2) — **CODE DONE** (buildCurrentSpec + nested Notifier_ added, NEW_MOLECULE branch repointed onto RepresentationBuilder, VIEW+BALLView link clean BALL_UI_V2=ON); **PAUSED at blocking GUI UAT** (Task 3 — human confirms molecule-load auto-renders identically before 999.65-03).
2498
+
- [x] 999.65-03-PLAN.md — Repoint `RepresentationManager::restoreRepresentations` onto the builder (parse+create+named-property replay), confirm `enableCreationForNewMolecules` still gates the builder-backed auto-rep, retire the dead String overload; grep-prove `DisplayProperties::createRepresentation` has no live external caller; blocking GUI UAT (project restore renders identically + auto-rep suppression intact). Unblocks the 999.53 final-3 deletion. (VIEW-CLEAN-04, wave 3) — **CODE DONE** (restoreRepresentations repointed onto RepresentationBuilder via parseDataString -> CompositeIterator resolution -> createRepresentation -> named-property base64 replay; friend-routed RestoreNotifier -> RepresentationManager::notifyMessage_ -> MainControl::notify_; dead `DisplayProperties::createRepresentation(String,...)` + orphaned `getSettingsFromString` REMOVED, grep-proven no live external caller; VIEW+BALLView link clean BALL_UI_V2=ON); **PAUSED at blocking GUI UAT** (Task 3 — human confirms a saved project re-opens with every rep restored + rendered identically, clipping re-linked, auto-rep suppressed during project load + re-enabled after, fresh molecule still auto-renders). **On approval VIEW-CLEAN-04 flips + 999.53 final-3 unblocked.**
Status: PAUSED at blocking GUI UAT (999.65-03 Task 3) — all code done (NEW_MOLECULE auto-rep + project-restore both repointed onto the headless RepresentationBuilder; dead DisplayProperties::createRepresentation(String) orchestration removed, grep-proven no live external caller); VIEW + BALLView link clean BALL_UI_V2=ON; awaiting human project-restore + molecule-load render-parity confirmation. On approval VIEW-CLEAN-04 flips and 999.53 (legacy dialog deletion) is unblocked.
0 commit comments