Conflicts resolved as unions of behavior wherever possible:
- #1350 (set_properties numeric CAS): kept our stricter
json_values_match (guards u64>f64 precision loss); upstream's
duplicate removed.
- #1351 (web open-from-bytes): our implementation wins (guarded
queue, settle semantics, protocol 2) using upstream's validation
helper so both sides' tests pass.
- #1358/#1359 (Windows printer routing/media): merged both engines —
upstream's route planning, media tables, GDI raster path and driver
options on top of our level-2 enumeration fallback, true-default
resolution, quoted printto params, existence probe, and error
descriptions.
- #1360 (plot-style leniency): decompress_ctb now carries both our
CTBVER1/STBVER1 container tags and structured flag, and upstream's
lenient reader with Windows-1252 handling.
- 3D snapping precedence: upstream's F4 3D osnap system takes
precedence over our #1030 solid edge wires when the mesh cache has
geometry edges; our wires remain the fallback for triangle-only
caches and mesh entities (both test suites pass).
- Fixed upstream-side bugs surfaced by the merge: parametric arc
grips impl/test contradiction, psetupin test path separators, and
our pdf_raster regression where the new dpi argument was threaded
but ignored (GDI 300-DPI would have cached at 150).
- ocs_save repinned to the upstream acadrust rev; docs/command-
reference.md regenerated (the staleness test caught it).
The last four big web-vs-desktop gaps.
XREFs: XATTACH reads the picked drawing's bytes and registers them
name-keyed (the image/PDF-underlay pattern), pre-parses on the web
worker, and the commit merge produces the same xref block flow as
native. Opened drawings resolve xrefs from the registry (trailing-name
match) before cache build; unresolved references produce ONE warning
listing the names and the fix — drop the referenced files on the page
(drops and picker opens now register their bytes) and reopen or
XRELOAD. XRELOAD works off the registry on unsaved drawings too.
Data Link & Extraction: spreadsheet links read picked xlsx/csv bytes
(calamine from slices / CSV from string) through a session registry,
so preview, refresh, and table-insert work on web; extraction takes
external drawings via a multi-file picker parsed on the worker, and
outputs CSV/TXT/.dxex via download_bytes. The disabled 'Add folder'
button explains why.
ARCHIVE/ETRANSMIT: assembles the drawing plus registered images, PDF
underlays, and session plot tables into a deterministic ZIP (minimal
writer over flate2 — no new dependency) delivered as
{stem}_transmit.zip; skipped dependencies are reported by name.
Save/autosave off the UI thread: the parse worker gains a serialize
action (protocol v5) — the document is prepared once on the main
thread (clone, styles, dimension bake), then the DWG/DXF writer pass,
the dominant cost, runs on the worker; any worker failure falls back
to inline serialization with the identical shared implementation.
The save path also clears the dirty flag only when the tab didn't
change mid-write, and the runtime-fields sidecar now carries
graphic_data, fixing a pre-existing loss of raw DWG round-trip bytes
on web-opened documents.