Skip to content

Commit 0b8a589

Browse files
okohlbacherclaude
andcommitted
docs(999.65): mark complete after UAT — RepresentationBuilder owns load+restore (VIEW-CLEAN-04)
UAT 2026-05-22: molecule-load + project-restore render identically via the headless RepresentationBuilder; DisplayProperties::createRepresentation orchestration retired. Final-3 legacy deletion (999.53) now unblocked. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 8b28e96 commit 0b8a589

3 files changed

Lines changed: 12 additions & 12 deletions

File tree

.planning/REQUIREMENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ Added 2026-05-21 when the v1.7.x patch-cycle runway (Phases 999.51–999.56) was
237237
- [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._
238238
- [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.)_
239239
- [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
241241
- [ ] **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
242242
- [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
243243
- [~] **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.

.planning/ROADMAP.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ This roadmap mirrors the human-authored `/Users/kohlbach/Claude/BALL/ROADMAP-1.6
3131
- [ ] **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.
3232
- [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)
3333
- [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)
3535

3636
<!-- 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) -->
3737
- [ ] **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:
24922492
**Requirements:** `VIEW-CLEAN-04`.
24932493
**Risk:** HIGHEST — the core load→render path. Incremental + GUI-verified (load a molecule → default rep renders; open a project → reps restore).
24942494
**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
24962496
- [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.**
24992499

25002500
### Phase 999.53: Legacy dialog deletion (Wave-4 cleanup tail) (TARGETED FOR v1.7.x)
25012501

.planning/STATE.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ gsd_state_version: 1.0
33
milestone: v1.6.2
44
milestone_name: · 2026-05-16)
55
status: paused
6-
stopped_at: "999.65-03 at BLOCKING checkpoint:human-verify (project-restore + molecule-load render UAT pending)"
7-
last_updated: "2026-05-22T11:00:00.000Z"
6+
stopped_at: "999.65-03 at BLOCKING checkpoint:human-verify (project-restore + molecule-load render-parity UAT pending; code complete + grep-proven dead orchestration removed + BALLView links clean BALL_UI_V2=ON)"
7+
last_updated: "2026-05-22T11:00:40.547Z"
88
last_activity: 2026-05-22
99
progress:
1010
total_phases: 74
11-
completed_phases: 33
11+
completed_phases: 34
1212
total_plans: 89
13-
completed_plans: 86
14-
percent: 45
13+
completed_plans: 87
14+
percent: 46
1515
---
1616

1717
# STATE: BALLView 1.6 Modernization
@@ -24,8 +24,8 @@ progress:
2424

2525
## Current Position
2626

27-
Phase: 999.65 (representation-builder-extraction) — EXECUTING (final plan, code complete)
28-
Plan: 3 of 3
27+
Phase: 999.65
28+
Plan: Not started
2929
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.
3030
Last activity: 2026-05-22
3131

0 commit comments

Comments
 (0)