Commit Graph
1103 Commits
Author SHA1 Message Date
prxnvt 83ae63f793 Engine: a stash item with only later chunks reads as missing and falls back to the legacy name
With chunk _gc_k_2 but no _gc_k_0, get returned Some("") and never looked at _sc_k. It now takes the legacy path unless chunk 0 exists.
2026-10-21 15:18:15 -04:00
prxnvt e165eaf3a6 Engine: a linked paste of values from a file carries the file's trust
A linked paste writes formulas even when it pastes values, but the values exception skipped the trust update, so a Local workbook stayed Local after linking to a FromFile one. The exception now applies only to unlinked pastes.
2026-10-21 15:18:15 -04:00
prxnvt 7d1fee8c78 Engine: workbook data in chunked hidden names (cmd/stash.rs)
GridCraft keeps workbook data in hidden defined names so it travels
inside the xlsx file. The existing items write one name holding one
string literal, which past Excel's 255-character literal and
8,192-character formula limits gives a file Excel does not accept.

cmd/stash.rs stores an item `key` as hidden workbook-scope names
_gc_<key>_0, _gc_<key>_1, ..., each a formula of string literals of at
most 255 characters (UTF-16 units, as Excel counts them) joined with &,
at most 8,192 characters per name. Reading concatenates the chunks in
order and stops at a gap; it also accepts the older single _sc_<key>
name. Names are matched case-insensitively and only at workbook scope.
Keys are limited to letters, digits, _ and ., items to 4,194,304
characters, and junk around or inside the literals, duplicate or
out-of-order chunks, non-JSON and over-deep JSON all read safely.
keys(prefix) lists the stored items that start with a prefix.

Custom views, scripts, the watch list and scenarios keep their current
storage; nothing reads or writes the new names yet.

docs/architecture.md describes the engine building blocks added in this
series: undo groups, the recording buffer, document trust and this
storage.
2026-10-21 14:05:48 -04:00
prxnvt b7bce3bc09 Engine: document trust for workbooks opened from files
Active content such as macros must not run only because a workbook was
opened. DocState gets a trust state: Local for workbooks made in the
session (new workbooks and samples) and FromFile for anything opened
with file.open. Active content in a FromFile workbook asks before it
runs. A second window on a workbook shares its trust.

The clipboard carries the trust of its source document. Pasting
formulas, formats (conditional formats hold formulas) or validation
from a FromFile workbook into another workbook makes that workbook
FromFile too; pasting values, column widths or notes carries nothing
active and changes nothing. Sheet moves and copies stay inside one
workbook, so its trust is unchanged. document.inspect reports the trust.
2026-10-21 14:05:48 -04:00
prxnvt d4f1e61c99 Engine: a recording buffer of top-level commands, apart from the journal
A macro recorder needs more than a journal index: the journal is
trimmed past 10,000 entries, it also holds the commands that other
commands run (so playback would run them twice), and it keeps no
selection, which relative references need.

Session now tracks how deeply execute calls are nested. While recording,
a buffer (record.rs) keeps each successful, journaled top-level call with
the document uid, the active sheet (index and name) and the selection it
ran in, then its id and parameters without secrets, as the journal
stores them. Queries, failed commands and the command that starts
recording are not kept. The buffer holds up to 100,000 steps and counts
any it drops. Session::start_recording, stop_recording, is_recording and
depth are the interface.

Automate › Record Actions keeps recording through the journal as before.
2026-10-21 14:05:41 -04:00
prxnvt acfd38f309 Engine: undo groups make several commands one undo step
Session::grouped(label, f) runs f as one undo step on the active
document. On success the group leaves exactly one undo entry holding the
workbook from before the group; on error it restores the workbook,
selection, undo and redo stacks as they were and returns the error.
group_begin, group_end and group_rollback do the same across separate
calls, for an action that runs one step per call.

While a group is open on a document, undoable commands on it add no
undo steps of their own, so a long group neither grows the history nor
pushes older entries past the undo limit, and Undo and Redo are
disabled there. Groups nest: the outermost one makes the step, and a
failing inner group rolls back only its own changes. Closing a document
drops its groups, and a command that panics drops the groups it opened.
history.list reports whether a group is open.

Insert Copied Cells folds its nested steps into one undo step by
counting revisions; inside a group the nested steps push no entries, so
it now leaves the history alone there instead of removing entries from
before the group.
2026-10-21 14:05:41 -04:00
Dylan M. Taylor 37e41424ed Merge pull request #1620 from dylanmtaylor/ci/shared-nix-workflow
ci: switch to shared nix workflow from craft-common-actions
2026-10-21 03:40:22 -04:00
Brandon ThomasandClaude Opus 5.5 68e58a2eae Skip CodeRabbit reviews on Dependabot PRs (#2057)
Adds .coderabbit.yaml so CodeRabbit no longer reviews or comments on PRs opened by dependabot[bot].

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 11:39:59 -04:00
Brandon ThomasandClaude Opus 5.5 a2cc4b42ca Release 0.9.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.9.0
2026-10-19 22:20:35 -04:00
Dylan M. Taylor 23829d8c67 Merge pull request #1828 from dylanmtaylor/chore/drop-competitor-references
docs: drop references to competing commercial software
2026-10-19 17:12:29 -04:00
Brandon Thomas 49fe41afbf Merge pull request #1892 from vedran-dobos:options-prefix-translations
# Conflicts:
#	crates/ui-egui/src/i18n.rs
#	docs/localization-parity.md
2026-10-19 12:33:01 -04:00
Brandon Thomas 4401b3e5c5 Merge pull request #1877 from SocraticsAI:host-chrome 2026-10-19 12:32:51 -04:00
Brandon Thomas aa4125952e Merge pull request #1910 from Silvertree2010:fix/1907-bug-touchscreen-devices-cannot-p 2026-10-19 12:32:51 -04:00
Brandon Thomas 8492416c74 Merge pull request #1916 from Silvertree2010:fix/1915-desktop-theme-watcher-opens-a-ne 2026-10-19 12:32:51 -04:00
Brandon Thomas 47fc3d5d35 Merge pull request #1922 from Silvertree2010:fix/h552-rangeref-parse-accepts-signed-ro 2026-10-19 12:32:51 -04:00
Brandon Thomas 70018d4e60 Merge pull request #1925 from DrM7md:nux/insert-delete-whole-lines 2026-10-19 12:32:51 -04:00
Brandon Thomas b402359fa4 Merge pull request #1938 from Mouhand-Kaddo:fix/html-export-rtl
# Conflicts:
#	docs/file-format-parity.md
#	docs/localization-parity.md
2026-10-19 12:32:51 -04:00
Brandon ThomasandClaude Opus 5.5 92c0d1e936 Chrome: turning the File tab off closes a Backstage that is already open
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:23:08 -04:00
Brandon ThomasandClaude Opus 5.5 27f4c9c7bc Touch pan: a pan that never saw its release doesn't swallow the next press
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:22:57 -04:00
Brandon ThomasandClaude Opus 5.5 f5267cb74e docs: one Last updated line per parity doc after merging
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:22:25 -04:00
Brandon Thomas b77848ee21 Merge pull request #1882 from neilcawse:fix/pivot-grand-totals
# Conflicts:
#	docs/file-format-parity.md
2026-10-19 12:22:07 -04:00
Brandon Thomas f8e916bcd4 Merge pull request #1902 from Shnrqpdr:fix/1846-autofit-keytips
# Conflicts:
#	docs/ui-parity.md
2026-10-19 12:22:06 -04:00
Brandon Thomas ab6fd48856 Merge pull request #1867 from HyakoV3:fix/1808-csv-as-text
# Conflicts:
#	docs/file-format-parity.md
2026-10-19 12:22:05 -04:00
Brandon Thomas 06a94d42b2 Merge pull request #1935 from Mouhand-Kaddo:fix/shape-text-rtl
# Conflicts:
#	docs/file-format-parity.md
#	docs/localization-parity.md
2026-10-19 12:22:04 -04:00
Brandon Thomas 7b8aaf9ca7 Merge pull request #1939 from Mouhand-Kaddo:fix/xls-right-to-left-sheets
# Conflicts:
#	docs/file-format-parity.md
#	docs/localization-parity.md
2026-10-19 12:22:02 -04:00
Brandon Thomas 12ee27a177 Merge pull request #1943 from Mouhand-Kaddo:fix/table-name-length
# Conflicts:
#	docs/localization-parity.md
2026-10-19 12:22:01 -04:00
Brandon Thomas 8d562e9b56 Merge pull request #1879 from Silvertree2010:fix/h2804-custom-autofilter-is-less-than-l 2026-10-19 12:21:34 -04:00
Brandon Thomas 937cfd1e91 Merge pull request #1903 from justinjohn0306:fix/1855-backspace-undo 2026-10-19 12:21:29 -04:00
Brandon Thomas 46c706a491 Merge pull request #1845 from MarekSpodBiedry:issue-1830 2026-10-19 12:21:28 -04:00
Brandon ThomasandClaude Opus 5.5 33ac9e5f64 Drop the dbus-run-session test: it spawns a bus, sleeps 9 s and fails where dbus-daemon is missing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:21:13 -04:00
Brandon ThomasandClaude Opus 5.5 8968e83359 RangeRef::parse: whole columns take at most one $ too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:21:01 -04:00
Brandon ThomasandClaude Opus 5.5 f2473d1f33 Ctrl+Shift+= on several whole-row areas still opens the Insert dialog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 12:20:46 -04:00
Brandon Thomas a6757829eb Merge pull request #1814 from Higgs32584:fix-1447-pivot-bool-error-flags 2026-10-19 12:19:54 -04:00
Brandon Thomas 29f9959521 Merge pull request #1866 from HyakoV3:fix/1528-formula-edit-sheet 2026-10-19 12:19:53 -04:00
Brandon Thomas 8e8e2ba73c Merge pull request #1920 from vedran-dobos:range-fill-formats 2026-10-19 12:19:51 -04:00
Brandon Thomas 33a5415f0e Merge pull request #1941 from Silvertree2010:fix/h618-textbefore-textafter-with-negati 2026-10-19 12:19:50 -04:00
Brandon Thomas 859e654dce Merge pull request #1923 from DrM7md:nux/clippy-1-95 2026-10-19 12:19:25 -04:00
Brandon Thomas 93cb9828bd Merge pull request #1926 from DrM7md:nux/rtl-explicit-align 2026-10-19 12:19:24 -04:00
Brandon Thomas 851583365f Merge pull request #1934 from Mouhand-Kaddo:fix/arabic-name-length 2026-10-19 12:19:23 -04:00
Brandon Thomas 448c167e68 Merge pull request #1947 from Mouhand-Kaddo:fix/xls-dialog-sheets 2026-10-19 12:19:17 -04:00
Brandon Thomas 9767efe66e Merge pull request #1965 from HaSh3003:fix/1714-outline-zero-width 2026-10-19 12:19:16 -04:00
HaSh3003 5eae222fbc Outline: + shows zero-width hidden columns at the default width (fixes #1714)
Templates hide grouped columns as width="0" hidden="1". Show Detail and the level buttons only cleared hidden, so the columns stayed invisible; they now reset a zero size, as Unhide does.
2026-10-19 18:21:54 +03:00
Mouhand-Kaddo 7cd0a386aa M12.AR17: skip .xls dialog sheets instead of reading them as worksheets 2026-10-19 17:29:40 +04:00
Mouhand-Kaddo eee872e429 M12.AR16: limit table names to 255 characters 2026-10-19 17:04:06 +04:00
NetterSilverandClaude Haiku 5.5 e9ffc71c6a Search from the end for negative TEXTBEFORE/TEXTAFTER instances
Found while testing crates/functions/src/text.rs:511-552

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 12:27:46 +00:00
Mouhand-Kaddo a10ead1c09 M12.AR11: mark right-to-left sheets and Arabic text in HTML export 2026-10-19 15:59:46 +04:00
Mouhand-Kaddo 59074fdc16 M12.AR9: open right-to-left sheets from .xls files right-to-left 2026-10-19 15:59:46 +04:00
Mouhand-Kaddo 90344445d7 M12.AR10: keep right-to-left paragraph direction in text boxes and shapes 2026-10-19 15:46:21 +04:00
Mouhand-Kaddo fb7b23dbad M12.AR8: count characters, not bytes, in name length limits 2026-10-19 15:33:05 +04:00
NetterSilverandClaude Haiku 5.5 620be76873 Reject signed and multi-$ whole-row ranges in RangeRef::parse
Found while testing crates/core/src/addr.rs:217

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 10:48:47 +00:00