Back to Plate

Slate v2 Open Issue Dossiers: 6038-6007

docs/slate-issues/open-issues-dossiers/6038-6007.md

53.0.612.4 KB
Original Source

Slate v2 Open Issue Dossiers: 6038-6007

Scope

These dossiers cover issues #6038 through #6007 from the pilot set. Use the top-level index for the range map and the ledger for the canonical structured cache.


Issue #6038

Issue Summary

This is a maintainer-authored architecture/performance tracking issue, not a user bug report. It frames a repeated-tree-update performance cliff in Slate as a batch-engine problem rather than a narrow set_node helper request, and it explicitly records the desired semantics for any upstream fix.

Thread Summary

There is no thread yet. The body already does the real work: requirements, rationale, benchmark context, and the active implementation link are all in one place.

Linked Artifacts Summary

Linked PR #6039 is the active implementation thread and should be treated as part of the issue context.

Repro Status

Repro is effectively confirmed by the attached benchmark command and the linked PR. This is not waiting on a user repro.

Workaround Status

No user-facing workaround is proposed. The issue is about fixing the engine, not avoiding it.

Validity Assessment

Valid. This is a real current-architecture issue, already backed by implementation work and benchmark data.

Duplicate / Invalid / Stale Assessment

Not a duplicate candidate in the normal tracker sense. It is the canonical architecture-tracking issue for this batch-engine line.

Maintainer Action Suggestion

fix-current-architecture

Future Reply Direction

No reply is needed unless the linked PR scope changes. If a reply is posted, it should stay narrow: status of the engine work, what is already proven, and what remains to justify further optimization.

v2 Relevance

Direct. This issue is basically a miniature argument for transaction-aware execution, private draft state, and better batch semantics. Even if the current rewrite lands, the underlying lesson still feeds a v2 engine model.

Red-Test Extraction Note

Not a direct test candidate. Use this issue as a parent architecture ticket and extract smaller behavior tests from it instead.

Benchmark Extraction Note

Ready now. Use the existing Slate perf harness as the benchmark seam and keep the workload broken down by operation family and mixed-batch shape instead of hiding everything in one giant lane.


Issue #6034

Issue Summary

This is a DOM-selection escape bug around table boundaries. When the table is the last node, arrow navigation allows the browser selection to end up outside the valid editor position, and the next character inserts in two places. The same class of failure appears at the top boundary with the up arrow.

Thread Summary

There is no comment thread yet. The issue body is clean: repro steps, recording, official example URL, and expected behavior are already present.

Repro Status

Likely reproducible from the official table example exactly as written. This is already better than the average bug report.

Workaround Status

Poor. The obvious workaround is “don’t leave the table as the boundary node,” which is not a serious answer.

Validity Assessment

Likely valid. The report is specific and grounded in the official example.

Duplicate / Invalid / Stale Assessment

Low duplicate risk from the pilot alone. It may eventually cluster with other boundary-selection issues, but nothing in this thread suggests it is invalid or stale.

Maintainer Action Suggestion

keep-open

Future Reply Direction

A short acknowledgement would help. The useful next maintainer move is to confirm repro and note whether this belongs in slate-dom, slate-react, or shared selection logic. No need to ask for more issue details unless the current example no longer reproduces.

v2 Relevance

Indirect. A React-first transaction engine does not magically solve browser-selection drift, but a cleaner DOM selection bridge and snapshot-driven runtime could reduce this class of boundary desync bug.

Red-Test Extraction Note

Ready now. Start with a DOM integration test around table-boundary arrow navigation and assert valid selection plus single insertion.


Issue #6022

Issue Summary

This is an Android collapsed-selection mark-toggle bug that immediately turns into a keyboard-dismiss and cursor-jump failure on the next typed character. The core symptom is not just “Android is weird.” It looks like selection state bouncing between stale and new text positions after mark toggling.

Thread Summary

The comments make the issue much stronger. The reporter added an Android WebView repro wrapper around the official Slate examples and then posted the exact apply log sequence. That sequence shows an insert_node followed by repeated set_selection oscillation between [0,0] and [0,1], which is dramatically more useful than the body alone.

Repro Status

Strong. The issue has a recording, platform details, official example reference, Android wrapper code, and operation logs.

Workaround Status

Poor. The only workaround mentioned implicitly is to apply the mark to a non-collapsed selection instead of toggling it on a collapsed caret. That is a user behavior dodge, not a real workaround.

Validity Assessment

Valid.

Duplicate / Invalid / Stale Assessment

Low duplicate risk from this pilot. It is a real mobile/selection issue with concrete evidence.

Maintainer Action Suggestion

keep-open

Future Reply Direction

A useful maintainer reply would acknowledge the extra repro material and narrow the suspected seam: Android IME plus selection synchronization after mark toggles. If more follow-up is needed, ask whether the same failure occurs in Chrome on Android outside the WebView wrapper, but do not ask for generic “more info” nonsense because the thread already has plenty.

v2 Relevance

Direct. This issue smells like exactly the kind of runtime/selection-timing fragility that a transaction-first, React-first architecture is trying to excise. It is also a warning that mobile and IME behavior need first-class package ownership in any v2 plan, not a footnote.

Red-Test Extraction Note

Ready with minor setup. Start by testing the selection oscillation after collapsed mark toggle plus typing; do not block on reproducing Android keyboard dismissal perfectly in the first red test.


Issue #6016

Issue Summary

This issue reports a crash when two <Slate> components render concurrently with the same value reference. The visible failure is a findPath error, but the maintainer explanation is more important than the symptom: Slate does not support sharing the same node-object graph across editors because global weak maps are keyed by node identity and can be overwritten across editor instances.

Thread Summary

The thread materially changes the triage outcome. The maintainer states clearly that this usage is unsupported and explains why. The reporter then narrows the regression trigger to a specific findPath change in slate-dom, but also agrees their usage is outside the supported model and will be updated.

Repro Status

Strong. The issue has a concrete reproduction shape and an identified regression seam.

Workaround Status

Acceptable. Deep-clone the Slate value before using it in either editor.

Validity Assessment

Likely invalid as a current-contract bug report, even though the crash itself is real.

Duplicate / Invalid / Stale Assessment

Not obviously a duplicate from this thread, but it does look like unsupported usage rather than a bug Slate should promise to preserve.

Maintainer Action Suggestion

close-invalid

Future Reply Direction

If this gets a final maintainer reply before closure, it should be short and explicit: shared node graphs across concurrent editors are unsupported, deep clone the value, and the current crash/regression explanation is already in the thread.

v2 Relevance

Direct. Stable identity and editor-scoped bookkeeping are exactly the kind of constraints a v2 architecture should think about deliberately instead of inheriting accidentally.

Red-Test Extraction Note

Ready now if we want to make this a v2 capability test later. For current Slate, it is better treated as an unsupported-usage dossier than as a must-fix regression.


Issue #6013

Issue Summary

This is a real React API ergonomics complaint: if an editor instance is already initialized via editor.children, the Slate component still requires initialValue, forcing callers to pass what feels like obsolete or duplicate state.

Thread Summary

The discussion is useful and concrete. The maintainer pushes back on the simplest proposal because editor.children defaults to [], which is sometimes intentional, so blindly making initialValue optional would remove an important guardrail. A more nuanced alternative emerges: allow omission, but warn when editor.children is still empty unless the caller explicitly passes initialValue={[]}.

Repro Status

Strong enough. This is a straightforward render-time API behavior, not a flaky runtime issue.

Workaround Status

Acceptable. Pass initialValue={editor.children}.

Validity Assessment

Valid improvement request.

Duplicate / Invalid / Stale Assessment

No duplicate signal in the thread. This looks like a legitimate API design question.

Maintainer Action Suggestion

v2-roadmap

Future Reply Direction

If a maintainer replies again, the useful move is to acknowledge the ergonomics problem while making the guardrail trade-off explicit. The thread already has the shape of the best current idea.

v2 Relevance

Direct. A React-first v2 should not force callers to thread redundant initialization props just to satisfy runtime ambiguity inherited from the current model.

Red-Test Extraction Note

Ready now. This can become a clean red React integration test around rendering <Slate editor={preinitializedEditor}> without initialValue.


Issue #6007

Issue Summary

This is not an editor-engine problem. It is a release-process integrity complaint: npm and GitHub releases/tags disagree, which is bad for supply-chain verification and trust.

Thread Summary

The thread does the important triage already. A maintainer points to closed issue #6002 as the likely source. The reporter agrees that the issue may simply be a duplicate or reopening candidate.

Linked Artifacts Summary

Related issue #6002 is the likely canonical thread.

Repro Status

Strong enough for process triage. The problem statement is clear and the duplicate lead is already in the thread.

Workaround Status

Poor. The whole point of the issue is that manual cross-checking should not be necessary.

Validity Assessment

Duplicate candidate.

Duplicate / Invalid / Stale Assessment

High duplicate likelihood with #6002.

Maintainer Action Suggestion

mark-duplicate

Future Reply Direction

The right reply is short: acknowledge the duplicate target, link #6002, and close or consolidate. Do not let this sit open pretending it is a separate roadmap input.

v2 Relevance

None. This is release hygiene, not architecture direction.

Red-Test Extraction Note

Not a test candidate. This belongs in release-process verification, not editor TDD.