Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
aa212f9
docs(intro): tighten installation card copy (#2991)
caio-pizzol Apr 29, 2026
1a39a26
docs(intro): broaden AI Agents card to agent workflows (#2993)
caio-pizzol Apr 29, 2026
2e4d012
ci(release): gate production docs on stable release success (#2989)
caio-pizzol Apr 29, 2026
14642bc
ci(docs): trigger preview workflow on docs PRs to main (#2992)
caio-pizzol Apr 29, 2026
779dd60
ci(docs): always post preview URL once per PR
caio-pizzol Apr 29, 2026
4f4c417
ci(docs): refresh main docs preview on push
caio-pizzol Apr 29, 2026
86d3d9e
ci(docs): allow manual workflow_dispatch on main docs preview
caio-pizzol Apr 29, 2026
f976c4d
ci(docs): rename docs preview workflows for clarity
caio-pizzol Apr 29, 2026
dee4d04
Merge pull request #2995 from superdoc-dev/caio/docs-stable-promote-test
caio-pizzol Apr 29, 2026
d5e6771
chore(esign): 2.6.0 [skip ci]
semantic-release-bot Apr 29, 2026
5463f94
chore(react): 1.2.0 [skip ci]
semantic-release-bot Apr 29, 2026
abcd35b
chore(template-builder): 1.7.0 [skip ci]
semantic-release-bot Apr 29, 2026
6ac88fa
fix(release): build workspace before vscode-ext recovery package
caio-pizzol Apr 29, 2026
5259105
fix: sdt field style (#2958)
artem-harbour Apr 28, 2026
5e2d120
Merge pull request #3005 from superdoc-dev/caio/sd-2744-sdt-field-sty…
caio-pizzol Apr 29, 2026
163a646
chore(release): 1.29.1 [skip ci]
semantic-release-bot Apr 29, 2026
b4dc535
chore(esign): 2.6.1 [skip ci]
semantic-release-bot Apr 29, 2026
6f33b7d
chore(react): 1.2.1 [skip ci]
semantic-release-bot Apr 29, 2026
7d413f4
chore(template-builder): 1.7.1 [skip ci]
semantic-release-bot Apr 29, 2026
a37bc85
feat: add presetContent for template builder (#2856)
artem-harbour Apr 26, 2026
fce6408
Merge pull request #3007 from superdoc-dev/caio/sd-2548-presetcontent…
caio-pizzol Apr 29, 2026
e87ea32
chore(template-builder): 1.8.0 [skip ci]
semantic-release-bot Apr 29, 2026
981e97f
Merge branch 'main' into nick/merge-main-stable
harbournick Apr 30, 2026
c813f7f
ci: run stable promotion checks after Labs PR build
harbournick Apr 30, 2026
704885b
fix: comments.create partial target shape handling
harbournick Apr 30, 2026
0b29d32
fix: return null selection target for node selections
harbournick Apr 30, 2026
8c24653
chore: disable qualification checks for now
harbournick Apr 30, 2026
0fca49c
Merge pull request #3023 from superdoc-dev/nick/merge-main-stable
harbournick Apr 30, 2026
1e37155
chore(release): 1.30.0 [skip ci]
semantic-release-bot Apr 30, 2026
d7d34d2
refactor(ui): drop ui.review, add ui.trackChanges (SD-2667) (#3029)
caio-pizzol Apr 30, 2026
2839ba8
Merge pull request #3030 from superdoc-dev/caio/sd-2667-ui-track-chan…
caio-pizzol Apr 30, 2026
ba43b02
fix(ui): document useSuperDocTrackChanges return shape
caio-pizzol Apr 30, 2026
72c5af9
Merge pull request #3032 from superdoc-dev/caio/sd-2667-ui-track-chan…
caio-pizzol Apr 30, 2026
9117aff
chore(release): 1.30.1 [skip ci]
semantic-release-bot Apr 30, 2026
92f6465
Merge main into stable
caio-pizzol May 1, 2026
6a8b0c3
Merge pull request #3075 from superdoc-dev/merge/main-into-stable-202…
caio-pizzol May 1, 2026
13fd773
chore(cli): 0.8.0 [skip ci]
semantic-release-bot May 1, 2026
fd8d60d
chore(sdk): 1.8.0 [skip ci]
semantic-release-bot May 1, 2026
c05951e
chore(mcp): 0.3.0 [skip ci]
semantic-release-bot May 1, 2026
0caff9c
chore(release): 1.31.0 [skip ci]
semantic-release-bot May 1, 2026
4e0e649
feat(ci): add workflow_dispatch to promote-stable-docs
caio-pizzol May 1, 2026
0e2cb7a
Merge pull request #3081 from superdoc-dev/caio/promote-stable-docs-d…
caio-pizzol May 1, 2026
9252ed2
fix: invalid css (#3115)
artem-harbour May 4, 2026
c8cbc9c
fix(template-builder): bump superdoc peer dep floor to 1.31.1 (IT-1002)
caio-pizzol May 4, 2026
aa7eb22
Merge pull request #3121 from superdoc-dev/caio/sd-2930-fix-css-stable
caio-pizzol May 4, 2026
17df40b
chore(cli): 0.8.1 [skip ci]
semantic-release-bot May 4, 2026
c6e9ab0
chore(sdk): 1.8.1 [skip ci]
semantic-release-bot May 4, 2026
2a89894
chore(mcp): 0.3.1 [skip ci]
semantic-release-bot May 4, 2026
0bfde3f
chore(release): 1.31.1 [skip ci]
semantic-release-bot May 4, 2026
850a90d
Merge branch 'stable' into caio/it-1002-bump-superdoc-peer-floor_stable
caio-pizzol May 4, 2026
be8095a
Merge pull request #3123 from superdoc-dev/caio/it-1002-bump-superdoc…
caio-pizzol May 4, 2026
40f66da
chore(template-builder): 1.9.0 [skip ci]
semantic-release-bot May 4, 2026
780aa54
fix: handle SuperDoc context-menu paste
caio-pizzol May 4, 2026
bbb62e5
test(super-editor): cover slice-less SuperDoc HTML and media MIME pre…
caio-pizzol May 5, 2026
62446a1
Merge pull request #3137 from superdoc-dev/caio/sd-2934-context-menu-…
caio-pizzol May 5, 2026
0d06559
chore(vscode): 2.3.0 [skip ci]
semantic-release-bot May 5, 2026
95e0611
chore(release): 1.31.2 [skip ci]
semantic-release-bot May 5, 2026
a414938
chore: merge main into stable (conflicts need resolution)
github-actions[bot] May 7, 2026
fd169e2
chore: resolve stable promotion conflicts
caio-pizzol May 7, 2026
9ec1a9e
chore(ci): disable PyPI publish steps in release-stable until access …
caio-pizzol May 7, 2026
ed7c1d5
Merge pull request #3196 from superdoc-dev/chore-disable-pypi-publish…
caio-pizzol May 7, 2026
961c3c0
Merge pull request #3193 from superdoc-dev/merge/main-into-stable-202…
caio-pizzol May 7, 2026
c8539d0
chore(cli): 0.9.0 [skip ci]
semantic-release-bot May 7, 2026
3b2b53c
chore(release): 1.32.0 [skip ci]
semantic-release-bot May 7, 2026
4857a93
chore(mcp): 0.4.0 [skip ci]
semantic-release-bot May 7, 2026
811570f
chore(react): 1.3.0 [skip ci]
semantic-release-bot May 7, 2026
9ad23a6
chore(vscode): 2.4.0 [skip ci]
semantic-release-bot May 7, 2026
3946d14
chore(template-builder): 1.10.0 [skip ci]
semantic-release-bot May 7, 2026
c942569
ci: auto-resolve version conflicts in promote-stable workflow (#3194)
caio-pizzol May 7, 2026
68ee100
fix(mcp): fall back to z.unknown() for oneOf with non-object variants…
caio-pizzol May 7, 2026
f026e6d
docs: require checking comment-policy.md before editing comments (#3202)
caio-pizzol May 7, 2026
92583a1
fix(layout-bridge): separate text direction from RTL hit testing (#3191)
caio-pizzol May 7, 2026
34bed5b
refactor(release): capability-based descriptors for stable orchestrat…
caio-pizzol May 7, 2026
afb6f63
SD-2664 - feature support word style update field interactions for TO…
chittolinag May 8, 2026
b7d0f0c
fix(converter): preserve hyperlink mark on inserted text split across…
tupizz May 8, 2026
91f0f7d
SD-2678 - Cannot delete contentlocked inline sdt with normal (#3129)
chittolinag May 8, 2026
6983252
feat(demos/custom-ui): color pickers for tracked changes and comments…
caio-pizzol May 8, 2026
5d71456
feat(workflows): notify homepage repo on stable superdoc release (#3216)
caio-pizzol May 10, 2026
358adb4
Fix/unset link clear transient hyperlink styleid (#3190)
christos8333 May 10, 2026
1cbcbd1
fix(super-editor): guard cached paragraph props lookup in indent comm…
caio-pizzol May 10, 2026
c33bd1f
docs: add christos8333 to community contributors (#3218)
superdoc-bot[bot] May 10, 2026
07847e0
feat: render images inside Word textboxes (SD-2804) (#3207)
tupizz May 11, 2026
f8c28ef
feat(release): add superdoc to stable orchestrator (chain-aware fail-…
caio-pizzol May 11, 2026
1951844
feat(release): add react to stable orchestrator (#3221)
caio-pizzol May 11, 2026
28797d8
feat(release): add vscode-ext to stable orchestrator (#3222)
caio-pizzol May 11, 2026
7f22172
fix(workflows): point homepage notify at stable orchestrator (#3229)
caio-pizzol May 11, 2026
4bd62a0
fix(super-editor): recurse into nested marks in TOC sanitizer (#3230)
caio-pizzol May 11, 2026
feb9d5b
fix: missing headers in collab mode; wrong odd/even headers (#3188)
VladaHarbour May 12, 2026
e90a955
fix(document-api): align position readback with write-side offset mod…
caio-pizzol May 12, 2026
fd835c1
feat(pm-adapter): preserve run-level bidi/script metadata on TextRun …
caio-pizzol May 12, 2026
312771b
feat(types): deep public-type audit gate (SD-2977) (#3185)
caio-pizzol May 12, 2026
7e0fad8
fix(pm-adapter): plumb body section direction context through resolve…
caio-pizzol May 12, 2026
7e77f46
fix(mcp): rename wire fields to contract names before dispatch (#3215)
bjohas May 12, 2026
26a1703
docs: add bjohas to community contributors (#3255)
superdoc-bot[bot] May 12, 2026
78ecbaf
fix: align rtl date token rendering with word parity (#3250)
artem-harbour May 12, 2026
322e95c
feat(types): harden package shape (SD-2978) (#3251)
caio-pizzol May 12, 2026
67013eb
feat(converter): render EMF+ images via embedded bitmaps (SD-2503) (#…
gpardhivvarma May 12, 2026
813bc1e
fix: mirror explicit left/right paragraph alignment for rtl (#3235)
artem-harbour May 12, 2026
276800a
fix: align rtl toolbar state and alignment writes with ooxml bidi (#3…
artem-harbour May 12, 2026
5b8b712
fix: make copy slice metadata hidden (#3232)
VladaHarbour May 13, 2026
8258348
fix(super-editor): null-safe getTrackChanges to avoid init-race crash…
tupizz May 13, 2026
a3acb02
fix(converter): preserve CommentReference rStyle on comment anchor ru…
tupizz May 13, 2026
d749498
refactor: migrate paragraph consumers to directionContext (SD-2777) (…
caio-pizzol May 13, 2026
cd89f3d
docs: add content controls page, examples, and demo (IT-1046) (#3265)
caio-pizzol May 13, 2026
0de9d40
feat(super-editor): native LTR/RTL paragraph direction toolbar (#3226)
shri-scale May 13, 2026
e333d45
feat: rtl for tables (#3227)
artem-harbour May 13, 2026
614a022
feat(demos): expand contract-templates with Word-authored NDA fixture…
caio-pizzol May 13, 2026
6b1e535
chore(ci): add contract-templates to demos smoke matrix (#3271)
caio-pizzol May 13, 2026
3bdd139
docs: add shri-scale to community contributors (#3270)
superdoc-bot[bot] May 13, 2026
6dec67d
fix(rtl-tables): drop double-mirror for logical cell margins (SD-3134…
caio-pizzol May 13, 2026
0fa7fc3
chore(ci): install pnpm in demos smoke-test job (#3274)
caio-pizzol May 13, 2026
642daa0
SD-3116 - bug: SVG image doesn't render on imported files (#3268)
chittolinag May 14, 2026
92bf8d8
fix: remove block sdt on delete press when cursor is on the first pos…
VladaHarbour May 14, 2026
707e7b1
feat(content-controls): support richText type and regenerate NDA demo…
caio-pizzol May 14, 2026
b368309
docs: add contributor placement guide for SuperDoc layers (#3278)
caio-pizzol May 14, 2026
20fac33
docs: reposition self-hosted collaboration guidance (#3277)
caio-pizzol May 14, 2026
6be949a
fix(content-controls): default newly-created controls to richText, no…
caio-pizzol May 14, 2026
02af725
docs(direction): document visual mirror rule + drop dead isRtl args (…
caio-pizzol May 14, 2026
88eece5
fix(direction): preserve explicit bidiVisual=false in resolveTableDir…
caio-pizzol May 14, 2026
c219d5f
fix(converter): preserve explicit w:bidiVisual w:val="0" on export (S…
caio-pizzol May 14, 2026
bac6ece
refactor(direction): add getTableVisualDirection helper, migrate cons…
caio-pizzol May 14, 2026
b52ea27
ci(behavior): bump playwright shards from 4 to 5
caio-pizzol May 14, 2026
2725e6c
docs(collaboration): tighten YHub/Hocuspocus framing (follow-up to #3…
caio-pizzol May 14, 2026
6f59d64
docs(examples): add yhub provider example (#3282)
caio-pizzol May 14, 2026
8986465
docs(collaboration): add YHub guide (#3286)
caio-pizzol May 14, 2026
1706dca
feat(direction): populate TableAttrs.tableDirectionContext in pm-adap…
caio-pizzol May 14, 2026
315c75f
docs(claude-md): trim root, move eval suite to evals/AGENTS.md (#3288)
caio-pizzol May 14, 2026
7a7b426
fix(types): drain Tier 4 any from public contract (SD-2834) (#3258)
caio-pizzol May 14, 2026
b7d7252
fix(content-controls): mutate locked SDTs via AttrSteps and inner-ran…
caio-pizzol May 14, 2026
63abacb
test(behavior): document-api locked SDT mutations (SD-3144) (#3291)
caio-pizzol May 14, 2026
c7ca587
fix(converter): preserve theme rFonts on DOCX round-trip (SD-2894) (#…
tupizz May 14, 2026
2454b19
refactor(direction): centralize last paragraph isRtl reads on helper …
caio-pizzol May 14, 2026
b1cb5c5
feat(agent-docs-audit): policy, L1 scanner, L2+L3 SDK script, weekly …
caio-pizzol May 14, 2026
cfe39d7
docs(agent-docs): enforce canonical AGENTS symlinks (#3298)
caio-pizzol May 14, 2026
6839504
fix(super-editor): import <w:temporary/> and lock appearance default …
caio-pizzol May 14, 2026
644bbba
fix(super-editor): stop default-rPr injection + normalize pgMar twips…
tupizz May 14, 2026
34c82da
feat(agent-docs-audit): add diff-scoped PR comments (#3299)
caio-pizzol May 14, 2026
b4a8208
feat(agent-docs-audit): delta-only high-confidence CI gate (#3301)
caio-pizzol May 14, 2026
4b2b38f
fix(superdoc): restore find input focus after match navigation (SD-30…
tupizz May 14, 2026
734b1f6
fix(build): isolate shared/common declaration emit from @types auto-i…
caio-pizzol May 14, 2026
811f630
refactor(direction): drop ParagraphAttrs.direction scalar field (SD-2…
caio-pizzol May 14, 2026
4f32bf7
feat(document-api): customXml.parts.* — list/get/create/patch/remove …
caio-pizzol May 14, 2026
8223b23
fix(super-editor): keep comment range markers around unpaired tracked…
tupizz May 14, 2026
b24b6ec
fix(context-menu): fix slash menu dismissal state (SD-2747) (#3234)
tupizz May 14, 2026
b34acca
fix(converter): preserve numbering.xml definitions on round-trip (SD-…
tupizz May 14, 2026
c1bd82d
fix(super-editor): preserve w:tcMar logical/physical key family on ro…
caio-pizzol May 14, 2026
15ab9c8
refactor(painter-dom): rename rtl-paragraph feature to inline-directi…
caio-pizzol May 14, 2026
9e6b0e7
fix(painter-dom): honor appearance:hidden on inline SDTs (SD-3110) (#…
caio-pizzol May 14, 2026
9b66dcd
feat(custom-ui): add contentControl as a first-class viewport entity …
caio-pizzol May 14, 2026
ee966df
fix: toolbar serialization for stable rendering (#3248)
chittolinag May 14, 2026
a5e6ab8
test(super-editor): pin SD-3158 start/end-only tcMar round-trip (#3314)
caio-pizzol May 15, 2026
8d711c7
fix(super-editor): re-export ContentControlViewportAddress and Viewpo…
caio-pizzol May 15, 2026
3f67b8f
fix: `pnpm type-check` failing due to `minimatch` error (#3315)
msviderok May 15, 2026
27489e7
fix(super-editor): restore toolbar dropdown keyboard focus (#3304)
sergiogomes May 15, 2026
53b9bd3
docs: add sergiogomes to community contributors (#3318)
superdoc-bot[bot] May 15, 2026
ff02e3e
docs: add msviderok to community contributors (#3317)
superdoc-bot[bot] May 15, 2026
5bb72db
fix: mixed alignment across paragraphs
harbournick May 15, 2026
b572d54
chore: ci fixes
harbournick May 15, 2026
9b05a50
Merge pull request #3321 from superdoc-dev/nick/merge-main-stable-33
harbournick May 15, 2026
cefcfd3
chore(cli): 0.10.0 [skip ci]
semantic-release-bot May 15, 2026
b46fd92
chore(release): 1.33.0 [skip ci]
semantic-release-bot May 15, 2026
cf97108
chore(react): 1.4.0 [skip ci]
semantic-release-bot May 15, 2026
241474b
chore(vscode): 2.5.0 [skip ci]
semantic-release-bot May 15, 2026
e8c6613
fix(toolbar): make formatting marks button opt-in via config
caio-pizzol May 15, 2026
34b98b5
fix(release): ignore disabled SDK PyPI gaps
caio-pizzol May 15, 2026
6c5f819
Merge pull request #3326 from superdoc-dev/caio/fix-sdk-pypi-recovery…
caio-pizzol May 15, 2026
26409ca
chore(sdk): 1.9.0 [skip ci]
semantic-release-bot May 15, 2026
27051e8
chore(mcp): 0.5.0 [skip ci]
semantic-release-bot May 15, 2026
e9e4d2d
Merge pull request #3325 from superdoc-dev/caio/toolbar-formatting-ma…
caio-pizzol May 15, 2026
0eda97e
chore(cli): 0.10.1 [skip ci]
semantic-release-bot May 15, 2026
2f12f4e
chore(sdk): 1.9.1 [skip ci]
semantic-release-bot May 15, 2026
4573d1b
chore(mcp): 0.5.1 [skip ci]
semantic-release-bot May 15, 2026
a1d2c5c
chore(release): 1.33.1 [skip ci]
semantic-release-bot May 15, 2026
8a4dee8
chore(react): 1.4.1 [skip ci]
semantic-release-bot May 15, 2026
5166119
chore(vscode): 2.5.1 [skip ci]
semantic-release-bot May 15, 2026
3fd4a6e
feat: install superdoc from wrapper packages
caio-pizzol May 16, 2026
1252ede
fix(ci): tolerate attw internal package-shape crash
caio-pizzol May 16, 2026
62831a5
Merge pull request #3339 from superdoc-dev/caio/tolerate-attw-interna…
caio-pizzol May 16, 2026
1263184
Merge branch 'stable' into caio/wrapper-superdoc-deps-stable
caio-pizzol May 16, 2026
bfa1488
Merge pull request #3335 from superdoc-dev/caio/wrapper-superdoc-deps…
caio-pizzol May 16, 2026
879d643
chore(esign): 2.7.0 [skip ci]
semantic-release-bot May 16, 2026
4ee0f33
fix(ci): gate stable sync on release completion
caio-pizzol May 16, 2026
83033ef
Merge pull request #3346 from superdoc-dev/codex/gate-sync-patches-st…
caio-pizzol May 16, 2026
a14ffe9
chore: merge stable into main
caio-pizzol May 16, 2026
18d6c21
Merge branch 'main' into codex/recover-stable-main-merge
caio-pizzol May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/package-impact-map.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Source of truth for which repo paths should trigger CI and release workflows for
- **CI gates compatibility.** A change to SuperDoc core should run the CI of every dependent package — that's how breakage in `@superdoc-dev/react` or `@superdoc-dev/sdk` gets caught before it ships. CI paths follow *compatibility* impact.
- **Release gates artifact changes.** A package should only publish a new version when its own published artifact actually changes. Release paths follow *artifact* impact.

These two are not the same. `template-builder` and `esign` externalize `superdoc` in their builds and declare it as a `peerDependency`, so a core change doesn't change their tarballs → CI broad, release narrow. CLI bundles core into platform binaries, so a core change does change the CLI tarball → both broad.
These two are not the same. `template-builder` and `esign` externalize `superdoc` in their builds and declare it as both a dependency and peer dependency, so a core change inside the declared range doesn't change their tarballs → CI broad, release narrow. CLI bundles core into platform binaries, so a core change does change the CLI tarball → both broad.

## Surfaces

Expand Down Expand Up @@ -49,7 +49,7 @@ These two are not the same. `template-builder` and `esign` externalize `superdoc

## Why each classification

- **`template-builder` and `esign`** externalize `superdoc` in their Vite build (`rollupOptions.external`) and declare it as a `peerDependency`. A SuperDoc core change does not change the wrapper's published bundle — consumers receive the new core through their own `npm install`. Release-on-core is pure version noise; CI-on-core remains necessary to catch breaking API changes.
- **`template-builder` and `esign`** externalize `superdoc` in their Vite build (`rollupOptions.external`) and declare it in **both** `dependencies` and `peerDependencies`. The `dependencies` entry preserves auto-install for customers who use the wrapper as their SuperDoc entrypoint; the `peerDependencies` entry signals the singleton contract for apps that also install SuperDoc directly. A SuperDoc core change inside the declared range does not change the wrapper's published bundle or manifest, so release-on-core is pure version noise; CI-on-core remains necessary to catch breaking API changes.
- **`react`** externalizes `superdoc` in its Vite build the same way, and declares `superdoc` in **both** `dependencies` and `peerDependencies`. The `dependencies` entry preserves auto-install for every consumer (zero-break regardless of package manager); the `peerDependencies` entry signals the singleton contract and aligns the manifest with template-builder/esign. Because the `dependencies` entry still pins via lockfiles, existing consumers only pick up a new core version when react republishes, so release-on-core stays correct *today*. The unlock for release-narrow is to remove `superdoc` from `dependencies` entirely — that is a breaking change and tracked as a separate decision.
- **CLI / SDK** bundle engine behavior into platform-specific native binaries (see `apps/cli/.releaserc.cjs` and `packages/sdk/.releaserc.cjs` — both use `patch-commit-filter.cjs` to expand release analysis into core paths). The published artifact genuinely changes when core changes.
- **MCP** depends on SDK via `workspace:*` and imports engine/session code directly. Its current release trigger (`apps/mcp/**` only) causes it to lag SDK releases. Expand to match SDK's release paths.
Expand All @@ -61,6 +61,6 @@ These two are not the same. `template-builder` and `esign` externalize `superdoc
## Notes

- `packages/ai/**` has been removed from all release and CI triggers. `@superdoc-dev/ai` is being deprecated; npm-side deprecation is a separate operational step.
- When SuperDoc core ships a breaking API change, `template-builder` and `esign` must be manually updated and released. Their `peerDependencies` version bump is the signal; semantic-release won't auto-trigger on upstream changes for them.
- `@superdoc-dev/react` declares `superdoc` in both `dependencies` and `peerDependencies` to preserve zero-break install semantics while still signaling the singleton contract. Removing `superdoc` from `dependencies` is the unlock for release-narrow and is tracked as a separate decision.
- When SuperDoc core ships a breaking API change, `template-builder` and `esign` must be manually updated and released. Their dependency and peer-dependency floor bump is the signal; semantic-release won't auto-trigger on upstream changes for them.
- `@superdoc-dev/react`, `@superdoc-dev/template-builder`, and `@superdoc-dev/esign` declare `superdoc` in both `dependencies` and `peerDependencies` to preserve automatic install semantics while still signaling the singleton contract. Removing `superdoc` from `dependencies` is the unlock for release-narrow and is tracked as a separate decision.
- When editing a release or CI workflow, its `paths:` filter must match the corresponding row in this map. Workflow-lint rules should enforce this.
58 changes: 48 additions & 10 deletions .github/workflows/promote-stable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,6 @@ jobs:
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
permission-contents: write
permission-pull-requests: write
permission-workflows: write

- uses: actions/checkout@v6
with:
Expand Down Expand Up @@ -71,19 +68,60 @@ jobs:
if git merge --no-ff --no-edit "origin/${SOURCE_BRANCH}"; then
MERGE_STATUS="clean"
else
# Auto-resolve release artifact conflicts: keep stable's version.
normalize_json_without_keys() {
python3 -c 'import json, sys; data = json.load(sys.stdin); [data.pop(key, None) for key in sys.argv[1:]]; sys.stdout.write(json.dumps(data, sort_keys=True, separators=(",", ":")))' "$@"
}

release_artifact_only_conflict() {
local f="$1"
local tmpdir
local status
tmpdir="$(mktemp -d)"

case "$f" in
package.json|*/package.json)
git show ":2:${f}" | normalize_json_without_keys version > "${tmpdir}/ours" || { rm -rf "${tmpdir}"; return 1; }
git show ":3:${f}" | normalize_json_without_keys version > "${tmpdir}/theirs" || { rm -rf "${tmpdir}"; return 1; }
;;
pyproject.toml|*/pyproject.toml)
git show ":2:${f}" | sed -E '/^[[:space:]]*version[[:space:]]*=/d' > "${tmpdir}/ours" || { rm -rf "${tmpdir}"; return 1; }
git show ":3:${f}" | sed -E '/^[[:space:]]*version[[:space:]]*=/d' > "${tmpdir}/theirs" || { rm -rf "${tmpdir}"; return 1; }
;;
version.json|*/version.json)
git show ":2:${f}" | normalize_json_without_keys version sdkVersion > "${tmpdir}/ours" || { rm -rf "${tmpdir}"; return 1; }
git show ":3:${f}" | normalize_json_without_keys version sdkVersion > "${tmpdir}/theirs" || { rm -rf "${tmpdir}"; return 1; }
;;
*)
rm -rf "${tmpdir}"
return 1
;;
esac

cmp -s "${tmpdir}/ours" "${tmpdir}/theirs"
status=$?
rm -rf "${tmpdir}"
return "${status}"
}

# Auto-resolve release artifact conflicts only when the conflict is
# version-only: keep stable's version, but never drop dependency,
# script, export, or package metadata changes from main.
# npm/PyPI already have stable's published version; downgrading to
# main's track would break the next stable release. Mirrors the
# auto-resolve in sync-patches.yml, biased the other direction.
git diff --name-only --diff-filter=U | while read -r f; do
while read -r f; do
case "$f" in
package.json|*/package.json|pyproject.toml|*/pyproject.toml|version.json|*/version.json)
echo " Auto-resolving $f (keeping stable's version)"
git checkout --ours "$f"
git add "$f"
if release_artifact_only_conflict "$f"; then
echo " Auto-resolving $f (version-only; keeping stable's version)"
git checkout --ours "$f"
git add "$f"
else
echo " Leaving $f unresolved (contains non-version changes)"
fi
;;
esac
done
done < <(git diff --name-only --diff-filter=U)

if [ -z "$(git diff --name-only --diff-filter=U)" ]; then
MERGE_STATUS="auto_resolved"
Expand Down Expand Up @@ -141,7 +179,7 @@ jobs:

- creates \`${BRANCH_NAME}\` from \`${BASE_BRANCH}\`
- merges \`${SOURCE_BRANCH}\` into the candidate branch
- release artifact conflicts (package.json, pyproject.toml, version.json) auto-resolved to keep stable's published version
- version-only release artifact conflicts (package.json, pyproject.toml, version.json) auto-resolved to keep stable's published version

---
_Auto-created by promote-stable workflow._
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release-react.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ concurrency:

jobs:
release:
# Stable publishes must go through release-stable.yml.
if: ${{ github.event_name != 'workflow_dispatch' || github.ref_name != 'stable' }}
runs-on: ubuntu-24.04
steps:
- name: Generate token
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release-superdoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ concurrency:

jobs:
release:
# Stable publishes must go through release-stable.yml; PR previews are still allowed.
if: ${{ github.event_name != 'workflow_dispatch' || github.ref_name != 'stable' || inputs.pr_number }}
runs-on: ubuntu-24.04
steps:
- name: Generate token
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release-vscode-ext.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ concurrency:

jobs:
release:
# Stable publishes must go through release-stable.yml.
if: ${{ github.event_name != 'workflow_dispatch' || github.ref_name != 'stable' }}
runs-on: ubuntu-latest
steps:
- name: Generate token
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/cli",
"version": "0.9.0",
"version": "0.10.1",
"type": "module",
"bin": {
"superdoc": "./dist/index.js"
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/platforms/cli-darwin-arm64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/cli-darwin-arm64",
"version": "0.9.0",
"version": "0.10.1",
"os": [
"darwin"
],
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/platforms/cli-darwin-x64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/cli-darwin-x64",
"version": "0.9.0",
"version": "0.10.1",
"os": [
"darwin"
],
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/platforms/cli-linux-arm64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/cli-linux-arm64",
"version": "0.9.0",
"version": "0.10.1",
"os": [
"linux"
],
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/platforms/cli-linux-x64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/cli-linux-x64",
"version": "0.9.0",
"version": "0.10.1",
"os": [
"linux"
],
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/platforms/cli-windows-x64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/cli-windows-x64",
"version": "0.9.0",
"version": "0.10.1",
"os": [
"win32"
],
Expand Down
2 changes: 1 addition & 1 deletion apps/mcp/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@superdoc-dev/mcp",
"version": "0.4.0",
"version": "0.5.1",
"type": "module",
"engines": {
"node": ">=20"
Expand Down
2 changes: 1 addition & 1 deletion apps/vscode-ext/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "superdoc-vscode-ext",
"displayName": "SuperDoc - Word Document Editor",
"description": "Open and edit Word documents (.docx) directly in VS Code using SuperDoc",
"version": "2.4.0",
"version": "2.5.1",
"publisher": "superdoc-dev",
"icon": "logo.png",
"homepage": "https://superdoc.dev",
Expand Down
Loading
Loading