totoz64
b2787bf36e
M7: add a persistent language-aware spelling review dialog
...
Keep compact context menus, but show a correction form for user spelling/editor commands. Advance without wrapping after change, ignore or dictionary actions; reject stale targets and retain programmatic command results.
Add navigation/UI regressions and light/dark preview CI. cargo xtask ci was attempted on the preparation PC but cargo is absent; hosted validation is required before integration.
2026-10-26 10:00:13 +01:00
Dylan M. Taylor
2c99a42780
Merge pull request #4392 from benandez/fix/3866-followup
...
#3866 follow-up: PDF export draws items with authors and cell clips built once per page; endnote selection linear
2026-10-26 01:31:58 -04:00
Dylan M. Taylor
ab0eccd254
Merge pull request #4377 from storytold/sonar/newcode-s3776-a
...
Sonar: reduce cognitive complexity in four engine commands
2026-10-26 01:14:55 -04:00
Dylan M. Taylor
0377edabd8
Merge pull request #4376 from storytold/sonar/newcode-lints-1
...
Sonar: clear S1612, S2208 and S7688 new-code issues
2026-10-26 01:14:51 -04:00
aiongg
438775cea1
Merge pull request #4391 from aiongg/w6
...
View › New Window opens another window on the same document
2026-10-26 00:12:33 -04:00
Martin Ball and Claude Opus 5.5
b94821ea16
#3866 : review — count a step per page walked in the first-page index, so the hinted-page test sees an eager build
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-26 04:05:47 +00:00
Martin Ball and Claude Opus 5.5
e71c9ce31d
#3866 : review — the first-page index is built only when the hinted page doesn't show the paragraph
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-26 04:01:47 +00:00
aiongg
bbf07875d8
Merge branch 'w3' into w6
...
# Conflicts:
# crates/ui-egui/src/dialogs.rs
2026-10-26 03:58:36 +00:00
aiongg
9752ca5897
Merge branch 'w2' into w3
2026-10-26 03:58:00 +00:00
aiongg
e8282d957a
Merge branch 'w1' into w2
2026-10-26 03:57:59 +00:00
aiongg
f93c0cbe52
W1: the merge-records test expects the result beside the unsaved source, with no save prompt
2026-10-26 03:57:59 +00:00
Dylan M. Taylor
73af86b1bf
Merge pull request #4355 from storytold/codex/egui-037-word-followup-20261025
...
Cover formatting copy and paste shortcuts after the egui 0.37 migration
2026-10-25 23:49:35 -04:00
aiongg
503a533e65
Merge branch 'w3' into w6
...
# Conflicts:
# crates/engine/src/lib.rs
2026-10-26 03:40:48 +00:00
aiongg
27068500dd
Merge branch 'w2' into w3
...
# Conflicts:
# crates/ui-egui/Cargo.toml
# crates/ui-egui/src/panes.rs
2026-10-26 03:40:18 +00:00
aiongg
16f6145cd3
Merge branch 'w1' into w2
2026-10-26 03:38:38 +00:00
aiongg
7d512a6905
Merge remote-tracking branch 'upstream/main' into w1
...
# Conflicts:
# Cargo.lock
# Cargo.toml
# NOTICE
# apps/wordcraft/Cargo.toml
# crates/engine/src/lib.rs
# crates/ui-egui/Cargo.toml
# docs/control-protocol.md
# docs/shared-pdf.md
2026-10-26 03:38:36 +00:00
aiongg
54ec19ddf8
Merge branch 'w3' into w6
2026-10-26 03:34:45 +00:00
aiongg
d805dd94f1
W3b: ui.screenshot captures the active window, not the first one
2026-10-26 03:34:39 +00:00
aiongg
6dca584bbd
Task panes: drop a pane outside or inside a docked pane to order a side ( #4386 )
...
* Task panes: a pane dropped over a docked pane's outer or inner third docks outside or inside it, and the order is kept (craft-libs#357)
* Pin craft-libs at b74f1b6 (pane order on an edge, craft-libs#357)
* Pin craft-libs at b926b5c (craft-libs main)
2026-10-25 23:29:51 -04:00
aiongg
b9c074a543
W6: a window's input method joins and equation session stay with that window
2026-10-26 03:26:01 +00:00
aiongg
e900513104
Merge branch 'w3' into w6
...
# Conflicts:
# ROADMAP.md
# crates/engine/src/lib.rs
# crates/engine/src/session.rs
# crates/ui-egui/Cargo.toml
# crates/ui-egui/src/lib.rs
# docs/gaps.md
# docs/parity-checklist.md
# docs/ui-parity.md
2026-10-26 03:22:33 +00:00
Martin Ball and Claude Opus 5.5
ecdc90cdc4
#3866 : review — port the clipped-cell lookup test (nesting, first in page order, other story/row) to the layout crate
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-26 03:15:35 +00:00
aiongg
15090b9d81
Merge pull request #3109 from aiongg/panes-trial
...
Task panes: draw them with craft_ui::panes; Styles docks left or right or floats
2026-10-25 23:13:49 -04:00
aiongg
24986cdb23
W3: new app fields classified as app-wide; window ids and the test host on egui 0.37
2026-10-26 03:11:00 +00:00
aiongg
5632755be4
Merge branch 'w2' into w3
...
# Conflicts:
# Cargo.lock
# ROADMAP.md
# apps/wordcraft/src/main.rs
# crates/ui-egui/Cargo.toml
# crates/ui-egui/src/backstage.rs
# crates/ui-egui/src/control.rs
# crates/ui-egui/src/dialogs.rs
# crates/ui-egui/src/keys.rs
# crates/ui-egui/src/lib.rs
# crates/ui-egui/src/panes.rs
# crates/ui-egui/src/previews.rs
# docs/ui-parity.md
2026-10-26 03:09:46 +00:00
Dylan M. Taylor
f93fe6053f
Merge pull request #4383 from benandez/fix/3876-followup
...
#3876 follow-up: Zotero owner check streams the socket table and refuses when it can't read it
2026-10-25 23:05:38 -04:00
Dylan M. Taylor
6a1e0d0002
Merge pull request #4384 from benandez/fix/3869-followup
...
#3869 follow-up: WOFF2 pre-check counts contours as wuff does (crash on open); tripped hinting isn't cached
2026-10-25 23:05:16 -04:00
aiongg
645cbe52d4
Merge branch 'w1' into w2
...
# Conflicts:
# ROADMAP.md
2026-10-26 03:04:40 +00:00
aiongg
4576b8e624
W1: a command that ends in another document counts as a state change for the input method
2026-10-26 03:04:24 +00:00
aiongg
5e7790ea85
W1: requests a command makes in another document keep their document id when the queue is full
2026-10-26 03:03:36 +00:00
aiongg
8634995c20
W1: control-channel doc tests in their own module beside the control tests
2026-10-26 03:03:36 +00:00
aiongg
a44e3ec8f9
W1: pin craft-libs e8b4dde5
2026-10-26 03:02:07 +00:00
aiongg
4029a4e6fc
Merge remote-tracking branch 'upstream/main' into w1
...
# Conflicts:
# ROADMAP.md
# crates/engine/src/lib.rs
# crates/engine/src/session.rs
# crates/mcp/src/tools.rs
# crates/ui-egui/src/control.rs
# crates/ui-egui/src/i18n/bg.tsv
# crates/ui-egui/src/i18n/cs.tsv
# crates/ui-egui/src/i18n/da.tsv
# crates/ui-egui/src/i18n/de.tsv
# crates/ui-egui/src/i18n/es.tsv
# crates/ui-egui/src/i18n/et.tsv
# crates/ui-egui/src/i18n/fr.tsv
# crates/ui-egui/src/i18n/hr.tsv
# crates/ui-egui/src/i18n/hu.tsv
# crates/ui-egui/src/i18n/it.tsv
# crates/ui-egui/src/i18n/ja.tsv
# crates/ui-egui/src/i18n/ko.tsv
# crates/ui-egui/src/i18n/nl.tsv
# crates/ui-egui/src/i18n/pl.tsv
# crates/ui-egui/src/i18n/pt-br.tsv
# crates/ui-egui/src/i18n/ro.tsv
# crates/ui-egui/src/i18n/ru.tsv
# crates/ui-egui/src/i18n/sl.tsv
# crates/ui-egui/src/i18n/sr-latn.tsv
# crates/ui-egui/src/i18n/sr.tsv
# crates/ui-egui/src/i18n/sv.tsv
# crates/ui-egui/src/i18n/tr.tsv
# crates/ui-egui/src/i18n/uk.tsv
# crates/ui-egui/src/i18n/vi.tsv
# crates/ui-egui/src/i18n/zh-hans.tsv
# crates/ui-egui/src/i18n/zh-hant.tsv
# crates/ui-egui/src/lib.rs
# docs/gaps.md
# docs/mcp.md
# docs/parity-checklist.md
# docs/ui-parity.md
2026-10-26 03:01:45 +00:00
Martin Ball and Claude Opus 5.5
e9dd252096
#3866 : review — PDF export builds the revision authors and clipped cells once per page; part_pieces finds a paragraph's first page from one index; grid_cols once; balloon colour test
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-26 02:57:08 +00:00
Martin Ball and Claude Opus 5.5
8bc825825f
#3876 : review — scan_tables allowed unused off Linux; sandbox and empty-table comments match the refusal rule
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01HUodYU9r4mPHed4pPsjHC2
2026-10-26 02:50:03 +00:00
Dylan M. Taylor
282ebedc85
Merge branch 'main' into sonar/newcode-s3776-a
2026-10-25 22:47:08 -04:00
Dylan M. Taylor
a95a570edc
Merge branch 'main' into sonar/newcode-lints-1
2026-10-25 22:47:05 -04:00
aiongg
45c4197bc1
Restrict Editing: the protection list and password fields carry their labels' names
2026-10-26 02:44:26 +00:00
aiongg
3c25061bab
Merge remote-tracking branch 'upstream/main' into panes-trial
2026-10-26 02:44:26 +00:00
Martin Ball and Claude Opus 5.5
328a58dd03
#3869 : review — hint_strike is native-only like HINT_STRIKE (wasm build); composite and 0x7FFF contour-count tests
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01HUodYU9r4mPHed4pPsjHC2
2026-10-26 02:43:10 +00:00
Dylan M. Taylor
7583871d45
Merge pull request #3875 from benandez/sec/j
...
Security: engine and MCP authority checks (#3699 , #3735–#3737, #3698 )
2026-10-25 22:40:27 -04:00
Martin Ball and Claude Sonnet 5.5
ed1296a1d4
#3871 follow-up: .doc picture decode charges zlib input and DIB copies; budget scales with the file ( #4382 )
...
* #3871 : review — metafile input charged to the decode budget; inline BLIPs deduped; budget scales with input
- A compressed metafile is charged max(inflated size, zlib input), so a record claiming to inflate to nothing still costs its input.
- Inline pictures share one decode per BLIP record, cached by (stream, foDelay, record's own length) instead of the FBSE size field.
- The decode budget is max(512 MB, 64 x input bytes), capped at 2 GiB, so documents of many large legitimate DIBs decode; high-ratio bombs stay capped.
- Decode-budget refusals get their own log line.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01HUodYU9r4mPHed4pPsjHC2
* #3871 : review — a DIB's copy into a BMP is charged to the decode budget before it is made
The charge was w*h*4 after the copy, so a 1x1 header followed by megabytes of tail cost 4 bytes per picture. It is now max(pixels, DIB length), charged first; a bitmap whose copy doesn't fit is dropped rather than copied. The doc comment on the budget scale now says RLE8/RLE4 bitmaps (about 510x) rely on the 512 MB floor.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01HUodYU9r4mPHed4pPsjHC2
---------
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-25 22:37:10 -04:00
Martin Ball and Claude Opus 5.5
e216e7afc1
#3876 : review — docs say an unreadable table refuses; EINTR is retried; the huge-table test drives the real read path
...
- docs/zotero.md and peer.rs module docs: a read error, or an open error other than NotFound,
refuses (sandboxes denying /proc/net/tcp: AppArmor, Snap, Flatpak, are refused).
- read_line_capped retries ErrorKind::Interrupted like std's read_line.
- New scan_tables (what owner_check calls) takes the table opener; the 70 MiB test drives it,
so reinstating take(64 MiB) there fails the test. Added tests for EINTR and a denied open.
- Row parsing uses split_whitespace().nth() instead of collecting a Vec.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-26 02:36:16 +00:00
Martin Ball and Claude Opus 5.5
b654049545
#3874 : review — text box paste charges only what it copies; stories sharing Arc blocks (PDF imports) keep their text ( #4381 )
...
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-25 22:30:32 -04:00
Martin Ball and Claude Opus 5.5
ddda3c4670
#3869 : review — the draw that turns hinting off is redrawn unhinted, so the outline cache never keeps a hinted glyph from a tripped breaker
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01HUodYU9r4mPHed4pPsjHC2
2026-10-26 02:09:31 +00:00
Martin Ball and Claude Opus 5.5
b094b29958
#3869 : review — WOFF2 point pre-check reads glyf nContours as u16 like the decoder (only 0xFFFF is composite)
...
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01HUodYU9r4mPHed4pPsjHC2
2026-10-26 02:09:24 +00:00
Martin Ball and Claude Opus 5.5
4eda77a2de
#3876 : review — Zotero owner check streams the socket table, and an unreadable table refuses
...
The Linux same-user check read /proc/net/tcp{,6} through a 64 MiB take(). Hitting the cap
was silent, so a local user binding ~450k loopback listeners pushed the connection rows
past it; both uids came back unknown and the "trust loopback" arm let their fake Zotero
listener on 23116 through. A truncated last line could also glue to the next header.
Now each table is streamed line by line (BufRead, nothing kept, no total cap, lines capped
at 4 KiB) and stops once both rows are found. Any read error refuses. "Unknown, trust
loopback" remains only for a listener absent from a table read in full (WSL2, proxies).
Tests: rows after 70 MiB of filler, and a read error mid-table.
rich.rs: document that the MAX_RUNS cap still allows one first run per paragraph (bounded
by MAX_PARAS).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-26 02:08:04 +00:00
Dylan M. Taylor
adf33b6ba7
Merge branch 'main' into sec/j
2026-10-25 22:01:43 -04:00
Dylan M. Taylor
66601038df
tests(layout): build the nbsp test document without struct-update syntax ( #4380 )
2026-10-25 21:52:01 -04:00
Dylan M. Taylor
4fd9075e99
Sonar: split flood fill, CSV separator, noise collapse and numbered backspace
...
Extract helpers with unchanged behaviour to bring these functions under the
cognitive-complexity limit (S3776):
- engine cmd/objects.rs clear_background: border_pixels, run_span, push_open_runs.
- engine cmd/tools.rs collapse_noise_matches: flatten_region (Kind is now module-level).
- engine cmd/mailings.rs parse_csv: csv_separator, push_csv_row.
- engine cmd/text.rs backspace_inner: remove_number.
2026-10-25 21:30:49 -04:00