Skip to content

deps: Bump DocumentFormat.OpenXml from 3.2.0 to 3.3.0#4

Merged
JSv4 merged 1 commit into
mainfrom
dependabot/nuget/OpenXmlPowerTools.Tests/DocumentFormat.OpenXml-3.3.0
Nov 27, 2025
Merged

deps: Bump DocumentFormat.OpenXml from 3.2.0 to 3.3.0#4
JSv4 merged 1 commit into
mainfrom
dependabot/nuget/OpenXmlPowerTools.Tests/DocumentFormat.OpenXml-3.3.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Nov 25, 2025

Copy link
Copy Markdown
Contributor

Updated DocumentFormat.OpenXml from 3.2.0 to 3.3.0.

Release notes

Sourced from DocumentFormat.OpenXml's releases.

3.3.0

Added

  • Added DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.WorkbookCompatibilityVersion namespace

Fixed

  • Performance of .ToFlatOpc(...) has been greatly improved for large parts (#​1863)

Thanks to the following for their contributions:

@​QuocDatHoang

Commits viewable in compare view.

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

---
updated-dependencies:
- dependency-name: DocumentFormat.OpenXml
  dependency-version: 3.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Nov 25, 2025

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies, nuget. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@JSv4 JSv4 merged commit ad171cc into main Nov 27, 2025
4 checks passed
@JSv4 JSv4 deleted the dependabot/nuget/OpenXmlPowerTools.Tests/DocumentFormat.OpenXml-3.3.0 branch November 27, 2025 15:32
JSv4 added a commit that referenced this pull request Jul 9, 2026
…n reviewer-inserted notes

A reference nested inside a reviewer-INSERTED note's definition body was never
rewritten from the reviewer's id space to the output id space. The body-reference
rewrite (step 2) only visits body clones and the renumber sweep (step 4) keys on
the output-old id, so a reviewer inserting a footnote whose text cites an endnote
the same reviewer ALSO inserts — whose target becomes a fresh output id, not a
base id — left the nested reference on the reviewer id and dangling on
merge/accept/reject.

IrCompositeMarkupRenderer.ApplyCompositeNoteDiffs now rewrites the nested
references inside every reviewer-inserted note definition (all-ins, single-id-space
content) through the same outputId map, before the body-order renumber carries
them to their final ids. Base-matched notes already worked and are untouched.

New IrCompositeCrossKindNoteTests: base cross-kind nesting survives the N-way
renumber (x3 policies); inserted-fn-cites-existing-en and inserted-en-cites-
existing-fn; and inserted-fn-cites-inserted-en (the previously-dangling case).
Each asserts structural reference resolvability on merge/accept/reject; a schema
check runs alongside (excluding Sem_MissingReferenceElement, which OpenXmlValidator
false-positives on cross-part note-body refs). Non-vacuity confirmed by sabotaging
the cross-kind remap. Full suite 2640/0/3. Closes the last untested corner of the
note-scope Consolidate merge.
JSv4 added a commit that referenced this pull request Jul 9, 2026
…ormat changes + cross-kind note fix (#261)

* feat(diff): Consolidate B2 Phase 0+1 — table-shell N-way merge (tcPr/trPr/tblPr/tblGrid/tblPrEx) + byte-level verifiers

Phase 0: strengthen the format-blind composite verifiers first — new Docs.ShellSection byte-level
shell/section projection, asserted alongside the text projections in CompositeFuzzTests (3/4/5-way
regression guard) and the new ConsolidateBlockFormatB2Tests (per-family reject=base/accept=winner).

Phase 1: carve TrackTableFormatChanges (+ TrackSectionFormatChanges) slices out of the umbrella
TrackBlockFormatChanges (mirrors B1's paragraph slice; public opt-out cascades to all three); the
composite turns the table slice ON. Single-reviewer table shells merge via the two-way single-source
render. Multi-reviewer cells stamp w:tcPrChange at the composed-table render gap (was: shell swapped
with no marker -> reject != base). Multi-reviewer trPr/tblPr/tblGrid/tblPrEx compose per-element via
ComposeTableAndRowShells (mirrors ComposeCellShell: 0->base/agree->consensus/>=2->conflict/non-stackable),
carried on IrAuthoredRowOp.TrPr/TblPrEx + IrCompositeOp.TableShell and stamped by ApplyComposedShell.
Revision surface re-gated onto the table slice. reject == base / accept == policy-winner hold at the
property-byte level. B1 ceiling pins re-baselined.

* feat(diff): Consolidate B2 Phase 2 — section N-way merge (w:sectPrChange, trailing + inline)

Carve TrackSectionFormatChanges out of the umbrella (public opt-out cascades); the composite turns it
ON. Trailing sectPr is not a body block op (Word compares it at the document level), so ComposeTrailingSection
composes base vs each reviewer's trailing IrSectionBreak.FormatFingerprint (modeled + unmodeled digest),
mirroring ComposeCellShell; the winner rides on IrCompositeScript.TrailingSectPr and the composite renderer
stamps w:sectPrChange (inner = base, header/footer refs preserved) via ApplyComposedTrailingSectPr. Inline
(in-pPr) sectPr merges by riding B1's paragraph FormatOnly path (SectionKey re-gated onto the section slice).
Two-way section emission + revision surface re-gated onto the section slice (byte-identical when all slices on;
470 two-way + composite regression green). reject == base / accept == policy-winner at the property-byte level.

* test(diff): Consolidate B2 Phase 3 — pin text+format as conflict-routed (v1 decision, never silent-drop)

Per the ratified v1 decision, a reviewer editing a paragraph's TEXT and pPr is conflict-routed, not
inline-composed. The existing ParagraphPropsUnchanged guard already implements this: a cross-reviewer
text+pPr collision falls out of token-composition into a RECORDED block conflict (never a silent format
drop, because RenderComposedParagraph clones base pPr and is never reached with a pPr-changed reviewer);
a SINGLE reviewer's text+pPr edit tracks both (w:ins/w:del + w:pPrChange). True inline text+format compose
is deferred to B3. No production change — pins only.

* docs(diff): Consolidate B2 — flip the block-format ceiling in CHANGELOG/CLAUDE/ir_diff_engine

Consolidate now merges the paragraph (B1) + table-shell + section (B2) block-format families with
per-element attribution + native markup; competing edits conflict per policy; reject == base /
accept == policy-winner at the property-byte level. text+pPr stays conflict-routed (v1 decision).
The only remaining block-format ceiling is split/merge-member pPrChange (a principled decline).

* fix(diff): Consolidate B2 — emit the trailing-section revision exactly once, not per-op

The composite revision renderer renders each op through a two-way one-op mini-script, and the two-way
renderer appends the DOCUMENT-LEVEL trailing-sectPr FormatChanged revision (it compares the two docs'
final section blocks). So a section-changing reviewer with N ops emitted the section revision N times
(6x in a 2-paragraph+section edit). New internal IrDiffSettings.EmitTrailingSectionRevision (default true,
two-way unaffected) is set false for the composite per-op mini-scripts; the composite renderer emits the
section revision EXACTLY ONCE from script.TrailingSectPr, attributed to the section winner. Pinned.

* fix(diff): Consolidate B2 — anchor-aware row-shell pairing + delete-vs-shell conflict + shell revisions (adversarial review)

Adversarial silent-drop review found two correctness holes in ComposeTableAndRowShells's per-row shell
composition, both when a reviewer restructures rows AND another touches the table:
- Finding A (HIGH): row shells paired POSITIONALLY guarded only by row count. A co-toucher's row
  delete/insert either dropped a trPr/tblPrEx change on a kept row (count mismatch) or, worse, mis-paired
  it to the wrong row and stamped a PHANTOM w:trPrChange corrupting the accept output (net-zero restructure).
  Fixed with ResolveRightRowForBaseRow: anchor-aware right-row resolution (a content toucher maps via its
  TableDiff row op; a pure-shell FormatOnly toucher is content-equal so positional is sound) — a co-toucher's
  restructure can never shift the pairing.
- Finding B (MEDIUM): a pure-shell reformat of a row another reviewer DELETES was attached to the DeleteRow
  op and silently dropped. Now a delete-vs-reformat records a conflict (never silent); the delete wins.
- Finding C: multi-reviewer table-shell changes (AuthoredRows path) + the trailing section were absent from
  GetConsolidatedRevisions. The composite revision renderer now emits Table/TableRow/TableCell shell
  revisions (digest-guarded for cells) attributed to each winner, matching two-way GetRevisions.
Pinned by 4 new tests (row-delete+shell, delete-vs-shell conflict, multi-reviewer shell revisions).

* fix(diff): Consolidate B2 — guard tblGrid composition against structural column changes (round-trip review)

Adversarial round-trip review found tblGrid was composed purely on TblGridDigest inequality with no
column-count guard. A structural column ADD/REMOVE also changes TblGridDigest, so B2 misclassified it as
a grid-PROPERTY change and composed it independently — leaving the accepted grid's gridCol count
disagreeing with the tc count (a malformed table Word would auto-repair). reject == base always held; the
break was accept-side. Now tblGrid composes as a property change only for a reviewer whose COLUMN COUNT
matches base (a pure gridCol-width edit); a column add/remove is left to ComposeTableDiffs (native
w:cellIns/w:cellDel), which owns the grid — no spurious w:tblGridChange. Pinned by two tests (column-add
emits no tblGridChange; pure width change still composes). The other 6 round-trip hunts verified SAFE.

* fix(diff): Consolidate M-A #4 — rewrite cross-kind note refs nested in reviewer-inserted notes

A reference nested inside a reviewer-INSERTED note's definition body was never
rewritten from the reviewer's id space to the output id space. The body-reference
rewrite (step 2) only visits body clones and the renumber sweep (step 4) keys on
the output-old id, so a reviewer inserting a footnote whose text cites an endnote
the same reviewer ALSO inserts — whose target becomes a fresh output id, not a
base id — left the nested reference on the reviewer id and dangling on
merge/accept/reject.

IrCompositeMarkupRenderer.ApplyCompositeNoteDiffs now rewrites the nested
references inside every reviewer-inserted note definition (all-ins, single-id-space
content) through the same outputId map, before the body-order renumber carries
them to their final ids. Base-matched notes already worked and are untouched.

New IrCompositeCrossKindNoteTests: base cross-kind nesting survives the N-way
renumber (x3 policies); inserted-fn-cites-existing-en and inserted-en-cites-
existing-fn; and inserted-fn-cites-inserted-en (the previously-dangling case).
Each asserts structural reference resolvability on merge/accept/reject; a schema
check runs alongside (excluding Sem_MissingReferenceElement, which OpenXmlValidator
false-positives on cross-part note-body refs). Non-vacuity confirmed by sabotaging
the cross-kind remap. Full suite 2640/0/3. Closes the last untested corner of the
note-scope Consolidate merge.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant