FR-DEV-3 specifies "White balance (temperature/tint, and picker)". The picker is not built.
Gap
WidgetKind::WhitePoint is declared in the descriptor vocabulary, and ui/dr-ui/src/develop.rs's supported() returns false for it — so it degrades to sliders, which is correct behaviour. The degraded state has become the only state.
Sampling a neutral is the first move of the global tonal/colour pass, and every colour judgement afterwards is measured against it. Changing white balance late invalidates the HSL and grading work done above it, which is precisely why it is reached for first.
Two of the five declared widget kinds are implemented (ToneCurve, CropOverlay). This is a third.
Acceptance
An on-canvas sampler writing temperature and tint from a clicked neutral.
Degrades to the existing sliders where the canvas cannot host it, exactly as it does now.
One history step per sample, not one per pixel hovered.
Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
FR-DEV-3 specifies "White balance (temperature/tint, **and picker**)". The picker is not built.
## Gap
`WidgetKind::WhitePoint` is declared in the descriptor vocabulary, and `ui/dr-ui/src/develop.rs`'s `supported()` returns `false` for it — so it degrades to sliders, which is correct behaviour. The degraded state has become the only state.
Sampling a neutral is the first move of the global tonal/colour pass, and **every colour judgement afterwards is measured against it**. Changing white balance late invalidates the HSL and grading work done above it, which is precisely why it is reached for first.
Two of the five declared widget kinds are implemented (`ToneCurve`, `CropOverlay`). This is a third.
## Acceptance
- [ ] An on-canvas sampler writing temperature and tint from a clicked neutral.
- [ ] Degrades to the existing sliders where the canvas cannot host it, exactly as it does now.
- [ ] One history step per sample, not one per pixel hovered.
---
Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
Landed in 901f51e. The sampler lives in dr_pipeline::neutral — the canvas hands over a colour and the core bisects the node's declared response — with the affordance in the group heading beside the reset. Degrades to the sliders where the canvas cannot host it, and each sample is one Edit::Action, so one history step.
Landed in 901f51e. The sampler lives in dr_pipeline::neutral — the canvas hands over a colour and the core bisects the node's declared response — with the affordance in the group heading beside the reset. Degrades to the sliders where the canvas cannot host it, and each sample is one Edit::Action, so one history step.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
FR-DEV-3 specifies "White balance (temperature/tint, and picker)". The picker is not built.
Gap
WidgetKind::WhitePointis declared in the descriptor vocabulary, andui/dr-ui/src/develop.rs'ssupported()returnsfalsefor it — so it degrades to sliders, which is correct behaviour. The degraded state has become the only state.Sampling a neutral is the first move of the global tonal/colour pass, and every colour judgement afterwards is measured against it. Changing white balance late invalidates the HSL and grading work done above it, which is precisely why it is reached for first.
Two of the five declared widget kinds are implemented (
ToneCurve,CropOverlay). This is a third.Acceptance
Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
Landed in
901f51e. The sampler lives in dr_pipeline::neutral — the canvas hands over a colour and the core bisects the node's declared response — with the affordance in the group heading beside the reset. Degrades to the sliders where the canvas cannot host it, and each sample is one Edit::Action, so one history step.