Repository navigation
Resolve current-main conflicts in control authentication (#783) - #2
Closed
scottcampbelldata wants to merge 408 commits into
Closed
scottcampbelldata wants to merge 408 commits into
scottcampbelldata wants to merge 408 commits into
Conversation
…ion test (storytold#273) In 0.5.0 a click anywhere on the Home ribbon's Paste button (label, icon or dropdown arrow) froze the app for good. home() called paste.secondary_clicked() inside ctx.data_mut(); after any click egui answers that with ctx.input(), which takes the context lock the closure already holds, so the UI thread waited on itself. Sampling the hung 0.5.0 process on macOS shows the main thread parked in RawRwLock::lock_exclusive_slow under Context::write <- data_mut <- ribbon::home. storytold#272 moved the query out of the closure; it landed after the 0.5.0 release, which is the build both reporters used. No test ever clicked the Paste button itself, which is how this shipped. The new test clicks it, then opens its menu with a secondary click and picks Paste Values, on a worker thread with a timeout so a regression fails instead of hanging the run. With storytold#272 reverted it fails (egui's debug lock check panics after 10 s); with it, it passes. The Paste button gets an accessible "Paste" name so the test (and screen readers) can find it, the same way Pictures and Border presets are named. With the freeze gone, the button still did not do what it says: it pasted GridCraft's own copy only (GridState::system_clipboard was never assigned), so text copied in another app gave "Nothing to paste." The ribbon button, its options menu's Paste, the cell and header context menus and the macOS Edit menu now read the system clipboard through a new paste_text host service and paste it like Cmd/Ctrl+V does, falling back to GridCraft's own copy when there is no text (or no service, as on the web). Asking egui for the clipboard instead (RequestPaste) was tried and stalled the macOS event loop until the next input event. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ps a newer programmatic copy
…p (H,V,P) pastes the system clipboard
GridCraft imports XLSB (storytold#101) and ODS (storytold#100) files, and storytold#321 added both to the Linux and Windows "Open with" lists, but the macOS Info.plist still declared only .xlsx, .xlsm, .csv and .tsv, so Finder's Open With didn't offer GridCraft for them. Add two CFBundleDocumentTypes entries (Editor, rank Alternate) with the UTIs macOS reports for these files, plus an imported UTI for .xlsb like the .xlsm one. A test now checks that the macOS and Windows packaging offer the same file types. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A legacy array formula in a .xls file ({=FREQUENCY(...)}, {=TREND(...)}) is
stored as one ARRAY record plus a FORMULA record per cell of its range, each
with the cached result. The importer attached the formula to the anchor cell
but kept the cached values in the other cells as plain constants. On
recalculation the formula then found its range occupied and returned #SPILL!.
The .xlsx reader already drops those cached results; the .xls reader now does
the same once the formula is attached, and keeps the values when the formula
could not be imported.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Following Excel's AutoFill series: - a single time steps by an hour (9:00, 10:00, 11:00); it was copied. - Qtr3 and Quarter3 wrap after 4 like Q3; they counted on to Qtr5. - 1st Period continues as 2nd Period, 3rd Period; it gave 2st, 3st. - a source without a common pattern (Product 1, On backorder) continues each cell's own series; it was copied as is.
A growth series with a step below 1 stopped at once when given a stop value, since the stop was only checked for rising series. It now bounds the series in the direction it runs.
A formula such as =A1+A2+…+A500 nests one level per operator, and the evaluator recursed once per level, so past its depth limit (about 400 operators) the result was #CALC!. Excel allows such formulas up to its 8,192-character limit. Chains of arithmetic, comparison and & operators are now folded in a loop.
home.manageRules took the number of rules once, before deleting, so
{"delete":0,"moveUp":1} with two rules swapped past the end of the
shortened list and panicked (index out of bounds; the session's guard
kept the workbook). The count is now taken after each step.
Merge & Center and Merge Cells kept only the upper-left value, but Merge Across left the other values of each row in place, hidden under the merge and still counted: with 1 2 / 3 4 in A1:B2, SUM(A1:B2) stayed 10 after Merge Across, where Excel gives 4. Each row's merged area now keeps only its first value, as the other merges do.
storytold#864) [@col] is only Excel's display shorthand. Written verbatim into cell formulas and calculatedColumnFormula, it made Excel repair the file and drop the tables.
…part Business Central's "Open in Excel" exports write booleans as <c><f>TRUE()</f><v>1</v></c> with no t="b", so the cached value reads back as the number 1 and the calc oracle reported every such cell as a `number → bool` mismatch. A cached 1 or 0 now matches GridCraft's TRUE or FALSE, and the cells are counted apart (`boolAsNumber` in --json, a note in the text report) so a real number/logical disagreement stays visible. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r track; drop the unused Color32 import Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # crates/ui-egui/src/dialogs.rs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # docs/ui-parity.md
# Conflicts: # crates/ui-egui/tests/interaction.rs
# Conflicts: # crates/xlsx/src/tests/passthrough_tests.rs
Brings the branch up to upstream's main (59 more commits). One conflict: - docs/ui-parity.md: every line of both sides is kept, as upstream's own merges keep them, in the order of their dates, newest first (upstream has a change of the 13th now, which goes above this one of the 12th). Gate: all eight steps, 1580 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # ROADMAP.md # docs/gaps.md # docs/target-app-parity.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # docs/ui-parity.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Thanks @scottcampbelldata for resolving the conflicts and running the CI gates. In the meantime I merged current main into fix/control-auth-777 myself, so storytold#783 is clean again and this refresh is no longer needed. Closing. |
vangel76
pushed a commit
that referenced
this pull request
Oct 22, 2026
Japanese Excel's B4/B5/B6 are the JIS sizes (257×364, 182×257 and 128×182 mm), but Page Setup's `b4`/`b5` were the ISO ones (250×353, 176×250): a Japanese B5 worksheet printed 8 mm narrow. `known_paper` now reads `B4`/`B5`/`B6` as JIS and keeps the ISO sizes reachable as `B4 (ISO)`/`B5 (ISO)`/`B6 (ISO)`. This also fixes the XLSX round-trip, whose `paperSize` ids 12/13 are the JIS sizes. Adds the Japanese papers Page Setup lacked: Japanese Postcard (はがき, 100×148 mm), Japanese Double Postcard (往復はがき, 148×200 mm), Japanese Envelope storytold#3/storytold#4 (長形3号/4号, 120×235 and 90×225 mm), Japanese Envelope Kaku #2/storytold#3 (角形2号/3号, 240×332 and 216×277 mm), A6, and aliases such as `postcard`, `chou storytold#3`, `kaku #2`; the xlsx paper table gains ids 42 (ISO B4) and 43/69–74/88 so these names survive save and reopen (the ISO B5/B6 names have no ECMA-376 paper id and stay engine-side). The pageSetup/pageLayout.size parameter docs list the names, the Page Layout Size menu lists them, and tests pin the point sizes, the PDF MediaBox for A4 (unchanged), B5, postcard, double postcard and kaku #2, landscape and fit-to-page, the unknown-name Letter fallback, and the XLSX round-trip. Docs: docs/target-app-parity.md print row + revision history, and ROADMAP.md progress log, dated 2026-10-21.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves the upstream integration conflicts blocking the current control-authentication contribution in storytold#783. This refreshes author head
fef1f4ddb1dd546f94de045318932d47fbc934d6against main84acf6293b1dc1fc09837524e035d674eb4d6741, preserving the original authentication implementation and both its roadmap entries and incoming upstream entries. Existing upstream changes remain attributed to their authors.All eight
cargo xtask cigates passed on Ubuntu 24.04 / Rust 1.99.0: formatting, strict Clippy, native workspace tests, assets, layering, wasm compilation, parity and keytips. Tested source tree52b3d6851d112b333ff51efc15e7322c6603f19dmatched the stable validation checkout, and both remained unchanged during the run. This establishes the automated integration checks; Windows/macOS permissions and physical desktop behavior have not been independently exercised.