Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
gram: docs
> ./openspec/changes/archive/2026-06-05-unify-orchestration-tier1/specs/core-paratext/spec.md
## ADDED Requirements
### Requirement: Shared ProseMirror paragraph/text helpers
`@eigenpal/docx-editor-core` SHALL expose `findParaIdRange`, `findTextInPmParagraph`, `getVanillaNodeText`, and `getVanillaTextBetween` from a single framework-agnostic module. Both the React and Vue adapters SHALL import these from core rather than maintaining private copies. The lifted behavior MUST be identical to the pre-lift adapter implementations.
#### Scenario: Resolve a paragraph range by paraId
- **WHEN** `findParaIdRange(doc, paraId)` is called with a paraId present in the document
- **THEN** it returns the same `{ from, to }` PM range the previous adapter-local copy returned
#### Scenario: Both adapters share one implementation
- **WHEN** the helpers are lifted to core
- **THEN** React's `internals/pmAnchors.ts` and `internals/vanillaText.ts` and Vue's `utils/paraTextHelpers.ts` re-export from core, and no adapter retains a second copy of the logic
#### Scenario: Vanilla text extraction is preserved
- **WHEN** `getVanillaTextBetween(doc, from, to)` is called over a range
- **THEN** the extracted plain text matches the prior per-adapter output for the same range