Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
02bff26
fix: clear transient hyperlink styleId on unlink
christos8333 May 7, 2026
374cf73
test: add unlink regression coverage for transient hyperlink style cl…
christos8333 May 7, 2026
7e819e1
fix(link): derive underline preservation at unlink time and add impor…
christos8333 May 8, 2026
528ee2b
fix(link): fully clear imported DOCX hyperlink formatting on unlink
christos8333 May 8, 2026
1e8c837
docs(examples): add SolidJS example
msviderok May 16, 2026
e3984e3
docs(examples): change title in html header
msviderok May 16, 2026
451e202
docs(examples): remove unnecessary superdoc.destroy()
msviderok May 16, 2026
d23b861
Merge branch 'main' into docs/examples-solidjs
msviderok May 16, 2026
e49f0b5
docs(examples): add solid example to the docs
msviderok May 16, 2026
a9b2d7a
Merge branch 'main' into docs/examples-solidjs
msviderok May 16, 2026
1daea82
docs(examples): remove leftovers from trying to setup kinda-two-way-b…
msviderok May 16, 2026
da59744
Merge branch 'main' into docs/examples-solidjs
msviderok May 17, 2026
3651de5
Merge branch 'main' into docs/examples-solidjs
msviderok May 18, 2026
1374d82
feat(cli): add support for --request-timeout-ms flag and enhance host…
andrii-harbour May 18, 2026
1f4eb5c
refactor(cli): update request-timeout-ms validation to accept positiv…
andrii-harbour May 18, 2026
814cb21
Merge branch 'main' into andrii/sd-3198-fixsdkcli-forward-requesttime…
andrii-harbour May 18, 2026
216eace
feat(consumer-typecheck): root export 4-source snapshot + drift gate …
caio-pizzol May 18, 2026
66f2629
ci(release-workflows): wire root no-growth gate (SD-3212 a0)
caio-pizzol May 18, 2026
c762e59
feat(ui): metadata-id geometry on ui.metadata (SD-3204)
caio-pizzol May 18, 2026
71c8284
Merge branch 'main' into docs/examples-solidjs
msviderok May 19, 2026
fd634a4
Merge pull request #3375 from superdoc-dev/caio-pizzol/SD-3212-root-i…
caio-pizzol May 19, 2026
6f84330
refactor(sdk): enhance watchdog timeout logic and add unit tests
andrii-harbour May 19, 2026
961474f
Merge branch 'main' into andrii/sd-3198-fixsdkcli-forward-requesttime…
andrii-harbour May 19, 2026
46a4031
fix(metadata): require payload entry to confirm resolve, gate ui.meta…
caio-pizzol May 19, 2026
25dcc4e
chore(ui): treat undefined metadata.get returns as absent (SD-3204)
caio-pizzol May 19, 2026
5321993
Merge pull request #3379 from superdoc-dev/caio-pizzol/SD-3204-ui-met…
caio-pizzol May 19, 2026
55ebb86
feat(consumer-typecheck): root classification artifact (SD-3212 a1)
caio-pizzol May 19, 2026
a48f6d3
feat(consumer-typecheck): root classification closure gate (SD-3212 a1b)
caio-pizzol May 19, 2026
0bdf15d
feat(consumer-typecheck): require reason string for closure-gate over…
caio-pizzol May 19, 2026
27be62b
Merge pull request #3381 from superdoc-dev/caio-pizzol/SD-3212-a1b-cl…
caio-pizzol May 19, 2026
36f4618
Merge pull request #3380 from superdoc-dev/caio-pizzol/SD-3212-a1-roo…
caio-pizzol May 19, 2026
cc44a50
feat(custom-ui): migrate citation demo to ui.metadata.* (SD-3215)
caio-pizzol May 19, 2026
764f35e
Merge pull request #3384 from superdoc-dev/caio-pizzol/SD-3215-migrat…
caio-pizzol May 19, 2026
9d9d931
feat(examples): minimal metadata-anchors Document API example (SD-3216)
caio-pizzol May 19, 2026
fd3c462
Merge pull request #3369 from superdoc-dev/andrii/sd-3198-fixsdkcli-f…
caio-pizzol May 19, 2026
dd0b9ba
Merge pull request #3385 from superdoc-dev/caio-pizzol/SD-3216-minima…
caio-pizzol May 19, 2026
0399faf
feat(public-facade): re-curate root index.ts with three tiers (SD-321…
caio-pizzol May 19, 2026
d0a806a
fix(types): keep public root facade source-checkable
caio-pizzol May 19, 2026
bf13d44
chore(demos): de-advertise 6 legacy demos (round 1, SD-3217)
caio-pizzol May 19, 2026
c2adc19
Merge pull request #3389 from superdoc-dev/caio-pizzol/SD-3212-b-recu…
caio-pizzol May 19, 2026
0564f65
Merge pull request #3391 from superdoc-dev/caio-pizzol/demo-cleanup-r…
caio-pizzol May 19, 2026
60f8fe3
chore(types): flip root types to public facade
caio-pizzol May 19, 2026
4581374
Merge remote-tracking branch 'origin/stable' into sync/stable-to-main…
github-actions[bot] May 19, 2026
74a300b
chore(manifest): classify demos and examples with section/kind/status…
caio-pizzol May 19, 2026
c97ea82
fixup(manifest): tighten classifications + sourceKind cross-check (SD…
caio-pizzol May 19, 2026
01e14f5
Merge pull request #3392 from superdoc-dev/caio-pizzol/SD-3212-c-root…
caio-pizzol May 19, 2026
15d7c6c
Merge pull request #3394 from superdoc-dev/sync/stable-to-main-202605…
caio-pizzol May 19, 2026
f5e0eba
chore(consumer-typecheck): retire check-public-types source-sync gate…
caio-pizzol May 19, 2026
53da339
docs(contributing): update for SD-3213a + sharpen snapshot wording
caio-pizzol May 19, 2026
d3f94b1
chore(demos): move 4 demos under demos/editor/ per classification (SD…
caio-pizzol May 19, 2026
085e012
fixup(validate): reject non-object manifest entries instead of skippi…
caio-pizzol May 19, 2026
0e8459d
chore(deps): regenerate pnpm-lock after demos/editor/ moves (SD-3217)
caio-pizzol May 19, 2026
bca602a
feat(consumer-typecheck): replacement gate for any-collapse coverage …
caio-pizzol May 19, 2026
f6044a8
fix(ci): promote docs-stable with lease
caio-pizzol May 19, 2026
2aa4f50
ci(demos): resolve demo paths via manifest sourcePath
caio-pizzol May 19, 2026
4242983
Merge pull request #3395 from superdoc-dev/caio-pizzol/manifest-class…
caio-pizzol May 19, 2026
7b5ed84
chore: add document API smoke guardrails and clarify RTL alignment co…
harbournick May 19, 2026
b6c7d34
Merge pull request #3397 from superdoc-dev/caio-pizzol/demos-editor-m…
caio-pizzol May 19, 2026
e6115ec
Merge pull request #3398 from superdoc-dev/caio-pizzol/fix-docs-stabl…
caio-pizzol May 19, 2026
a20ef2f
Merge pull request #3396 from superdoc-dev/caio-pizzol/SD-3213a-retir…
caio-pizzol May 19, 2026
1f7b184
Merge pull request #3399 from superdoc-dev/nick/sd-3225-add-private-d…
harbournick May 19, 2026
6c9f2d8
fix(custom-ui): guard citation metadata UI handle
caio-pizzol May 19, 2026
6acc58c
Merge pull request #3400 from superdoc-dev/codex/custom-ui-metadata-g…
caio-pizzol May 19, 2026
d784715
Merge branch 'main' into docs/examples-solidjs
msviderok May 19, 2026
4a6a8f4
refactor(consumer-typecheck): consolidate 3 snapshot scripts into one…
caio-pizzol May 19, 2026
22afa1b
Merge pull request #3403 from superdoc-dev/caio-pizzol/SD-3213b-conso…
caio-pizzol May 20, 2026
d14abff
fix(cli): include provider diagnostics in collaboration sync timeouts
caio-pizzol May 20, 2026
71e0fd3
fix(cli): guard URI decode in collaboration diagnostics sanitization
caio-pizzol May 20, 2026
428fd1c
fix(super-editor): drain tier-4 public-contract any in shim .d.ts (SD…
caio-pizzol May 20, 2026
d501579
fix(super-editor): widen DocxZipper instance surface, restore SuperCo…
caio-pizzol May 20, 2026
b7f404b
Merge pull request #3404 from superdoc-dev/caio/collab-timeout-diagno…
caio-pizzol May 20, 2026
3bb49b9
test(types): lock converter shim typed surface (SD-3213c)
caio-pizzol May 20, 2026
3fb1012
Merge pull request #3406 from superdoc-dev/caio-pizzol/SD-3213c-drain…
caio-pizzol May 20, 2026
9cc07c1
Merge remote-tracking branch 'origin/stable' into sync/stable-to-main…
github-actions[bot] May 20, 2026
0fde64c
feat(audit): attribute findings by entry + root bucket (SD-3213d)
caio-pizzol May 20, 2026
e700441
Merge remote-tracking branch 'origin/stable' into sync/stable-to-main…
github-actions[bot] May 20, 2026
19206b9
Merge pull request #3411 from superdoc-dev/sync/stable-to-main-202605…
caio-pizzol May 20, 2026
7cce079
Merge pull request #3410 from superdoc-dev/caio-pizzol/SD-3213d-audit…
caio-pizzol May 20, 2026
e3b668d
feat(audit): supported-root strict no-new-any gate (SD-3213e)
caio-pizzol May 20, 2026
0902deb
Merge pull request #3414 from superdoc-dev/caio-pizzol/SD-3213e-stric…
caio-pizzol May 20, 2026
8d6f476
fix(document-api): anchor pure-insert word-diff groups to preceding E…
tupizz May 20, 2026
9f3375b
ci(sdk): route auto Python publishes to TestPyPI, add smoke job
caio-pizzol May 20, 2026
1a907ea
fix(ci): stage CLI binaries in TestPyPI smoke before Python build
caio-pizzol May 20, 2026
1ccc8aa
Merge pull request #3409 from superdoc-dev/sync/stable-to-main-202605…
caio-pizzol May 20, 2026
0514867
fix(superdoc): hide internal Pinia stores from SuperDoc public type s…
caio-pizzol May 20, 2026
30b0a89
fix(headless-toolbar): keep legacy superdocStore host shape via depre…
caio-pizzol May 20, 2026
9844143
test(superdoc): cover SD-3213f narrow host methods (getPresentationEd…
caio-pizzol May 20, 2026
9fd9475
test(headless-toolbar): pin narrow-host dispatch + precedence (SD-3213f)
caio-pizzol May 20, 2026
10ebab2
Merge pull request #3416 from superdoc-dev/caio-pizzol/SD-3213f-hide-…
caio-pizzol May 20, 2026
903d99a
ci(sdk): switch TestPyPI publishes to TEST_PYPI_TOKEN auth
caio-pizzol May 20, 2026
3e65a4d
docs(ci): correct stale Trusted Publisher comments after token switch
caio-pizzol May 20, 2026
426d898
Merge pull request #3415 from superdoc-dev/caio-pizzol/sdk-testpypi-r…
caio-pizzol May 20, 2026
cc7b0ed
refactor(superdoc-ui): centralize host-bridge cast in one helper (SD-…
caio-pizzol May 20, 2026
d323b60
Merge pull request #3417 from superdoc-dev/caio-pizzol/SD-3213g-remov…
caio-pizzol May 20, 2026
b82dc96
fix(sdk): include operation id in DOCUMENT_CLOSED error
caio-pizzol May 20, 2026
b2531b0
test(sdk): exercise DOCUMENT_CLOSED through the public client lifecycle
caio-pizzol May 20, 2026
f70e5e5
fix(super-toolbar): type SuperToolbar fields + ToolbarItem.value shap…
caio-pizzol May 20, 2026
acfb435
fix(super-toolbar): widen dropdownStyles/style to string|number (SD-3…
caio-pizzol May 20, 2026
5c72135
Merge pull request #3419 from superdoc-dev/caio-pizzol/SD-3213-toolba…
caio-pizzol May 20, 2026
0b71192
Merge pull request #3418 from superdoc-dev/caio-pizzol/sdk-document-c…
caio-pizzol May 20, 2026
5d455e6
fix(event-emitter): unknown[] fallback for DefaultEventMap (SD-3213 d…
caio-pizzol May 21, 2026
9dbfd03
Merge branch 'main' into docs/examples-solidjs
msviderok May 21, 2026
64d8c0c
test(superdoc): cover both branches of EventEmitter.on() (SD-3213)
caio-pizzol May 21, 2026
d3e0442
Merge pull request #3420 from superdoc-dev/caio-pizzol/SD-3213-event-…
caio-pizzol May 21, 2026
c5a8e38
fix(whiteboard): type stored shapes + register/getType, fix stickers-…
caio-pizzol May 21, 2026
9c205aa
Merge pull request #3421 from superdoc-dev/caio-pizzol/SD-3213-whiteb…
caio-pizzol May 21, 2026
29628c2
feat(whiteboard): type whiteboard event payloads (SD-3213)
caio-pizzol May 21, 2026
1eda3f4
Merge pull request #3422 from superdoc-dev/caio-pizzol/SD-3213-whiteb…
caio-pizzol May 21, 2026
a226a02
feat(superdoc): type SuperDoc event payloads (SD-3213)
caio-pizzol May 21, 2026
bf0e045
refactor(superdoc): split host event union per controller (SD-3213)
caio-pizzol May 21, 2026
4126e09
Merge pull request #3423 from superdoc-dev/caio-pizzol/SD-3213-superd…
caio-pizzol May 21, 2026
d59efbe
fix(types): tighten CollaborationProvider.on/off to (string, unknown[…
caio-pizzol May 21, 2026
1a7944a
Merge pull request #3424 from superdoc-dev/caio-pizzol/SD-3213-collab…
caio-pizzol May 21, 2026
abcd63f
fix(types): tighten Editor ProseMirror generics (SD-3213 drain)
caio-pizzol May 21, 2026
f67d06a
Merge pull request #3425 from superdoc-dev/caio-pizzol/SD-3213-schema…
caio-pizzol May 21, 2026
258a965
fix(types): tighten extensions helpers signatures (SD-3213)
caio-pizzol May 21, 2026
e0647e4
Merge pull request #3426 from superdoc-dev/caio-pizzol/SD-3213-extens…
caio-pizzol May 21, 2026
17a5e3d
fix(types): correct createZip JSDoc array syntax (SD-3213)
caio-pizzol May 21, 2026
c5e5779
Merge pull request #3427 from superdoc-dev/caio-pizzol/SD-3213-zipper…
caio-pizzol May 21, 2026
3494727
fix(types): hide SuperDoc.commentsList from public TypeScript surface…
caio-pizzol May 21, 2026
daec027
fix(link): scope unlink cleanup to transient hyperlink styles
caio-pizzol May 21, 2026
1390c20
Merge pull request #3428 from superdoc-dev/caio-pizzol/SD-3213-hide-c…
caio-pizzol May 21, 2026
5725a10
chore: merge origin/main into fix/word-hyperlink-format-reset
caio-pizzol May 21, 2026
09ed42f
fix(types): tighten ToolbarTarget.commands to (...args: unknown[]) =>…
caio-pizzol May 21, 2026
e1d20d6
Merge pull request #3209 from christos8333/fix/word-hyperlink-format-…
caio-pizzol May 21, 2026
49dfd6c
Merge pull request #3430 from superdoc-dev/caio-pizzol/SD-3213-toolba…
caio-pizzol May 21, 2026
f50fdbb
fix(types): hide internal Vue mount handles from public TypeScript su…
caio-pizzol May 21, 2026
55cc8dc
Merge pull request #3431 from superdoc-dev/caio-pizzol/SD-3213-hide-v…
caio-pizzol May 21, 2026
dfd0494
fix(types): replace ProseMirror DOMOutputSpec on NodeConfig.renderDOM…
caio-pizzol May 21, 2026
0262b27
fix(types): narrow NodeConfig.renderDOM to function-only (SD-3213)
caio-pizzol May 21, 2026
577af04
Merge pull request #3432 from superdoc-dev/caio-pizzol/SD-3213-render…
caio-pizzol May 21, 2026
ce4bf0d
fix(doc-api): use textRanges[0] instead of highlightRange for comment…
bjohas May 11, 2026
5645066
fix(doc-api): retarget comment-anchor guidance to query.match wire shape
caio-pizzol May 21, 2026
1066522
Merge pull request #3433 from superdoc-dev/caio-pizzol/comment-anchor…
caio-pizzol May 21, 2026
763f8f8
fix(types): split converter/extensionService surfaces, type getActive…
caio-pizzol May 21, 2026
205ed40
fix(types): correct converter method signatures + fixture coverage (S…
caio-pizzol May 21, 2026
bc49347
test(types): pin converter.exportToDocx return shape in fixture (SD-3…
caio-pizzol May 21, 2026
6b99f81
Merge pull request #3434 from superdoc-dev/caio-pizzol/SD-3240-finish…
caio-pizzol May 21, 2026
b8e62a1
fix(types): exportJsonOnly returns ConvertedXmlPart, not string (SD-3…
caio-pizzol May 22, 2026
9fa8625
Merge branch 'main' into docs/examples-solidjs
caio-pizzol May 22, 2026
dd41827
Merge pull request #3437 from superdoc-dev/caio-pizzol/SD-3248-fix-ex…
caio-pizzol May 22, 2026
d269a58
docs(examples): register Solid example and clarify wrapper boundary
caio-pizzol May 22, 2026
3db737e
Merge branch 'main' into docs/examples-solidjs
caio-pizzol May 22, 2026
eb7e201
fix(types): type fieldAnnotationHelpers via JSDoc (SD-2980 PR A)
caio-pizzol May 22, 2026
cc51786
Merge pull request #3353 from msviderok/docs/examples-solidjs
caio-pizzol May 22, 2026
8218e9a
ci(behavior): bump matrix to 6 shards
caio-pizzol May 22, 2026
315cea3
fix(types): type trackChangesHelpers core via JSDoc (SD-2980 PR B)
caio-pizzol May 22, 2026
06cee20
docs(collaboration): clarify Yjs vs DOCX storage model
caio-pizzol May 22, 2026
a3212c4
Merge pull request #3438 from superdoc-dev/caio-pizzol/SD-2980-field-…
caio-pizzol May 22, 2026
e06a1df
Merge pull request #3441 from superdoc-dev/caio-pizzol/SD-2980-track-…
caio-pizzol May 22, 2026
ff12b2b
Merge pull request #3439 from superdoc-dev/caio-pizzol/collab-yjs-sto…
caio-pizzol May 22, 2026
9f48448
Merge remote-tracking branch 'origin/stable' into sync/stable-to-main…
github-actions[bot] May 22, 2026
e60e5c7
fix(types): type remaining trackChangesHelpers via JSDoc (SD-2980 PR C)
caio-pizzol May 22, 2026
9b7e23d
fix(cli): headless bridge syncs browser-authored comment metadata fro…
tupizz May 22, 2026
b99f9a3
Merge pull request #3443 from superdoc-dev/caio-pizzol/SD-2980-track-…
caio-pizzol May 22, 2026
4468eb5
feat(scripts): add check:public-contract wrapper command (SD-3256 Pha…
caio-pizzol May 22, 2026
04a77bc
Merge pull request #3445 from superdoc-dev/caio-pizzol/SD-3256-phase1…
caio-pizzol May 22, 2026
72c82ae
feat(scripts): add public-contract tier metadata report (SD-3256 Phas…
caio-pizzol May 22, 2026
a0a5aea
Merge pull request #3447 from superdoc-dev/caio-pizzol/SD-3256-phase2…
caio-pizzol May 22, 2026
478ce8c
Merge pull request #3442 from superdoc-dev/sync/stable-to-main-202605…
caio-pizzol May 22, 2026
d39c37f
ci(types): collapse matrix + audit CI steps into check:public-contrac…
caio-pizzol May 22, 2026
7508d9b
fix(cli): stop wrapping responses under "undefined" key (SD-3260)
caio-pizzol May 22, 2026
c56ebac
chore(cli): drop ticket refs from envelope-hint comments
caio-pizzol May 22, 2026
d07551a
chore(types): classify doc-api check scripts and wire check-examples …
caio-pizzol May 22, 2026
d3b97cf
Merge pull request #3450 from superdoc-dev/caio-pizzol/SD-673-phase1-…
caio-pizzol May 22, 2026
9e0b6a0
refactor(cli): hoist envelope-hint guard above mutation boundary
caio-pizzol May 22, 2026
4d1fc42
docs(document-api): wire check-overview-alignment + add status discla…
caio-pizzol May 22, 2026
1154ede
chore: alpha warning
caio-pizzol May 22, 2026
506e5e2
Merge pull request #3453 from superdoc-dev/caio-pizzol/SD-3262-overvi…
caio-pizzol May 22, 2026
dfe1edd
Merge branch 'main' into caio-pizzol/SD-673-phase2-docapi-orphans
caio-pizzol May 22, 2026
9e82d31
Merge pull request #3452 from superdoc-dev/caio-pizzol/SD-673-phase2-…
caio-pizzol May 22, 2026
e64a6bd
Merge branch 'main' into caio-pizzol/SD-3260-cli-envelope-undefined-key
caio-pizzol May 22, 2026
8944d99
Merge pull request #3451 from superdoc-dev/caio-pizzol/SD-3260-cli-en…
caio-pizzol May 22, 2026
aaf7f0b
fix(document-api): stop requiring alpha wording in overview check
caio-pizzol May 22, 2026
052cc2f
Merge pull request #3454 from superdoc-dev/caio-pizzol/SD-3262-follow…
caio-pizzol May 22, 2026
f5a5611
chore(document-api): retire check-doc-coverage (SD-3261)
caio-pizzol May 22, 2026
b6327f5
Merge pull request #3455 from superdoc-dev/caio-pizzol/SD-3261-retire…
caio-pizzol May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/workflows/ci-behavior.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:
# detect gate above. When the suite does run, exercise all 3 browsers
# so cross-browser regressions are caught at PR time.
browser: [chromium, firefox, webkit]
shard: [1, 2, 3, 4, 5]
shard: [1, 2, 3, 4, 5, 6]
steps:
- uses: actions/checkout@v6

Expand Down Expand Up @@ -105,8 +105,8 @@ jobs:
run: pnpm exec playwright install-deps ${{ matrix.browser }}
working-directory: tests/behavior

- name: Run behavior tests (${{ matrix.browser }} shard ${{ matrix.shard }}/5)
run: pnpm exec playwright test --project=${{ matrix.browser }} --shard=${{ matrix.shard }}/5
- name: Run behavior tests (${{ matrix.browser }} shard ${{ matrix.shard }}/6)
run: pnpm exec playwright test --project=${{ matrix.browser }} --shard=${{ matrix.shard }}/6
working-directory: tests/behavior

validate:
Expand Down
7 changes: 1 addition & 6 deletions .github/workflows/ci-demos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,11 @@ jobs:
- contract-templates
- custom-ui
- docx-from-html
- docxtemplater
- fields
- fields-source
- grading-papers
# - html-editor # broken: imports unpublished superdoc/super-editor/style.css subpath
- linked-sections
- loading-from-json
- nextjs-ssr
# - replace-content # broken: runtime nextSibling error in SuperDoc
- text-selection
- toolbar
steps:
- name: Restore workspace
uses: actions/cache/restore@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
strategy:
fail-fast: false
matrix:
example: [react, vue, vanilla, cdn, angular, nuxt, laravel]
example: [react, vue, vanilla, cdn, angular, nuxt, laravel, solid]
steps:
- name: Restore workspace
uses: actions/cache/restore@v4
Expand Down
66 changes: 32 additions & 34 deletions .github/workflows/ci-superdoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,32 +120,20 @@ jobs:
# tree (those are tracked under SD-2863 follow-up tickets).
run: pnpm --filter superdoc run check:jsdoc

- name: Consumer typecheck (matrix)
# The matrix script owns the published-package validation path:
# it packs superdoc, installs the tarball into the standalone
# fixture (`pnpm install --ignore-workspace`), then runs every
# scenario under its declared resolution mode and strictness
# settings. Replaces the pre-SD-2831 bare `tsc --noEmit` step
# so the new pack-and-install scenarios are actually exercised
# in CI, not just locally.
run: |
cd tests/consumer-typecheck
node typecheck-matrix.mjs

- name: Deep public-type audit (report-only)
# Recursive walk of every type reachable from superdoc's public
# exports in the installed tarball. Reports inventory by tier and
# top files. Always exits 0 in default mode; the `--strict` flag
# turns it into a hard gate but is not used in CI yet because the
# current public surface is the accidental declaration graph, not
# a deliberate facade. SD-2966 will define that facade; once it
# lands, this step gets `--strict` added and an allowlist file is
# seeded against the facade-scoped findings. Until then, the step
# provides visibility without the maintenance burden of a giant
# public allowlist.
run: |
cd tests/consumer-typecheck
node deep-type-audit.mjs
- name: Public-contract check (matrix + supported-root strict audit)
# SD-673 Phase 1: collapse the previous two CI steps
# ('Consumer typecheck (matrix)' + 'Deep public-type audit') into
# the single wrapper command. Same coverage:
# - typecheck-matrix.mjs packs superdoc, installs the tarball
# into the consumer fixture, runs every scenario.
# - deep-type-audit.mjs --strict-supported-root reuses that
# install and gates on the supported-root any allowlist
# (SD-3213e). Broad inventory still printed for visibility.
# --skip-build because the Build step above already ran
# `pnpm run build` (which includes build:superdoc).
# Local equivalent: `pnpm check:public-contract` (with the build
# stage included).
run: pnpm check:public-contract --skip-build

- name: Package shape gates
# External package-shape linters (publint + attw) running against
Expand All @@ -154,14 +142,24 @@ 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
- name: Public surface no-growth snapshots (SD-3176, SD-3212)
# Unified entry point for the three snapshot families:
# - super-editor-package: @superdoc/super-editor package.json#exports keys
# - legacy: resolved exports for superdoc/* legacy subpaths
# - root: 4-source inventory (types.import, types.require, import,
# require) for the superdoc root entry. Cross-source mismatches
# are reported in the companion .md but are not blockers on their
# own.
# Runs after the matrix step so the packed-and-installed fixture is
# available. See tests/consumer-typecheck/snapshots/README.md.
run: node tests/consumer-typecheck/snapshot.mjs --all --check

- name: Root classification closure gate (SD-3212 PR A1b)
# Asserts the dependency-closure rule from the A1 classification:
# no supported-root or legacy-root exported root symbol may reference
# an internal-candidate root symbol in its public declared type.
# Catches the failure class behind Phase 4a's 31-failure dry-run.
run: node tests/consumer-typecheck/check-root-classification-closure.mjs

unit-tests:
needs: build
Expand Down
81 changes: 70 additions & 11 deletions .github/workflows/promote-stable-docs.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# Advances docs-stable to the current stable HEAD (or a chosen SHA).
#
# Auto path (workflow_run): release-stable.yml is the orchestrator that
# releases superdoc on stable, so we trigger off its completion and gate on
# whether a real v* tag appeared between the triggering run's head_sha and
# origin/stable. Tools-only runs (CLI/SDK/MCP without a superdoc release)
# leave docs-stable unchanged - no new v* tag, no push.
# releases superdoc on stable, so we trigger off its completion, wait for the
# shared stable release lane to settle, and gate on whether a real v* tag
# appeared between the triggering run's head_sha and origin/stable. Tools-only
# runs (CLI/SDK/MCP without a superdoc release) leave docs-stable unchanged -
# no new v* tag, no push.
#
# We accept conclusion: failure as well as success because the orchestrator
# runs chains independently. A tools-chain failure that follows a successful
Expand Down Expand Up @@ -60,6 +61,43 @@ jobs:
fetch-depth: 0
token: ${{ steps.generate_token.outputs.token }}

- name: Wait for stable release lane to drain
if: github.event_name == 'workflow_run'
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
REPO: ${{ github.repository }}
run: |
set -euo pipefail

deadline=$((SECONDS + 1800))
while true; do
active_runs=$(gh run list \
--repo "$REPO" \
--branch stable \
--limit 100 \
--json databaseId,name,status,url \
--jq '[.[] | select((.name == "📦 Release stable tooling (CLI/SDK/MCP)" or .name == "📦 Release esign" or .name == "📦 Release template-builder") and .status != "completed")] | length')

if [ "$active_runs" -eq 0 ]; then
echo "Stable release lane is idle."
break
fi

if [ "${SECONDS}" -ge "${deadline}" ]; then
echo "Timed out waiting for stable release lane to drain."
gh run list \
--repo "$REPO" \
--branch stable \
--limit 100 \
--json databaseId,name,status,url \
--jq '.[] | select((.name == "📦 Release stable tooling (CLI/SDK/MCP)" or .name == "📦 Release esign" or .name == "📦 Release template-builder") and .status != "completed") | "\(.databaseId)\t\(.name)\t\(.status)\t\(.url)"'
exit 1
fi

echo "Waiting for ${active_runs} stable release run(s) to finish..."
sleep 30
done

# Auto path: gate on a real SuperDoc release between the triggering
# run's head_sha and origin/stable. A no-op semantic-release run must
# not advance docs-stable.
Expand Down Expand Up @@ -108,25 +146,46 @@ jobs:

- name: Push docs-stable (auto)
if: github.event_name == 'workflow_run' && steps.detect.outputs.released == 'true'
run: git push origin "refs/remotes/origin/stable:refs/heads/docs-stable"
run: |
set -euo pipefail
git fetch origin stable docs-stable --tags --force

docs_only_commits=$(git log --oneline origin/stable..origin/docs-stable -- apps/docs/ || true)
if [ -n "${docs_only_commits}" ]; then
echo "docs-stable has docs changes that are not on stable; refusing to overwrite:"
echo "${docs_only_commits}"
exit 1
fi

target=$(git rev-parse origin/stable)
expected=$(git rev-parse origin/docs-stable)
echo "Promoting ${target} to docs-stable with lease ${expected}."
git push --force-with-lease=refs/heads/docs-stable:"${expected}" origin "${target}:refs/heads/docs-stable"

# Manual path: trust the operator. Promote either the requested SHA
# or the current origin/stable head. The push is rejected by GitHub
# if it isn't a fast-forward, so this stays safe even on operator
# error - no `--force`.
# or the current origin/stable head, while still using a lease so we
# never overwrite a concurrently updated docs-stable branch.
- name: Push docs-stable (manual)
if: github.event_name == 'workflow_dispatch'
env:
REQUESTED_SHA: ${{ inputs.sha }}
run: |
set -euo pipefail
git fetch origin stable --tags --force
git fetch origin stable docs-stable --tags --force

if [ -n "${REQUESTED_SHA}" ]; then
target="${REQUESTED_SHA}"
else
target=$(git rev-parse origin/stable)
fi

echo "Promoting ${target} to docs-stable."
git push origin "${target}:refs/heads/docs-stable"
docs_only_commits=$(git log --oneline "${target}"..origin/docs-stable -- apps/docs/ || true)
if [ -n "${docs_only_commits}" ]; then
echo "docs-stable has docs changes that are not on ${target}; refusing to overwrite:"
echo "${docs_only_commits}"
exit 1
fi

expected=$(git rev-parse origin/docs-stable)
echo "Promoting ${target} to docs-stable with lease ${expected}."
git push --force-with-lease=refs/heads/docs-stable:"${expected}" origin "${target}:refs/heads/docs-stable"
Loading
Loading