chore: sync upstream (173 Commits) #13

Merged
alf merged 173 commits from chore/sync-upstream-20261031 into main 2026-10-31 17:00:26 +00:00
Owner

Upstream-Sync von upstream/main (173 Commits). Fast-Forward.

Upstream-Sync von `upstream/main` (173 Commits). Fast-Forward. - 67e39fae Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity - 59fd17ae Merge PR #2980 - 8069ad33 Merge PR #2979 - 82a78a9d Merge PR #2657 - ac27e3da Merge PR #2793 - 79fd7f45 Merge PR #3024 - 671e194b Make the Merge & Center ribbon label part of its split button - 981fad14 Merge pull request #3012 from aiongg/docs-tidy - 7fcf4232 Merge pull request #3013 from aiongg/update-result-dialog - 79722c76 updates: show check results with craft-update's CheckResultDialog - 23299040 docs: tidy wording - 5f7137ca docs: tidy agent, contributor and asset docs - 55850841 Release 0.14.2 - 1f73f62c Flatpak bundle: skip the debuginfo pass manifest-wide (runner has no eu-strip) - fb1e59ff Merge remote-tracking branch 'origin/main' into land-1030b
alf added 173 commits 2026-10-31 17:00:25 +00:00
Checked against Excel 16: YEARFRAC basis 0 tests the end-31 rule against the original start day; MOD gives #NUM! once the quotient magnitude reaches 1.1259E12; NUMBERVALUE no longer rejects unmatched separators; PERCENTRANK gives #DIV/0! from significance 309 and 15 significant digits from significance 15.
The default stays Excel's displayed text, byte for byte.
Excel computes IMSQRT through the polar form, so IMSQRT("-4") is
1.22514845490862E-16+2i rather than 2i. Tests assert strings read back
from Excel; the function-parity doc lists the remaining IM* differences.
`save_fails_upfront_when_the_temp_name_is_taken` calls
`std::os::unix::fs::symlink` but was only gated on non-wasm, so the
engine crate's lib tests did not compile on Windows. Gate it `cfg(unix)`
like the neighbouring permissions test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
window.open(url, "_blank,noopener") named the new window "_blank,noopener" and passed no
features, so a page opened from a workbook link kept window.opener and could navigate the
editor tab. Pass "noopener,noreferrer" as the features argument instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A lookup lifted over an array of needles searched its whole lookup vector once per needle
with no total cap, so =ROWS(XMATCH(SEQUENCE(1048576),-SEQUENCE(1048576))) in a 1.6 KB file
ran for hours and hung file.open. VLOOKUP, HLOOKUP, LOOKUP, MATCH, XLOOKUP and XMATCH now
return #NUM! past 5e8 needle x entry steps, the pattern MMULT uses. Other lifted functions
are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
authenticate() set the read timeout on the writing half of the socket while it read the
token through a try_clone; on Windows the clone has its own timeout, so a peer that never
sent a line held its thread forever (and a per-read timeout let a byte-at-a-time peer
stretch it elsewhere). The first line now has one total deadline, set on the handle being
read and shortened before each read. At most 16 connections may wait to authenticate (more
are closed on accept, as #2174 suggested), and accept errors back off instead of spinning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	crates/functions/src/math.rs
#	crates/functions/src/stat.rs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJaF5jevKidVoJcnTyBFub
Excel: HYPERLINK(1) is the text "1" (ISTEXT is TRUE); with a friendly
name the result keeps that value's type.
Since #2425 checks Agile encryption's dataIntegrity, every workbook Excel
encrypts fails with "the decrypted data failed its integrity check". The
reader keyed the HMAC with the decrypted encryptedHmacKey cut to the salt
size (16 bytes), as [MS-OFFCRYPTO] 2.3.4.14 describes it, but Excel's key
is as long as the hash: 64 bytes for SHA-512. The check now accepts a key
of either length, so spec-literal writers still open and a modified
package still fails.

The test encryptor writes the integrity key as Excel does, so every
encrypted fixture now has Excel's layout; a new test covers both key
lengths, a key of neither length, and tampering with each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found while testing crates/engine/src/fill.rs:595-599

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
While a formula reference is being pointed from the keyboard, Ctrl+arrow
(⌘arrow on a Mac) moved the pointed cell by one, and Ctrl+Shift+arrow
extended the pointed range by one cell, so `=COUNTIF(`, a click on the top
of a column and ⌘⇧↓ pointed at two cells instead of the column of data.
Both now go to the edge of the data region, as the same keys do on the
selection outside an edit: `point_move` takes `jump` and uses the engine's
`selection::jump`, which Ctrl+arrow on the grid already uses, so the two
agree (last filled cell of a run, else the next filled cell, else the sheet
edge). A pointed range that reaches the sheet edge is written as whole
columns or rows (`A:B`), as Excel writes it.

The editor used to read Shift from `i.modifiers`, the modifier state when
the frame's input was collected; an arrow pressed and released within one
frame (a control client's `ui.key`, an automation tool's keystroke) had
already lost it. It now reads the modifiers carried by the arrow's own key
event, as the grid's keyboard handler does.

Test: ctrl_arrows_in_point_mode_jump_to_the_edge_of_the_data (down to the
last filled cell, right across the data, down to the sheet edge, Ctrl+Up
without Shift to the next filled cell, then a plain arrow).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Covers the case the fix exists for: an automation keystroke presses and
releases within one frame, so the frame-wide modifier state is already
empty and only the press event carries Command. With the modifiers read
from `i.modifiers` this assertion fails (B3 instead of B1).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
e6df6f42 removed the #[allow(unused_imports, dead_code)] on the
native_menu module that tests/mac_menu_appkit.rs builds in. That test
only compiles on macOS, so `cargo xtask ci` has failed at clippy on
every Mac since, while the Linux gate stayed green:

- the test called only `install`, leaving `poll`, `sync_windows`,
  `select_theme`, `WINDOW_ITEM` and most `NativeMenu` fields unused;
- the harness = false build has cfg(test) but drops #[test] functions,
  so the unit tests' `use super::*` was an unused import.

The test now also polls the menu with a one-workbook session and checks
that the Window menu lists that workbook (#716), which uses the rest of
the module. The unit tests name `super::` items instead of a glob import.

Verified on macOS 27 (arm64): `cargo xtask ci` passes all 10 steps (with
CRAFT_FONTS_DIR at the gate's craft-fonts commit), and the new check
fails when the poll is removed (Window menu's last item "" vs "Book1").
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	contributors/people.toml
#	docs/ui-parity.md
# Conflicts:
#	contributors/people.toml
# Conflicts:
#	docs/ui-parity.md
# Conflicts:
#	docs/function-parity.md
A checkbox cell drew a box on screen but printed and exported to PDF
its value as TRUE or FALSE. The print path now draws the box as the
grid does: white with a grey outline when unchecked, green with a
white tick when checked. Other values in a checkbox cell still print
as text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found while testing crates/formula/src/printer.rs:164 (write_struct_ref, single column without specifiers)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* fix(flatpak): allow reading launcher version pins

* fix(flatpak): allow reading launcher version pins
# Conflicts:
#	docs/function-parity.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	crates/functions/src/text.rs
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	crates/functions/src/stat/tests.rs
#	docs/function-parity.md
# Conflicts:
#	crates/functions/src/stat/tests.rs
#	docs/function-parity.md
# Conflicts:
#	crates/functions/src/stat/tests.rs
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	crates/functions/src/stat/tests.rs
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Updates: shared check-result dialog from craft-update
docs: tidy agent, contributor and asset docs
Fixes #2920

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
# Conflicts:
#	docs/function-parity.md
Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity
Some checks failed
ci.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (pull_request) Failing after 0s
nix.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (pull_request) Failing after 0s
packaging-lint.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (pull_request) Failing after 0s
sonarcloud.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (pull_request) Failing after 0s
ci.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (push) Failing after 0s
nix.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (push) Failing after 0s
packaging-lint.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (push) Failing after 0s
sonarcloud.yml / Review fixes: describe the YEARFRAC, MOD and PERCENTRANK changes in function-parity (push) Failing after 0s
67e39faeea
alf merged commit 67e39faeea into main 2026-10-31 17:00:26 +00:00
alf deleted branch chore/sync-upstream-20261031 2026-10-31 17:00:26 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/gridcraft!13
No description provided.