Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
34881eb
chore(ci): disable PyPI publish steps in release-stable until access …
caio-pizzol May 7, 2026
436531c
ci: auto-resolve version conflicts in promote-stable workflow (#3194)
caio-pizzol May 7, 2026
ed4c717
fix(mcp): fall back to z.unknown() for oneOf with non-object variants…
caio-pizzol May 7, 2026
0d898c2
docs: require checking comment-policy.md before editing comments (#3202)
caio-pizzol May 7, 2026
b87e968
fix(layout-bridge): separate text direction from RTL hit testing (#3191)
caio-pizzol May 7, 2026
8150e10
refactor(release): capability-based descriptors for stable orchestrat…
caio-pizzol May 7, 2026
702e57c
chore: merge stable into main (#3205)
superdoc-bot[bot] May 7, 2026
fd8eabc
SD-2664 - feature support word style update field interactions for TO…
chittolinag May 8, 2026
ad0cee1
fix(converter): preserve hyperlink mark on inserted text split across…
tupizz May 8, 2026
b57acbe
SD-2678 - Cannot delete contentlocked inline sdt with normal (#3129)
chittolinag May 8, 2026
a81c2d4
feat(demos/custom-ui): color pickers for tracked changes and comments…
caio-pizzol May 8, 2026
94614cd
feat(workflows): notify homepage repo on stable superdoc release (#3216)
caio-pizzol May 10, 2026
ecb13ac
Fix/unset link clear transient hyperlink styleid (#3190)
christos8333 May 10, 2026
7a2f2db
fix(super-editor): guard cached paragraph props lookup in indent comm…
caio-pizzol May 10, 2026
5cb93dc
docs: add christos8333 to community contributors (#3218)
superdoc-bot[bot] May 10, 2026
48967ea
feat: render images inside Word textboxes (SD-2804) (#3207)
tupizz May 11, 2026
a9ee782
feat(release): add superdoc to stable orchestrator (chain-aware fail-…
caio-pizzol May 11, 2026
b00ec92
feat(release): add react to stable orchestrator (#3221)
caio-pizzol May 11, 2026
f4db119
feat(release): add vscode-ext to stable orchestrator (#3222)
caio-pizzol May 11, 2026
e16ea64
fix(workflows): point homepage notify at stable orchestrator (#3229)
caio-pizzol May 11, 2026
e8ce982
fix(super-editor): recurse into nested marks in TOC sanitizer (#3230)
caio-pizzol May 11, 2026
1a654e5
fix: missing headers in collab mode; wrong odd/even headers (#3188)
VladaHarbour May 12, 2026
c5d04d8
fix(document-api): align position readback with write-side offset mod…
caio-pizzol May 12, 2026
a1882e7
feat(pm-adapter): preserve run-level bidi/script metadata on TextRun …
caio-pizzol May 12, 2026
03a1b30
feat(types): deep public-type audit gate (SD-2977) (#3185)
caio-pizzol May 12, 2026
cb1330a
fix(pm-adapter): plumb body section direction context through resolve…
caio-pizzol May 12, 2026
8a04896
fix(mcp): rename wire fields to contract names before dispatch (#3215)
bjohas May 12, 2026
d0db62c
docs: add bjohas to community contributors (#3255)
superdoc-bot[bot] May 12, 2026
f31c05b
fix: align rtl date token rendering with word parity (#3250)
artem-harbour May 12, 2026
6d65d9a
feat(types): harden package shape (SD-2978) (#3251)
caio-pizzol May 12, 2026
71bf8d7
feat(converter): render EMF+ images via embedded bitmaps (SD-2503) (#…
gpardhivvarma May 12, 2026
fa0cfc5
fix: mirror explicit left/right paragraph alignment for rtl (#3235)
artem-harbour May 12, 2026
766f82e
fix: align rtl toolbar state and alignment writes with ooxml bidi (#3…
artem-harbour May 12, 2026
53e2c47
fix: make copy slice metadata hidden (#3232)
VladaHarbour May 13, 2026
de7dcbc
fix(super-editor): null-safe getTrackChanges to avoid init-race crash…
tupizz May 13, 2026
27c76c6
fix(converter): preserve CommentReference rStyle on comment anchor ru…
tupizz May 13, 2026
16bad0d
refactor: migrate paragraph consumers to directionContext (SD-2777) (…
caio-pizzol May 13, 2026
c446999
docs: add content controls page, examples, and demo (IT-1046) (#3265)
caio-pizzol May 13, 2026
fd1a740
feat(super-editor): native LTR/RTL paragraph direction toolbar (#3226)
shri-scale May 13, 2026
7364827
feat: rtl for tables (#3227)
artem-harbour May 13, 2026
72c4712
feat(demos): expand contract-templates with Word-authored NDA fixture…
caio-pizzol May 13, 2026
bbbb238
chore(ci): add contract-templates to demos smoke matrix (#3271)
caio-pizzol May 13, 2026
33b66e8
docs: add shri-scale to community contributors (#3270)
superdoc-bot[bot] May 13, 2026
d9dfeb1
fix(rtl-tables): drop double-mirror for logical cell margins (SD-3134…
caio-pizzol May 13, 2026
a6a6654
chore(ci): install pnpm in demos smoke-test job (#3274)
caio-pizzol May 13, 2026
6aa70b5
SD-3116 - bug: SVG image doesn't render on imported files (#3268)
chittolinag May 14, 2026
3c549c9
fix: remove block sdt on delete press when cursor is on the first pos…
VladaHarbour May 14, 2026
ed407d7
feat(content-controls): support richText type and regenerate NDA demo…
caio-pizzol May 14, 2026
c04e785
docs: add contributor placement guide for SuperDoc layers (#3278)
caio-pizzol May 14, 2026
c68d5d4
docs: reposition self-hosted collaboration guidance (#3277)
caio-pizzol May 14, 2026
a9ab6f1
fix(content-controls): default newly-created controls to richText, no…
caio-pizzol May 14, 2026
a81be59
docs(direction): document visual mirror rule + drop dead isRtl args (…
caio-pizzol May 14, 2026
c6fbcf8
fix(direction): preserve explicit bidiVisual=false in resolveTableDir…
caio-pizzol May 14, 2026
8aa1509
fix(converter): preserve explicit w:bidiVisual w:val="0" on export (S…
caio-pizzol May 14, 2026
59de419
refactor(direction): add getTableVisualDirection helper, migrate cons…
caio-pizzol May 14, 2026
506e3d5
ci(behavior): bump playwright shards from 4 to 5
caio-pizzol May 14, 2026
45c11a1
docs(collaboration): tighten YHub/Hocuspocus framing (follow-up to #3…
caio-pizzol May 14, 2026
d7335b0
docs(examples): add yhub provider example (#3282)
caio-pizzol May 14, 2026
de0c33f
docs(collaboration): add YHub guide (#3286)
caio-pizzol May 14, 2026
bb74ea2
feat(direction): populate TableAttrs.tableDirectionContext in pm-adap…
caio-pizzol May 14, 2026
1173432
docs(claude-md): trim root, move eval suite to evals/AGENTS.md (#3288)
caio-pizzol May 14, 2026
f390043
fix(types): drain Tier 4 any from public contract (SD-2834) (#3258)
caio-pizzol May 14, 2026
cf75357
fix(content-controls): mutate locked SDTs via AttrSteps and inner-ran…
caio-pizzol May 14, 2026
1515843
test(behavior): document-api locked SDT mutations (SD-3144) (#3291)
caio-pizzol May 14, 2026
ef9821e
fix(converter): preserve theme rFonts on DOCX round-trip (SD-2894) (#…
tupizz May 14, 2026
4b8f2fd
refactor(direction): centralize last paragraph isRtl reads on helper …
caio-pizzol May 14, 2026
051d208
feat(agent-docs-audit): policy, L1 scanner, L2+L3 SDK script, weekly …
caio-pizzol May 14, 2026
6e02c1c
docs(agent-docs): enforce canonical AGENTS symlinks (#3298)
caio-pizzol May 14, 2026
ec5db77
fix(super-editor): import <w:temporary/> and lock appearance default …
caio-pizzol May 14, 2026
2407e93
fix(super-editor): stop default-rPr injection + normalize pgMar twips…
tupizz May 14, 2026
a4449ba
feat(agent-docs-audit): add diff-scoped PR comments (#3299)
caio-pizzol May 14, 2026
d4d2eb1
feat(agent-docs-audit): delta-only high-confidence CI gate (#3301)
caio-pizzol May 14, 2026
0a4b0b3
fix(superdoc): restore find input focus after match navigation (SD-30…
tupizz May 14, 2026
202325b
fix(build): isolate shared/common declaration emit from @types auto-i…
caio-pizzol May 14, 2026
51627ac
refactor(direction): drop ParagraphAttrs.direction scalar field (SD-2…
caio-pizzol May 14, 2026
87368de
feat(document-api): customXml.parts.* — list/get/create/patch/remove …
caio-pizzol May 14, 2026
ad5a8cc
fix(super-editor): keep comment range markers around unpaired tracked…
tupizz May 14, 2026
46f50c0
fix(context-menu): fix slash menu dismissal state (SD-2747) (#3234)
tupizz May 14, 2026
b424684
fix(converter): preserve numbering.xml definitions on round-trip (SD-…
tupizz May 14, 2026
153012b
fix(super-editor): preserve w:tcMar logical/physical key family on ro…
caio-pizzol May 14, 2026
c184083
refactor(painter-dom): rename rtl-paragraph feature to inline-directi…
caio-pizzol May 14, 2026
7c99d5f
fix(painter-dom): honor appearance:hidden on inline SDTs (SD-3110) (#…
caio-pizzol May 14, 2026
9477a9e
feat(custom-ui): add contentControl as a first-class viewport entity …
caio-pizzol May 14, 2026
f14f6eb
fix: toolbar serialization for stable rendering (#3248)
chittolinag May 14, 2026
781748e
test(super-editor): pin SD-3158 start/end-only tcMar round-trip (#3314)
caio-pizzol May 15, 2026
b60212a
fix(super-editor): re-export ContentControlViewportAddress and Viewpo…
caio-pizzol May 15, 2026
249a961
fix: `pnpm type-check` failing due to `minimatch` error (#3315)
msviderok May 15, 2026
f271df9
fix(super-editor): restore toolbar dropdown keyboard focus (#3304)
sergiogomes May 15, 2026
4dd2122
docs: add sergiogomes to community contributors (#3318)
superdoc-bot[bot] May 15, 2026
51a8615
docs: add msviderok to community contributors (#3317)
superdoc-bot[bot] May 15, 2026
8ce8602
feat: rtl mixed bidi
May 14, 2026
a429e7b
fix(comments): track change edits in body get matched in comments bub…
palmer-cl May 15, 2026
f94d516
feat(custom-ui): add contentControls handle and contract-template fie…
caio-pizzol May 15, 2026
1e2753e
feat(document-api): metadata.* contract layer for anchored metadata (…
caio-pizzol May 15, 2026
085544a
fix(ci): request workflow permission for stable promotion
caio-pizzol May 15, 2026
4f81522
feat(super-editor): implement metadata adapter (SD-3104)
caio-pizzol May 15, 2026
b49aa94
feat(toolbar): make formatting marks button opt-in via config (#3324)
caio-pizzol May 15, 2026
2c8eb64
fix(release): ignore disabled SDK PyPI gaps (#3329)
caio-pizzol May 15, 2026
8e8d9e9
fix(ci): sync stable after release completion (#3331)
caio-pizzol May 15, 2026
39fbea0
docs(document-api): soften metadata.remove atomicity wording + add st…
caio-pizzol May 16, 2026
5f3badc
fix(ci): tolerate attw internal package-shape crash (#3341)
caio-pizzol May 16, 2026
93e030b
fix(ci): preserve stable ancestry when syncing main (#3338)
caio-pizzol May 16, 2026
b5f8f3b
fix(esign): align pdf config type with superdoc (#3344)
caio-pizzol May 16, 2026
5a46ee2
ci(release): suppress per-PR success comments on prereleases (#3337)
caio-pizzol May 16, 2026
a14ffe9
chore: merge stable into main
caio-pizzol May 16, 2026
c7840bb
ci(release): use queue: max so multi-package stable pushes don't drop…
caio-pizzol May 16, 2026
18d6c21
Merge branch 'main' into codex/recover-stable-main-merge
caio-pizzol May 16, 2026
f87cd08
refactor(super-editor): route mixed-bidi Backspace through handleBack…
caio-pizzol May 16, 2026
6ad79d9
refactor(painter-dom): move run direction heuristic into features/inl…
caio-pizzol May 16, 2026
7108806
docs(contracts): clarify RunBidiContext.rtl is a source signal, not a…
caio-pizzol May 16, 2026
c1f7778
Merge pull request #3349 from superdoc-dev/codex/recover-stable-main-…
caio-pizzol May 16, 2026
37a6a5c
test(behavior): tighten rtl-dates body assertion to pin new latin-onl…
caio-pizzol May 16, 2026
f7c878a
test(super-editor): pin Backspace command-chain ordering
caio-pizzol May 16, 2026
d8e0252
test(document-api): prove metadata roundtrip story (SD-3104)
caio-pizzol May 16, 2026
6818d1a
fix(super-editor): gate native-selection caret refinement to local ca…
caio-pizzol May 16, 2026
d9cadd5
Merge pull request #3320 from superdoc-dev/artem/rtl-v12
caio-pizzol May 16, 2026
bf77bfe
test(behavior): pin RTL bidiVisual derived from a table style
caio-pizzol May 16, 2026
91a8f38
fix(direction): recognize Hebrew/Arabic presentation forms as strong-…
caio-pizzol May 16, 2026
fbd1b16
fix(super-editor): honor expectedRevision on metadata.attach/remove d…
caio-pizzol May 16, 2026
4b702f5
docs(direction): update resolveRunDirectionAttribute decision-table c…
caio-pizzol May 16, 2026
df091a7
Merge pull request #3350 from superdoc-dev/caio-pizzol/SD-2767-wave3-…
caio-pizzol May 16, 2026
16f2ea2
fix(super-editor): throw REVISION_MISMATCH on metadata dry-run (SD-3104)
caio-pizzol May 16, 2026
5583aa6
fix(direction): only honor inline w:bidiVisual for table visual direc…
caio-pizzol May 17, 2026
0c88505
test(behavior): pin Word-parity bidiVisual contract on inline vs styl…
caio-pizzol May 17, 2026
f86b762
Merge pull request #3352 from superdoc-dev/caio-pizzol/SD-3169-presen…
caio-pizzol May 17, 2026
004eac5
Merge pull request #3354 from superdoc-dev/caio-pizzol/SD-3171-fix-st…
caio-pizzol May 17, 2026
ff97a7b
fix(diffing): gate paragraph identity on structural depth (IT-1065)
caio-pizzol May 17, 2026
c9c5f0c
test(behavior): pin style-cascade bidiVisual round-trip preservation …
caio-pizzol May 17, 2026
57a3891
Merge pull request #3355 from superdoc-dev/caio/IT-1065-diffing-table…
caio-pizzol May 17, 2026
8a156ed
test(behavior): scope bidiVisual preservation assertion to the source…
caio-pizzol May 17, 2026
2b4e9a1
Merge pull request #3356 from superdoc-dev/caio-pizzol/SD-3171-roundt…
caio-pizzol May 17, 2026
daef44f
feat(ci): no-growth gates for legacy public surfaces (SD-3176)
caio-pizzol May 17, 2026
d804415
Merge pull request #3357 from superdoc-dev/caio-pizzol/SD-3176-legacy…
caio-pizzol May 17, 2026
87db418
feat(types): explicit public facade root scaffold (SD-3178)
caio-pizzol May 17, 2026
b1abef7
chore(types): comment anchors + facade coverage smoke test (SD-3178)
caio-pizzol May 17, 2026
638e341
fix(types): strengthen facade command-signature probe (SD-3178)
caio-pizzol May 17, 2026
f84c326
Merge pull request #3358 from superdoc-dev/caio-pizzol/SD-3178-public…
caio-pizzol May 17, 2026
3a7c159
feat(types): legacy headless-toolbar public facade entry (SD-3179)
caio-pizzol May 17, 2026
d705459
Merge pull request #3359 from superdoc-dev/caio-pizzol/SD-3179-public…
caio-pizzol May 17, 2026
2f6454e
feat(types): legacy leaf facade entries (SD-3180)
caio-pizzol May 17, 2026
69078bd
fix(types): preserve hasBodyNumberingReferences in legacy/converter f…
caio-pizzol May 17, 2026
9577a28
fix(types): type legacy converter helper export (SD-3180)
caio-pizzol May 17, 2026
598017f
Merge pull request #3360 from superdoc-dev/caio-pizzol/SD-3180-legacy…
caio-pizzol May 17, 2026
9dc0087
feat(types): ui-react public facade entry (SD-3182)
caio-pizzol May 18, 2026
8cda0af
Merge pull request #3361 from superdoc-dev/caio-pizzol/SD-3182-public…
caio-pizzol May 18, 2026
61864bb
feat(types): ui public facade entry + bundle-shape guard (SD-3183)
caio-pizzol May 18, 2026
ff6b924
Merge pull request #3363 from superdoc-dev/caio-pizzol/SD-3183-public…
caio-pizzol May 18, 2026
c30b3fa
feat(types): types public facade entry — type-only (SD-3184)
caio-pizzol May 18, 2026
3f76633
docs(types): correct SD-3147 tier counts in types facade (SD-3184)
caio-pizzol May 18, 2026
747d955
Merge pull request #3364 from superdoc-dev/caio-pizzol/SD-3184-public…
caio-pizzol May 18, 2026
12f278d
feat(types): document api alignment for public facade (SD-3185)
caio-pizzol May 18, 2026
ae9b1f7
docs(types): scope the document api coverage claim (SD-3185)
caio-pizzol May 18, 2026
4a761b6
docs(public-facade): soften 'supported public API' wording, drop hard…
caio-pizzol May 18, 2026
a87fcfe
fix: upload large images/resize images in headers/footers (#3319)
VladaHarbour May 18, 2026
dc0b64f
Merge pull request #3366 from superdoc-dev/caio-pizzol/SD-3185-docume…
caio-pizzol May 18, 2026
c1e6596
feat: improve format painter ux to match ms word (#3266)
VladaHarbour May 18, 2026
5bed572
feat: add toc toolbar item (#3247)
VladaHarbour May 18, 2026
9e2911f
Merge pull request #3351 from superdoc-dev/caio-pizzol/SD-3104-metada…
caio-pizzol May 18, 2026
c107cc2
feat(public-facade): legacy headless-toolbar/react and /vue (SD-3207)
caio-pizzol May 18, 2026
cafb820
feat(custom-ui): ai citation showcase over metadata (SD-3208)
caio-pizzol May 18, 2026
5c95068
fix(custom-ui): rename citation draft button and tokenize highlight (…
caio-pizzol May 18, 2026
6064fa1
fix(custom-ui): make citation draft button single-shot (SD-3208)
caio-pizzol May 18, 2026
525eaca
Merge pull request #3371 from superdoc-dev/caio-pizzol/SD-3207-headle…
caio-pizzol May 18, 2026
601e4d6
fix(custom-ui): soften citation demo comments + keep error visible on…
caio-pizzol May 18, 2026
b2ff89d
test(document-api): word-in-the-loop validation for anchored metadata…
caio-pizzol May 18, 2026
3d5fa8d
test(document-api): tighten edited-anchor assertions and wording (SD-…
caio-pizzol May 18, 2026
b9eeb18
feat(public-facade): phase 4a flip subpath types to public facade (SD…
caio-pizzol May 18, 2026
742cc33
test(document-api): independent text-slice check for edited anchor (S…
caio-pizzol May 18, 2026
a0de3da
fix(custom-ui): refresh sources panel on edit + remeasure highlights …
caio-pizzol May 18, 2026
4d97307
Merge pull request #3374 from superdoc-dev/caio-pizzol/SD-3211-phase4…
caio-pizzol May 18, 2026
bae761b
Merge pull request #3372 from superdoc-dev/caio-pizzol/SD-3208-ai-cit…
caio-pizzol May 18, 2026
450f1f7
Merge pull request #3373 from superdoc-dev/caio-pizzol/SD-3201-word-r…
caio-pizzol May 18, 2026
7ef7d13
chore: fix comments behavior tests
harbournick May 19, 2026
568770d
Merge pull request #3376 from superdoc-dev/nick/fix-behavior-comments
harbournick May 19, 2026
16f70fb
chore: editor-neutral layout identity and hit mapping
harbournick May 18, 2026
07bb1eb
chore: type fix
harbournick May 19, 2026
2b47ca5
Merge pull request #3377 from superdoc-dev/nick/le-upgrades-for-v2
harbournick May 19, 2026
0072e4f
Merge remote-tracking branch 'origin/main' into merge/main-into-stabl…
github-actions[bot] May 19, 2026
21f78e8
fix(metadata): preserve TARGET_NOT_FOUND in metadata.attach (SD-3155)
caio-pizzol May 19, 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
9 changes: 9 additions & 0 deletions .github/workflows/ci-superdoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,15 @@ jobs:
# ESM, missing CDN files, unpublished `source` paths.
run: node tests/consumer-typecheck/package-shape-gate.mjs

- name: Legacy public no-growth gates (SD-3176)
# No-growth snapshots for the legacy public compatibility surfaces.
# See tests/consumer-typecheck/snapshots/README.md for the policy.
# Runs after the matrix step so the packed-and-installed fixture
# is available for Snapshot B (resolved named exports).
run: |
node tests/consumer-typecheck/snapshot-super-editor-package-exports.mjs --check
node tests/consumer-typecheck/snapshot-superdoc-legacy-exports.mjs --check

unit-tests:
needs: build
runs-on: ubuntu-latest
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/release-cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,14 @@ permissions:
packages: write

concurrency:
# Release runs never cancel an in-progress release (each merge is a release-worthy
# state). queue: max keeps GitHub from dropping older pending stable releases when
# a stable push touches multiple wrapper packages in the shared release-stable group;
# default queue: single only allows one pending. queue: max requires
# cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -46,8 +52,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/release-create.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,14 @@ permissions:
packages: write

concurrency:
# Release runs never cancel an in-progress release (each merge is a release-worthy
# state). queue: max keeps GitHub from dropping older pending stable releases when
# a stable push touches multiple wrapper packages in the shared release-stable group;
# default queue: single only allows one pending. queue: max requires
# cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -36,8 +42,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/release-esign.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@ permissions:
concurrency:
# Stable releases share the `release-stable` group so @semantic-release/git
# pushes to `stable` serialize across workflows; per-workflow groups would
# let releases race on `git push origin stable`.
# let releases race on `git push origin stable`. queue: max keeps GitHub
# from dropping older pending stable releases when a stable push touches
# multiple wrapper packages; default queue: single only allows one pending.
# queue: max requires cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -39,8 +43,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/release-mcp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,14 @@ permissions:
packages: write

concurrency:
# Release runs never cancel an in-progress release (each merge is a release-worthy
# state). queue: max keeps GitHub from dropping older pending stable releases when
# a stable push touches multiple wrapper packages in the shared release-stable group;
# default queue: single only allows one pending. queue: max requires
# cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -48,8 +54,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/release-react.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,13 @@ permissions:
concurrency:
# Stable releases share the `release-stable` group so @semantic-release/git
# pushes to `stable` serialize across workflows; per-workflow groups would
# let releases race on `git push origin stable`.
# let releases race on `git push origin stable`. queue: max keeps GitHub
# from dropping older pending stable releases when a stable push touches
# multiple wrapper packages; default queue: single only allows one pending.
# queue: max requires cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -52,8 +56,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/release-sdk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,14 @@ permissions:
id-token: write # PyPI trusted publishing (OIDC)

concurrency:
# Release runs never cancel an in-progress release (each merge is a release-worthy
# state). queue: max keeps GitHub from dropping older pending stable releases when
# a stable push touches multiple wrapper packages in the shared release-stable group;
# default queue: single only allows one pending. queue: max requires
# cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
# -------------------------------------------------------------------
Expand All @@ -71,8 +77,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/release-stable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@ concurrency:
# `git push origin stable`, leaving npm/PyPI tarballs published without
# a corresponding tag/commit pushed.
# [skip ci] writeback runs use a per-run group so they cannot evict a real
# pending stable push while the bundle is active.
# pending stable push while the bundle is active. queue: max keeps GitHub
# from dropping older pending stable releases when a stable push touches
# multiple wrapper packages; default queue: single only allows one pending.
group: ${{ github.event_name == 'push' && contains(github.event.head_commit.message, '[skip ci]') && format('release-stable-skip-{0}', github.run_id) || 'release-stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand Down Expand Up @@ -124,6 +127,11 @@ jobs:
- name: Package shape gates
run: node tests/consumer-typecheck/package-shape-gate.mjs

- name: Legacy public no-growth gates (SD-3176)
run: |
node tests/consumer-typecheck/snapshot-super-editor-package-exports.mjs --check
node tests/consumer-typecheck/snapshot-superdoc-legacy-exports.mjs --check

- name: Release stable packages (orchestrator)
id: stable_release
env:
Expand Down
22 changes: 18 additions & 4 deletions .github/workflows/release-superdoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,13 @@ permissions:
concurrency:
# Stable releases share the `release-stable` group so @semantic-release/git
# pushes to `stable` serialize across workflows; per-workflow groups would
# let releases race on `git push origin stable`.
# let releases race on `git push origin stable`. queue: max keeps GitHub
# from dropping older pending stable releases when a stable push touches
# multiple wrapper packages; default queue: single only allows one pending.
# queue: max requires cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand Down Expand Up @@ -68,8 +72,12 @@ jobs:
ref: ${{ steps.pr.outputs.sha || '' }}
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable' && !inputs.pr_number
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
if: ${{ !inputs.pr_number }}
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down Expand Up @@ -141,6 +149,12 @@ jobs:
# the packed tarball. Same step as PR CI.
run: node tests/consumer-typecheck/package-shape-gate.mjs

- name: Legacy public no-growth gates (SD-3176)
# Same gate as PR CI. Catches releases that bypass PR CI.
run: |
node tests/consumer-typecheck/snapshot-super-editor-package-exports.mjs --check
node tests/consumer-typecheck/snapshot-superdoc-legacy-exports.mjs --check

# PR preview: publish with pr-<number> dist-tag
- name: Publish PR preview
if: inputs.pr_number
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/release-template-builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@ permissions:
concurrency:
# Stable releases share the `release-stable` group so @semantic-release/git
# pushes to `stable` serialize across workflows; per-workflow groups would
# let releases race on `git push origin stable`.
# let releases race on `git push origin stable`. queue: max keeps GitHub
# from dropping older pending stable releases when a stable push touches
# multiple wrapper packages; default queue: single only allows one pending.
# queue: max requires cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -39,8 +43,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/release-vscode-ext.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ permissions:
concurrency:
# Stable releases share the `release-stable` group so @semantic-release/git
# pushes to `stable` serialize across workflows; per-workflow groups would
# let releases race on `git push origin stable`.
# let releases race on `git push origin stable`. queue: max keeps GitHub
# from dropping older pending stable releases when a stable push touches
# multiple wrapper packages; default queue: single only allows one pending.
# queue: max requires cancel-in-progress: false (cannot be combined with true).
group: ${{ github.ref_name == 'stable' && 'release-stable' || format('{0}-{1}', github.workflow, github.ref) }}
cancel-in-progress: ${{ github.ref_name != 'stable' }}
cancel-in-progress: false
queue: max

jobs:
release:
Expand All @@ -50,8 +54,11 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Refresh stable branch head
if: github.ref_name == 'stable'
- name: Refresh branch head
# Queued release runs may start against a stale checkout (queue: max
# plus cancel-in-progress: false). Refresh to the current branch head
# so @semantic-release/git pushes fast-forward; semantic-release no-ops
# if no new commits were added since the previous queued run released.
run: |
git fetch origin "${{ github.ref_name }}" --tags
git checkout -B "${{ github.ref_name }}" "origin/${{ github.ref_name }}"
Expand Down
7 changes: 6 additions & 1 deletion apps/cli/.releaserc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ const branches = [

const isPrerelease = branches.some((b) => typeof b === 'object' && b.name === branch && b.prerelease);

// stable -> main syncs (real merges) re-attribute prereleases to PRs already shipped on @latest.
// Gate per-PR/issue success comments off on prereleases to avoid duplicate "shipped" comments.
const shouldCommentOnRelease = !isPrerelease;

// Use AI-powered notes for stable releases, conventional generator for prereleases
const notesPlugin = isPrerelease ? createReleaseNotesGenerator() : ['semantic-release-ai-notes', { style: 'concise' }];

Expand Down Expand Up @@ -75,7 +79,7 @@ config.plugins.push([
'semantic-release-linear-app',
{
teamKeys: ['SD'],
addComment: true,
addComment: shouldCommentOnRelease,
packageName: 'superdoc-cli',
commentTemplate: 'shipped in {package} {releaseLink} {channel}',
},
Expand All @@ -86,6 +90,7 @@ config.plugins.push([
{
successComment:
':tada: This ${issue.pull_request ? "PR" : "issue"} is included in **superdoc-cli** v${nextRelease.version}\n\nThe release is available on [GitHub release](${releases.find(release => release.pluginName === "@semantic-release/github").url})',
successCommentCondition: shouldCommentOnRelease ? undefined : false,
},
]);

Expand Down
7 changes: 6 additions & 1 deletion apps/create/.releaserc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ const branches = [

const isPrerelease = branches.some((b) => typeof b === 'object' && b.name === branch && b.prerelease);

// stable -> main syncs (real merges) re-attribute prereleases to PRs already shipped on @latest.
// Gate per-PR/issue success comments off on prereleases to avoid duplicate "shipped" comments.
const shouldCommentOnRelease = !isPrerelease;

const notesPlugin = isPrerelease ? createReleaseNotesGenerator() : ['semantic-release-ai-notes', { style: 'concise' }];

const config = {
Expand All @@ -35,7 +39,7 @@ config.plugins.push([
'semantic-release-linear-app',
{
teamKeys: ['SD'],
addComment: true,
addComment: shouldCommentOnRelease,
packageName: 'create',
commentTemplate: 'shipped in {package} {releaseLink} {channel}',
},
Expand All @@ -46,6 +50,7 @@ config.plugins.push([
{
successComment:
':tada: This ${issue.pull_request ? "PR" : "issue"} is included in **@superdoc-dev/create** v${nextRelease.version}\n\nThe release is available on [GitHub release](${releases.find(release => release.pluginName === "@semantic-release/github").url})',
successCommentCondition: shouldCommentOnRelease ? undefined : false,
},
]);

Expand Down
Loading
Loading