docs/solutions/test-failures/2026-04-28-slate-browser-generated-stress-rows-need-real-editable-harnesses.md
Generated slate-browser stress rows call openExample(... ready: { editor: 'visible' }), so they need a route with a real Editable surface and browser
handle. Selector-only demos can still be useful contract routes, but they cannot
run through the generated editor scenario harness.
persistent-annotation-anchors overlay-annotation-bookmark-rebase failed
while waiting for getByRole('textbox').first() because that demo renders
selector panels under <Slate> without an Editable.Editable render.editable: 0 for every overlay refresh. A button in the same React
owner as the editor can rerender the root once without proving broad Slate
node churn.Use a real editor route for generated stress and keep selector-only demos as contract/demo coverage.
const overlayAnnotationBookmarkRebase = (): StressCase =>
createStressCase({
family: 'overlay-annotation-bookmark-rebase',
route: 'review-comments',
steps: [
...addReviewCommentSteps(),
{
kind: 'clickSelector',
label: 'insert-prefix-before-bookmark',
selector: 'button:has-text("Insert prefix before first comment")',
},
{
contains: 'range:0.0:1|0.0:25',
kind: 'assertLocatorText',
label: 'assert-rebased-comment-range',
selector: '#comment-card-comment-1',
},
],
})
Keep the broader contract row honest by listing both the executable stress route and the selector/demo route:
{
family: 'overlay-annotation-bookmark-rebase',
routes: ['review-comments', 'persistent-annotation-anchors'],
}
For app-owned overlay buttons, cap the root render instead of pretending it is zero:
{
budget: { byKind: { editable: { max: 1 } } },
kind: 'assertRenderBudget',
}
The generated stress runner needs editor operations, selection handles, render
profiler state, replay artifacts, and kernel trace checks. A selector-only demo
does not publish that surface. Moving the executable stress row to
review-comments keeps the bookmark-rebase behavior under browser proof while
leaving persistent-annotation-anchors available for focused selector
assertions and documentation.
The editable: { max: 1 } budget still catches broad churn. It allows the
single root render caused by the app button owner but does not allow repeated
editor, element, leaf, or void churn to hide inside the stress row.
Editable
and publishes the slate-browser handle.PLAYWRIGHT_RETRIES=0 before calling the row
accepted.