The merge of main into #10730 dropped the first line of the comment above the
filter-preview check in confirm_generic_command; it is back. The Batch test now
compares out/b.png with the hand-typed reference as well as out/a.png, so a
replay that stops after the first file fails it (review on #10730).
Co-Authored-By: Lcoding15 <Lcoding15@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove the Azerbaijani menu coverage test (red on main), the crop Fill
label coverage test and the has() loop in the pen path Esc test. A
missing string falls back to English; cargo xtask i18n-coverage lists
the gaps. docs/contributing.md now says tests never require a string to
be translated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Window menu item from #11669 and the Azerbaijani catalog landed
together, so azerbaijani_covers_every_menu_label_and_path fails on main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#11005's new head adds path.toShape to the vector-path list next to
path.stroke; the batch's 95c7a5d17e had added it next to path.set. Both
merged cleanly into a duplicate or-pattern; keep the contributor's.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The bar draws inside the canvas pass, whose write-back of its own camera
dropped the fit that commit_crop asks for, so Done kept the old zoom. The
stored view now wins when the bar changed it, as a view menu row's does.
done_fits_the_cropped_document starts at 50 % and fails without the fix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unit tests no longer read PHOTOCRAFT_UI_DIRECTION (cached per process, so a
developer's shell could flip the Hebrew/Urdu and shell assertions). The
Hebrew/Urdu test checks glyphs only when craft-fonts carries a face for the
script (the eager provider draws it in the first frame, as in CI with
CRAFT_FONTS_REQUIRED); without it the harness allows tofu and only the
mirroring is checked, instead of panicking on a host without the fonts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Draw the Crop task bar only on the active document's tile: a click into
another tile activates its document mid-pass, and the tile drawn after it
put the new frame's bar on itself for that frame.
- ui.inspect reports the bar hidden (and no rect) as soon as it can't show,
not only after the next draw.
- ui.set merges panels.task_bar field by field: {"at": [x, y]} keeps a pin,
{"pinned": true} keeps a dragged place; unknown nested fields are refused.
- Tests for each (each fails with its fix reverted), plus the task bar's
preset dropdown picking 1 : 1 in sync with the options bar.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The automation registry check reads a `path` param as a host filesystem
path unless the command is listed as taking a document vector path, as
path.set is. #11005's new path.toShape takes an inline vector path, so it
joins that list; CI failed registry_filesystem_path_params_are_classified.
Co-Authored-By: DingusMcRinkyDinky <DingusMcRinkyDinky@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- zoom field: a menu's I key drops İ/ı text whatever the UI language (the keyboard layout is
not the interface language).
- dropdown type-ahead: one entry per list tagged with its language, cleared on any frame in
another language, so a prefix never carries over a quick switch and back.
- Hebrew and Urdu: live shell test selects each catalog, checks mirroring and glyphs.
- Azerbaijani restart test resets the drawing language before the restarted shell loads.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pinned central font manifest has no Tamil face (storytold/craft-fonts#63 adds one) and the
Linux runner has none installed, so the strict missing-glyph policy panicked on the Tamil
labels. Tamil keeps every label and state check; a guard fails once the manifest ships Taml.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reference application's New Guide dialog has Orientation, Position
(a text field that takes typed units such as "2 cm") and Color, but no
unit dropdown; measured on 2026-11-06. Typed units already work on main,
so the PR only adds something the reference lacks.
This reverts merge 22e03d0bcb.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- #11249: a recorded Blend If Set that also carries real layer effects (a
Lefx with more than the scale) stays the recorded step instead of playing
and saving back without the effects.
- #11541: the toolbar "..." flyout owns Escape, so Escape with it open no
longer deselects or leaves full screen; a failed Edit Toolbar from a left
click on "..." reports its error in the status bar like the flyout row.
- #9862: the click-on-another-layer check uses the commit's targets (the
link group as it is now), so a layer linked after the box opened is not
"another layer".
Each has a test that fails without the fix.
Co-Authored-By: NaufalDzz <NaufalDzz@users.noreply.github.com>
Co-Authored-By: TrevorBrown-dev <TrevorBrown-dev@users.noreply.github.com>
Co-Authored-By: Higgs32584 <Higgs32584@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main gained the Crop tool's "Background (default)" / "Transparent (default)"
Fill labels and the Pen tool's refused-draft messages after these catalogs were
written, and two tests require them in every catalog:
the_fill_labels_are_translated_where_the_old_label_was (az, th, ta) and
esc_ends_a_refused_draft_and_return_keeps_it (th, ta). Built from each
catalog's own terms for Background, Transparent, Default and Work Path.
Co-authored-by: Thanawatttt <89511939+Thanawatttt@users.noreply.github.com>
Co-authored-by: NewsBaba <346041388+newsbaba24x7@users.noreply.github.com>
Co-authored-by: Tamer Albayrak <56173603+Taxperia@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Crop tool gets the reference application's contextual task bar: a small floating
bar centred 11 pt under the crop frame with a grip, the preset dropdown (the options
bar's own, so both stay in sync), Straighten, a ⋯ menu (Hide bar, Reset bar position,
Pin bar position) and, while a crop is pending, Cancel and Done. It follows the frame,
stays inside the canvas, and stays put once dragged or pinned. Window › Contextual Task
Bar (after Tools, as in the reference) shows and hides it.
The bar itself is a reusable widget (widgets/task_bar.rs): position rule, grip, ⋯ menu
and the hide/pin/place state in Panels (kept with the panel layout across restarts,
read by ui.inspect › taskBar, set by ui.set {panels}). A context supplies only its
controls and where ⋯ goes; the Crop contents are tools/crop_task_bar.rs. Generative
Expand stays out until #41.
Also: Lucide pin and rotate-ccw icons, six new strings in all 27 catalogues, parity
661/661 (FLOOR raised), control-protocol docs. Three tests about the options bar's
Ratio dropdown now hide the task bar, which shows the same dropdown.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/korean-translation-validation.md records one agent session's checks
against a base from October (a "root task", a correction ZIP, other apps'
string tables); it says nothing a reader of docs/ can use. The 344 rows #8185
adds on top of main's ko.tsv stay (the merge kept main's wording for the 14
keys where both differ and dropped the 3368 rows main already has).
Co-authored-by: AKY <85772856+arksky1@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#10241: `th.0.plural(5)` calls a function-pointer field with method syntax
(E0599), so the ui-egui test target did not build; call it as `(th.0.plural)(5)`
(CodeRabbit). Add the ATTRIBUTION.md row for th.tsv and Thai to the licence
header (review ask).
#10359, from the review asks on the PR: two rows used spaces instead of a TAB
(Layer Mask Display Options..., Proportional Lining) and two had an empty
fourth column; "Scratch: {size}" translated the placeholder, so it rendered
literally; "Zoom In (hold, drag to scrub)" was split into a second "Zoom In"
key; "Print Settings..." lost its trailing ellipsis to a space. Tamil counts
take one|other, so the 28 two-form @plural rows now use plural_one_other; the
entry moves to the end of the registry. Adds the ATTRIBUTION.md, licence and
docs/localization.md rows, and tamil_tags_plurals_and_placeholders, which fails
on the old plural rule and placeholder.
Co-authored-by: Thanawatttt <89511939+Thanawatttt@users.noreply.github.com>
Co-authored-by: NewsBaba <346041388+newsbaba24x7@users.noreply.github.com>
Co-authored-by: Tanish Manku <13985398+tanish2k09@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each language PR set the array length for main plus its own entry; with six new
languages merged together the registry has 34 entries.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the Background among the selected layers, a press on a Move-tool
transform handle showed the locked-layer alert but was still forwarded
to the Move tool as Down (and, for a click, the tap and Up), so
Auto-Select could change the layer selection. begin_transform_controls_at
now returns ControlsPress (Missed / Started / Refused); the canvas press
and click paths and the ui.pointer path drop a Refused press. Tests drive
real canvas frames (click and drag) and ui.pointer, with an unselected
layer under the handle.
Co-Authored-By: NaufalDzz <NaufalDzz@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Empty commit so the draft batch PR can be opened before any candidate
PR is reviewed and merged on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two CodeRabbit findings on #11249:
- A layer.newFillLayer.gradient step with from, to and stops plays the
stops, but the ATN export refused it. from/to are now left out beside
stops.
- A recorded Make whose Usng also held a name, opacity, mode or clipping
loaded as the plain command, which plays none of them and saved back
without them. It now stays the recorded step.
Each has a test that fails without the fix.
Co-Authored-By: NaufalDzz <90562913+NaufalDzz@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's #11383 renamed an arrow-key run's History step to "Nudge", as the reference
application names it; #10438's new zoomed-out test still expected "Move".
Co-Authored-By: hectorviov <hectorviov@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review fix-ups on #11249 after merging main:
- A midpoint outside 5..95 %, transparency stops out of range or out of
order, and a Gradient Fill Set without transparency stops stay
reference-application steps instead of playing clamped or keeping the
layer's own transparency.
- An inverted Blend If range stays a reference-application step; the
command rejects it at play.
- The Layer Style dialog's OK records `Lefx` = {Scl} beside Blend If on a
layer without effects (measured). That Set is still the dialog's one
step and saves back with the `Lefx` it was recorded with.
Co-Authored-By: NaufalDzz <90562913+NaufalDzz@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main added Effect, Attribute, Color, Smart Object and Artboard to the Layers
panel filter. Group is now the last type in the list, and works like Artboard:
`Filter::with_selection` fills the listed rows once per frame from
`group::listed`, so the panel, the deselect-on-apply step (#10879) and the
control channel all see the same rows; `shows_in`/`group_ids` and the
layers.rs change are gone. This also removes the duplicate `mod group;` and
`mod tests;` lines (E0428) and the rustfmt issues from the review.
- `group::listed` walks the tree with a stack instead of recursion and
returns `LayerId`s.
- `Filter::show_all` is documented: Group keeps each group open or closed.
- Tests go through `Filter::of_app` and `panel_rows`, as the panel does,
plus a deselect-on-apply case and a document without groups.
- control-protocol.md: `group` added to main's `layerFilter` entry.
Co-Authored-By: Nurana100 <Nurana100@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Converting a document (layer copy to another mode/profile, Image > Mode,
Convert to Profile with or without dither, Duotone inks) converted run colours
but not the colours set by character/paragraph styles and Basic Paragraph, so
converted runs showed a false local override and stopped following later
style edits. Duplicate Layer > New Document dropped the source's Basic
Paragraph, giving inheriting type false overrides.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The new `"stepName":"Transform Path"` parameter made the registry probe in
registry_filesystem_path_params_are_classified count edit.transform as a
command that takes a host filesystem path. Add it to the vector-path list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- #11458: the straight-crop rows also check that the active layer's pixels
inside the old canvas are the plain crop's, so a fill that recolours them
fails.
- #11295: the Esc case sends the key through shortcuts::handle instead of
calling cancel directly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The test accepted an added Nudge step; layer.translate records nothing for
a zero offset, so require unchanged entries.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>