Review of the selection rings found the grid test never checked the active
(top-left) photo, a selected ring that fell under 3:1 on label-tinted cells,
and other places still framing the selection in fixed white.
- tests_grid.rs: the active photo is now checked (it was skipped by a leftover
x filter): a 3 pt `ring_active` stroke over a 1 pt `ring_inner` one, and not
white in a light theme
- theme.rs: `ring_selected` is also tested at 3:1 against the selected cell and
its label-tinted forms; Silver and Paper's goes darker (0x4a) and Charcoal
and Midnight's lighter (0xc0) to pass
- panels/grid.rs: the active ring is one 3 pt stroke with the 1 pt inner line
on top, both on the same rect, so two separately snapped strokes cannot
leave a half-pixel seam at 1.25x, 1.5x or 1.75x
- panels/compare.rs: Compare, Reference and Survey frame the active tile with
`selection_ring` instead of a white 2 pt stroke; the placeholder uses the
tile's own tokens
- panels/settings.rs: the theme preview's mini filmstrip rings its selected
cell with the theme's `ring_active`
- panels/people.rs: a selected face tile uses the same ring
- tests_compare.rs, tests_filmstrip.rs: a Survey test in a light theme and the
filmstrip test adjusted to the new widths
Co-Authored-By: Claude <noreply@anthropic.com>
The active photo had a 2 px pure white outline and the other selected photos
grey 170, so on Silver and Paper's light grid the active ring vanished and the
two differed by lightness alone. The loading placeholder was a fixed dark grey
slab in every theme.
- theme.rs: new tokens `ring_active`, `ring_inner`, `ring_selected` and
`placeholder`, per theme; tests that every theme's rings stand 3:1 against
the grid and the square grid's cells, and that the placeholder follows the
theme's family
- panels/grid.rs: `selection_ring` draws the active ring as 3 pt (1 pt inner
line against the photo, 2 pt theme line) and the others as 1.5 pt; the grid
uses it for loaded and unloaded thumbnails, and the placeholder token
- panels/detail.rs: the filmstrip uses the same ring and rule
- panels/compare.rs: the compare placeholder uses the token
- tests_grid.rs, tests_filmstrip.rs: painted ring widths and colours in a
light theme, active versus selected versus unselected
- docs/parity-checklist.md, docs/whats-new.md: rows and entry
Co-Authored-By: Claude <noreply@anthropic.com>
The restore actions use the recorded folder without checking that it still
exists, so an upgrade creates it again rather than using the default folder.
The policy check now reads the compiled AppSearch and RegLocator rows for the
remembered-folder properties (registry root, key, value name and type for both
scopes) and runs the DIR, FOLDER, PATH and legacy exe actions in sequence order
against seeded values, so their precedence and the preset-folder guard cannot
regress. It also replays the wizard folder actions in sequence order (a
remembered folder beats the new-install default, a typed folder beats both) and
requires the machine restore action between the scope page and costing.
The pre-signing check matched any folder named Program Files, so it rejected
a valid MSI when Windows resolves Program Files elsewhere, accepted the 64-bit
root for an x86 package and accepted a different app name. Build the expected
folder from the package architecture's resolved root and the policy name.