* Place: refuse a scale that makes the placed image exceed the render pixel limit
* address review: bound the rounded-up resampled size when placing at a scale
* address review: the oversized-scale error names the placing command
import-cert.sh wrote the decoded .p12 to a fixed name in the temp
directory. If another account had created that file first, the shell
redirection truncated and reused it, keeping its owner and mode, and the
signing key was readable to that account. Create it with mktemp.
Each third-party action that StepSecurity publishes a secure drop-in
replacement for now uses that replacement, pinned to a commit with its
version as a comment. Versions follow what we used: the newest
StepSecurity release in the same major, or the closest major they
publish. dtolnay/rust-toolchain refs that named a toolchain (stable,
nightly, 1.76) become the replacement's `toolchain` input.
A Remove press on a pixel layer with Lock All opens the reference
application's modal alert "Can't use the tool because the layer is
locked." at once, instead of drawing the stroke and failing in the job.
A hidden target, a group, a type, shape, Smart Object or fill layer
keep today's behaviour (not measured), and the Brush's wording is
unchanged.
Fix-ups for the open review threads on #6413, after merging main:
- Edit > Step Backward / Step Forward and the History panel's items now
step a Pen path the way Undo and Redo do (anchor by anchor, then the
finish), through one shared hook, pen_history_step, and its enable rule.
- Finishing a path in one document no longer drops another document's
record of a path that Undo gave back, so Redo then Undo there gives
the path back again instead of deleting it.
- Redo no longer takes the same anchors redrawn in another mode (Shape
instead of Path) for the draft that Undo gave back: the target counts.
- A draft the document refuses, which Esc keeps as the Work Path, is
recorded too, so Undo gives it back to the Pen.
- Main's Enter now deselects the finished Work Path (#12892), so the
tests that build up or carry on the Work Path end their paths with Esc.
Co-Authored-By: marmitoTH <marmitoTH@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ruler pre-fill stored the raw straightening angle, and only a drawn
frame rounded it, so `ui.dialog.open` then `ui.dialog.confirm` with no
frame between them sent 32.1249984 instead of 32.12. Round it in f64 to
the field's two decimals where it is filled, on open and on Alt+Reset.
As measured in the reference application on a one-layer RGB document:
the layer menu with no selection, the selection menu with the pointer
inside it. The cases not measured keep opening nothing.
Adds step-security/harden-runner (audit, pinned to v2.22.4 like
craft-common-actions) as the first step of each job that did not have it,
so every workflow in the org's public repos reports its egress to
StepSecurity. Audit, not block: block-mode allow lists come from each
job's observed traffic.
The Clone Stamp set a status-bar line when no source point was defined. It now opens the
reference application's alert at the press ("Could not use the clone stamp tool because the
area to clone has not been defined (Alt-click to define a source point)."), once while it is up,
and starts no drag. The Healing Brush keeps its status line.
The Pen lists its modes as the reference application does: Shape, Path,
Pixels, with Pixels greyed. The Freeform and Curvature Pens keep Path,
Shape. A new dropdown_enabled greys entries without the wheel stepping
that dropdown_wheel_grouped_enabled adds, and keeps the value when the
arrow keys or type-ahead land on a greyed entry.
Running out of staging names returned AlreadyExists, which the
PublishNewError docs tell callers to read as "destination taken, pick
another name". It is now a plain error. When the staging cleanup retry
fails too, the error names the leftover staging file. rename_noreplace
documents that it renames files only.
Co-Authored-By: yoriswind <yoriswind@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The question also stores the document's revision: an edit while it is
open (an anchor added through the control channel, the question being
modal on screen) shifts the stored knot index, so Yes is refused rather
than deleting another anchor. Test: yes_after_the_path_changed_deletes_nothing
(red before: Yes deleted an anchor of the edited path).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A wide field that shows two decimals (Image Rotation > Arbitrary's Angle)
now rounds its stored value while it is still f64, before the widget
narrows it to f32. A 43x27 ruler's 32.1249984 degrees narrowed to exactly
32.125 and the first frame after opening or Alt+Reset drew 32.13 over the
32.12 the dialog kept. The rounded value is also stored as f64, so OK
sends exactly 32.12 rather than the 32.1199989 an f32 widens to.
CodeRabbit on #13206: docs/multi-channel-editing.md displays before/after
comparisons, which the rule keeps; it targets screenshots that only show a
PR's change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A sampler drag leaves the stored point where it was until release, but the
canvas cursor hit-tested the stored points. Once the pointer left the 7 px
tolerance mid-drag, the cursor switched to the placement eyedropper. While
Drag::Sampler is active the cursor now stays the arrow with the sampler
target, and Alt shows no scissors: Alt removes only on the press.
AGENTS.md rule 6 and docs/images/SOURCES.md now say docs/images holds only
images the README or a doc displays. Removes the nine PR before/after
captures nothing references (gradient-overlay-method, guide-position,
native-pipette-macos, preferences-apply; 1.9 MB) and their ATTRIBUTION.md
rows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The only conflict: main made the targeted-path tests' setup pub(crate)
(Convert Point's tests use it); this branch splits it into setup (the
live-shape question dismissed) and setup_asking. Both kept, with main's
visibility.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#12523 shows the pipette as an OS cursor bitmap on native root viewports,
where the output is the visible-fallback Crosshair plus the bitmap, not the
drawn pipette's CursorIcon::None. Tests from #12145 and #12301 still looked
for the drawn pipette and failed on Windows unit.
tool_cursor::pipette_shown checks for the pipette either way (the exact
bitmap natively, the drawn one elsewhere), and the sampler, caps lock and
mixer cursor tests use it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>