Skip to content

Comments

feat: the document API limited alpha#2087

Merged
harbournick merged 27 commits intomainfrom
nick/sd-1937-contract-first-document-api-alpha
Feb 18, 2026
Merged

feat: the document API limited alpha#2087
harbournick merged 27 commits intomainfrom
nick/sd-1937-contract-first-document-api-alpha

Conversation

@harbournick
Copy link
Collaborator

Summary

This PR establishes a contract-first Document API alpha baseline with working Super Editor adapters, generated contract/docs outputs, and conformance coverage.

Included

  • @superdoc/document-api contract + typed API surface (read + mutation operations).
  • Super Editor adapter implementation for the alpha operation set.
  • Capability model + consistent mutation semantics: typed pre-apply throws, structured non-applied failures, and no post-apply throws.
  • Contract parity/generation/check tooling.
  • Generated artifacts committed (packages/document-api/generated/** + docs reference outputs), with explicit generated-vs-manual ownership docs.
  • Conformance test suite for mutating operations.

Alpha Operation Scope

  • Core: find, getNode, getNodeById, getText, info, insert, replace, delete
  • Capabilities: capabilities.get
  • Comments: comments.add, comments.edit, comments.reply, comments.move, comments.resolve, comments.remove, comments.setInternal, comments.setActive,
    comments.goTo, comments.get, comments.list
  • Track changes: trackChanges.list, trackChanges.get, trackChanges.accept, trackChanges.reject, trackChanges.acceptAll, trackChanges.rejectAll
  • Additional alpha ops: format.bold, create.paragraph, lists.list, lists.get, lists.insert, lists.setType, lists.indent, lists.outdent, lists.restart,
    lists.exit

Validation

  • pnpm exec vitest run packages/super-editor/src/document-api-adapters/__conformance__/contract-conformance.test.ts
  • pnpm exec tsx packages/document-api/scripts/check-contract-parity.ts
  • pnpm exec tsx packages/document-api/scripts/check-contract-outputs.ts

Out of Scope

  • New operation domains beyond the alpha surface above.

@harbournick harbournick self-assigned this Feb 17, 2026
@linear
Copy link

linear bot commented Feb 17, 2026

@chatgpt-codex-connector
Copy link

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 17, 2026

Visual diffs detected

Pixel differences were found in visual tests. This is not blocking — reproduce locally with cd tests/visual && pnpm docs:download && pnpm test to review diffs.

…registry

Adds `api.invoke({ operationId, input, options })` for dynamic/AI callers
alongside type-safe overloads for TypeScript consumers. Includes:

- OperationRegistry with bidirectional compile-time completeness checks
- Runtime dispatch table mapping all 36 operations to direct API methods
- DynamicInvokeRequest overload accepting unknown input
- hasOwnProperty guard with clear error for unknown operation IDs
- Contract parity check extended to verify dispatch table keys
- 13 new tests covering completeness, parity, error handling, and dynamic dispatch
@harbournick harbournick merged commit 091c24c into main Feb 18, 2026
9 checks passed
@harbournick harbournick deleted the nick/sd-1937-contract-first-document-api-alpha branch February 18, 2026 02:45
@superdoc-bot
Copy link
Contributor

superdoc-bot bot commented Feb 18, 2026

🎉 This PR is included in superdoc v1.15.0-next.5

The release is available on GitHub release

harbournick pushed a commit that referenced this pull request Feb 20, 2026
# [1.15.0](v1.14.0...v1.15.0) (2026-02-20)

### Bug Fixes

* **ai-actions:** preserve html/markdown insertion and prevent repeated formatted replacement ([#2117](#2117)) ([9f685e9](9f685e9))
* **ai:** support headless mode in EditorAdapter.applyPatch ([#1859](#1859)) ([cf9275d](cf9275d))
* **collaboration:** memory leaks, Vue stack overflow, and Liveblocks stability (SD-1924) ([#2030](#2030)) ([a6827fd](a6827fd)), closes [#prepareDocumentForExport](https://github.com/superdoc-dev/superdoc/issues/prepareDocumentForExport)
* **collab:** prevent stale view when remote Y.js changes bypass sdBlockRev increment ([#2099](#2099)) ([0895a93](0895a93))
* **converter:** handle null list lvlText and always clear numbering cache ([#2113](#2113)) ([336958c](336958c))
* **document-api:** remove search match cap and validate moveComment bounds ([6d3de67](6d3de67))
* export docx blobs with docx mime type ([#1849](#1849)) ([1bc466d](1bc466d))
* **export:** prevent DOCX corruption from entity encoding and orphaned delInstrText (SD-1943) ([#2102](#2102)) ([56e917f](56e917f)), closes [#replaceSpecialCharacters](https://github.com/superdoc-dev/superdoc/issues/replaceSpecialCharacters) [#1988](#1988)
* **layout-bridge:** correct cell selection for tables with rowspan ([#1839](#1839)) ([0b782be](0b782be))
* **layout,converter:** text box rendering and page-relative anchor positioning (SD-1331, SD-1838) ([#2034](#2034)) ([3947f39](3947f39))
* **layout:** route list text-start calculations through resolveListTextStartPx ([02b14b8](02b14b8))
* **painter-dom:** use absolute page Y for page-relative anchors in header/footer decorations ([0b9bc72](0b9bc72))
* preserve selection highlight when opening toolbar dropdowns ([#2097](#2097)) ([a33568e](a33568e))
* structured content renders correct on hover and select ([#1843](#1843)) ([dab3f04](dab3f04))
* **super-editor:** add unsupported-content reporting across HTML/Markdown import paths ([#2115](#2115)) ([84880b7](84880b7))
* **super-editor:** handle partial comment file-sets and clean up stale parts on export ([#2123](#2123)) ([f63ae0a](f63ae0a))
* **super-editor:** restore <hr> contentBlock parsing and harden VML HR export fallback ([#2118](#2118)) ([da51b1f](da51b1f))
* table headers are incorrectly imported from html ([#2112](#2112)) ([e8d1480](e8d1480))
* table resizing regression ([#2091](#2091)) ([20ed24e](20ed24e))
* table resizing regression ([#2091](#2091)) ([9a07f1c](9a07f1c))
* **tables:** align tableHeader attrs with tableCell to fix oversized DOCX export widths ([#2114](#2114)) ([38f0430](38f0430))
* **tables:** fix autofit column scaling, cell width overflow, and page break splitting ([#1987](#1987)) ([61a3f6f](61a3f6f))
* **tables:** prevent tblInd double-shrink when using tblGrid widths (SD-1494) ([8750ece](8750ece))
* track changes comment text for formatting changes ([#2013](#2013)) ([b2a43ff](b2a43ff))
* wire DocumentApi to Editor.doc with lifecycle-safe caching ([57326ea](57326ea))

### Features

* cropped images ([#1940](#1940)) ([3767a49](3767a49))
* extend document-api with format, examples, create.heading ([#2092](#2092)) ([fdf8c7c](fdf8c7c))
* **lists:** support hidden list indicators via w:vanish ([#2069](#2069)) ([#2080](#2080)) ([0bed0fd](0bed0fd))
* the document API limited alpha ([#2087](#2087)) ([091c24c](091c24c))
@harbournick
Copy link
Collaborator Author

🎉 This PR is included in superdoc v1.15.0

The release is available on GitHub release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant