Skip to content

graft batch 4: 20 lands from backlog-1 - #167

Closed
thedancingdeveloper wants to merge 21 commits into
mainfrom
graft/batch-4
Closed

thedancingdeveloper wants to merge 21 commits into
mainfrom
graft/batch-4

Conversation

@thedancingdeveloper

@thedancingdeveloper thedancingdeveloper commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Batch 4 of graft line backlog-1, one commit per land, oldest first, by graft-mirror (decision D26). Merge it with rebase-merge to keep the commits (D28). graft never merges or queues this PR.

  • Base: main at 3a414da (graft c659202e11f214a19138fda72cc0734a35069915a893df45be0d697088bd4c4c0)
  • Lands: 21 (c659202e11f214a19138fda72cc0734a35069915a893df45be0d697088bd4c4c0..cd1bc6fb8ce972d477000f739fc0c0ec4198ee188928bc1a6c3d9fb00053facc2)
Changeset Author Session Work item Attestations Subject
cd1bc6fb8ce97 (appended) thedancingdeveloper ses_01M5VTBC33TPJKHDANFQE1AMFB gh:#167 none Fix review blockers on the gallery batch: changelog fragment, toolchain input, clippy.
c5ea2c6bbd4fe thedancingdeveloper ses_01M5VPGXE05SPX01BCX698CZPT gh:#153 none Enforce the gallery wasm size budget and add large-view benches.
cf7113509d0f6 thedancingdeveloper ses_01M5VNHHDWEGZ35ZADBRGJF4GK gh:#150 none Meet WCAG contrast on recorded exception pairs
cb1095a7c871e thedancingdeveloper ses_01M5VNW9R3M4E3KYN46JY42G6P gh:#154 none Add per-feature downstream build fixtures (minimal, wasm, MSRV).
c858d0e648a18 thedancingdeveloper ses_01M5VMZHADX0YQNYCCS5SGJ309 gh:#162 none ci: icon drift check and cargo-deny advisories
c8d4435df76f1 graft ses_01M5VMMHTP94099PET9Z0DAQ50 gh:#161 none Make crate publishing resumable, guarded and licence-checked.
c87f16c2b2f26 thedancingdeveloper ses_01M5VMMBEPVFXCDFDKPTBB8W5W gh:#159 none Make PR CI scoping dependency-aware (gh-159)
cfe92035ddafd thedancingdeveloper ses_01M5VKWRRQPY301JQD1F8D6W22 gh:#158 none Test slider theme paint and decoder bounds
cbbfc0d50195f thedancingdeveloper ses_01M5VKJ4CNKWW2AB3KHZK5616G gh:#163 none Fix docs drift and mark the hosted gallery unavailable.
cd818dd5dfd29 thedancingdeveloper ses_01M5VJJ1G6E6CEATWZBAEE5F69 gh:#152 none fix: invalidate combobox slice filter cache when options change
cfe7e15c0a73c thedancingdeveloper ses_01M5VJD83YDM3QAR3K4FEDY7X8 gh:#152 none Move #148 and #151 changelog notes into fragments and record #152
ce9859f572ce9 thedancingdeveloper ses_01M5VJ80F5T0MK6S958Y7QDE4H gh:#160 none Stop re-running CI on push to main
c1d7073b5ad4c graft ses_01M5VBEMRWD5CTEXVMHBZKKEDE gh:#152 none combobox: borrow options and cache the filter
ccd4bd5ca514c graft ses_01M5VATT5ANHEQKBSNKGDJMQGN gh:#148 none Rename DialogKind::NonModal to Dismissible
cc6f9a935ddcb graft ses_01M5VA6CNQPH68YFHT7B2RBWD1 gh:#151 none Slider sizes come from theme tokens, and disabled paint uses disabled aliases.
cf6ed4e3e7f3e graft ses_01M5V9RP9JWH1AW093VCW566EP gh:#147 none Decouple dialog action ids from display labels.
c29f4a52b370b graft ses_01M5V9RCEC472BARF1G7712D83 gh:#146 none Name comboboxes from their label or the enclosing Field.
ce7cadaf44837 graft ses_01M5V88E0YVXJJVQTVHV2MX53D gh:#145 none fix(combobox): freeform Enter commits an arrow-key selection
cefd21612c8f5 graft ses_01M5V7Y2C39KZFY6E8FP6N018Y gh:#144 none fix: keep slider geometry finite on extreme ranges
c3391d132c031 graft ses_01M5V7KGEJZA09F22FT5X7YHVW gh:#143 none Fix slider painting and a11y from the pre-input value.
c14829aada948 graft ses_01M5V50XH5PG2K65HDS2018YVJ gh:#141 none Reject oversized data-URI base64 before allocating

Graft-Batch: 4
Graft-Line: backlog-1
Graft-Changeset: cd1bc6fb8ce972d477000f739fc0c0ec4198ee188928bc1a6c3d9fb00053facc2

Graft-Changeset: c14829aada94812c7f05291abee6c96da9bd908ae688da4e6857f41c899a4af5f
Graft-Session: ses_01M5V50XH5PG2K65HDS2018YVJ
Graft-Work-Item: gh:#141
Graft-Batch: 4
Drag and keyboard update the value before the thumb is painted and
WidgetInfo::slider reports it, and changed is set only when the value moved.

Graft-Changeset: c3391d132c0312ddb8f977b408ab33542ee0a971b05871ac2aef00320b3439b9b
Graft-Session: ses_01M5V7KGEJZA09F22FT5X7YHVW
Graft-Work-Item: gh:#143
Graft-Batch: 4
Normalise without subtracting endpoints that overflow, and cover inverted, degenerate, NaN, and tiny-step ranges.

Graft-Changeset: cefd21612c8f5f82124790c954d83d2e232a960025fc7cd151e5c4beee3436437
Graft-Session: ses_01M5V7Y2C39KZFY6E8FP6N018Y
Graft-Work-Item: gh:#144
Graft-Batch: 4
Track whether the highlight was chosen with the arrow keys since the text
last changed. With freeform on, Enter commits that option, and keeps the
typed text otherwise. Typing clears the selection.

Graft-Changeset: ce7cadaf44837292b8d2180e457c3a5f2a82a534ce040f2bdd0c32979bf6455e6
Graft-Session: ses_01M5V88E0YVXJJVQTVHV2MX53D
Graft-Work-Item: gh:#145
Graft-Batch: 4
The accessible name was the placeholder, so a labelled Field was ignored. .label() wins, then the Field label, then the placeholder, then "Combobox"; the typed value stays separate.

Graft-Changeset: c29f4a52b370b3dbac56168bccf29dae0e29eae1c59722613febc89c3c16a795c
Graft-Session: ses_01M5V9RCEC472BARF1G7712D83
Graft-Work-Item: gh:#146
Graft-Batch: 4
Each action now takes a stable id plus display text. CloseReason::Button
and widget ids use the id, so duplicate or translated labels stay distinct.

Breaking: DialogActions::primary and secondary take (id, text).
CloseReason is no longer Copy.

Graft-Changeset: cf6ed4e3e7f3e7e3a89a8dc6f51df37a10608bf637e9485ec8b26cb5bb3a8b8d8
Graft-Session: ses_01M5V9RP9JWH1AW093VCW566EP
Graft-Work-Item: gh:#147
Graft-Batch: 4
… aliases.

gh-151

Graft-Changeset: cc6f9a935ddcb886e2e60cafe1e04a5c6ef0379b4ca645b094f04e1c9a91a58ab
Graft-Session: ses_01M5VA6CNQPH68YFHT7B2RBWD1
Graft-Work-Item: gh:#151
Graft-Batch: 4
Every dialog blocks the page behind it. The variant only chooses dismissal:
Modal closes on a backdrop click, Dismissible on Escape only, Alert on neither.
NonModal stays as a deprecated alias.

Graft-Changeset: ccd4bd5ca514caf7ae0a3bb68f191984763a74d90df86f2f4ee904147b6776bf5
Graft-Session: ses_01M5VATT5ANHEQKBSNKGDJMQGN
Graft-Work-Item: gh:#148
Graft-Batch: 4
The builder keeps a borrowed slice or a ComboboxOptions model instead of
copying every label. Filtering runs only while the popup is open, and the
result is cached on the query and the model revision.

Graft-Changeset: c1d7073b5ad4ceff17acc8c7b2ff6bd2c8dc6961f61303a2497445d07d91151ed
Graft-Session: ses_01M5VBEMRWD5CTEXVMHBZKKEDE
Graft-Work-Item: gh:#152
Graft-Batch: 4
Graft-Changeset: ce9859f572ce96a3ad01e59a70c5b84fea1d5a183fa9e46debfbe957d411b34ef
Graft-Session: ses_01M5VJ80F5T0MK6S958Y7QDE4H
Graft-Work-Item: gh:#160
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
Feature PRs must not edit CHANGELOG.md. Revert the direct #148 and #151
edits (CHANGELOG.md matches main) and add changelog.d fragments for the
dialog Dismissible rename and the Combobox borrowed-options API.

Graft-Changeset: cfe7e15c0a73c3d69c0902366c09431b9d0847f67daafac5bddd50d64da4a48db
Graft-Session: ses_01M5VJD83YDM3QAR3K4FEDY7X8
Graft-Work-Item: gh:#152
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
A plain Combobox::new slice now fingerprints its labels, and every cached
index is bounds-checked, so a rebuilt list while the popup is open cannot
reuse stale indexes.

Graft-Changeset: cd818dd5dfd2979d939a7324d56833a9ecef61e167186f5ecbce6816f7a6ae2f4
Graft-Session: ses_01M5VJJ1G6E6CEATWZBAEE5F69
Graft-Work-Item: gh:#152
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
AGENTS.md now requires changelog fragments, ARCHITECTURE matches Dialog::show, Field documents parent naming, and the README no longer contradicts Accordion or claims a live Pages site.

Graft-Changeset: cbbfc0d50195fc8fc31bbb3f51cc5b83f2a504a504dc54102ae084940dd69bc35
Graft-Session: ses_01M5VKJ4CNKWW2AB3KHZK5616G
Graft-Work-Item: gh:#163
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
Graft-Changeset: cfe92035ddafdbbd8e3eaeaff351ab822644ea1e05e15424928a222d1b404e10a
Graft-Session: ses_01M5VKWRRQPY301JQD1F8D6W22
Graft-Work-Item: gh:#158
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
Graft-Changeset: c87f16c2b2f2632d887a14899f25c623cf4ba6ee921526097340c3f121085840d
Graft-Session: ses_01M5VMMBEPVFXCDFDKPTBB8W5W
Graft-Work-Item: gh:#159
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
Graft-Changeset: c8d4435df76f11859964452bb5f07a40c9abbeece5424e8ac648f81d890ceb420
Graft-Session: ses_01M5VMMHTP94099PET9Z0DAQ50
Graft-Work-Item: gh:#161
Graft-Batch: 4
Rebuild the icon catalogue offline and fail when the committed output
drifts. Run cargo deny for advisories and licences from the shared
deny.toml, and pin the workflow actions to commit SHAs.

Graft-Changeset: c858d0e648a18a5a7f967ad2e0e36426b729d80aad01ff3bcebe355e6f0e0e55d
Graft-Session: ses_01M5VMZHADX0YQNYCCS5SGJ309
Graft-Work-Item: gh:#162
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
Graft-Changeset: cb1095a7c871e4c4e9dba5dd17fb2abdf4cfc3e55f4c5e121567b3d8ee6f3b205
Graft-Session: ses_01M5VNW9R3M4E3KYN46JY42G6P
Graft-Work-Item: gh:#154
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
Light and dark strokes, status borders and the dark primary fill now clear 3:1 (and the white label stays at least 4.5:1). The contrast test no longer lists exceptions.

Graft-Changeset: cf7113509d0f66325be76f9c8fe9e22e36f4f4c91b2f46e450321703da0c09ef4
Graft-Session: ses_01M5VNHHDWEGZ35ZADBRGJF4GK
Graft-Work-Item: gh:#150
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
gallery-wasm now fails when gzip or brotli of the gallery wasm exceeds ci/wasm-budget.txt and uploads the size report. cargo bench -p fluent2-egui --bench large_views times a 10k list, data grid and combobox. Not a required check.

gh:#153

Graft-Changeset: c5ea2c6bbd4fef64fea22a8bd57f42b42dcd7128f5177c3f9aaedf0cf5f1c77bc
Graft-Session: ses_01M5VPGXE05SPX01BCX698CZPT
Graft-Work-Item: gh:#153
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
…in input, clippy.

CHANGELOG.md matches main again; the combobox cache note lives in the gh-152 fragment. Every SHA-pinned dtolnay/rust-toolchain step sets toolchain. xtask check-icons uses args().nth(2) and unchanged sits above tests.

Graft-Changeset: cd1bc6fb8ce972d477000f739fc0c0ec4198ee188928bc1a6c3d9fb00053facc2
Graft-Session: ses_01M5VTBC33TPJKHDANFQE1AMFB
Graft-Work-Item: gh:#167
Claimed-Author: thedancingdeveloper <306930456+thedancingdeveloper@users.noreply.github.com>
Graft-Batch: 4
@thedancingdeveloper

Copy link
Copy Markdown
Collaborator Author

Closed for re-cut (graft defect WI-2577: the second append to this batch didn't push). Batch 5 carries the same lands plus the CI fix c0ff4c0d9155b.

auto-merge was automatically disabled October 26, 2026 10:29

Pull request was closed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant