Back to Plate

Research Log

docs/research/log.md

53.0.633.9 KB
Original Source

Research Log

[2026-05-23] maintain | TanStack Virtual perf and iOS refresh

  • refreshed tanstack-virtual-and-github-large-surface-virtualization.md against the 2026-05-19 TanStack Virtual perf/iOS post and latest npm package metadata
  • updated the Slate v2 conclusion: upgrade to @tanstack/[email protected] / @tanstack/[email protected], keep the Slate public API unchanged, keep virtualized mode experimental, avoid overriding upstream backward-scroll defaults, and route internal layout-backed virtualized scroll writes through TanStack where practical

[2026-05-14] maintain | slate v2 example memoization ecosystem refresh

  • reused the existing editor-architecture lane for Lexical, ProseMirror, Tiptap, React 19.2, Plate, and slate-yjs evidence
  • refreshed the active Slate Ralplan with a steal/reject/diverge strategy: 2026-05-14-slate-v2-example-memoization-hard-cut-ralplan.md
  • found no missing compiled research page for this planning question; remaining gaps are performance, regression, migration, objection, and high-risk proof rows inside the plan

[2026-05-11] maintain | scroll selection visibility runtime

  • compiled a new editor-architecture source summary for caret visibility and nested scroll behavior: scroll-selection-visibility-runtime.md
  • compared local ProseMirror, Lexical, CodeMirror, Tiptap, Milkdown, and Obsidian evidence for selection-first / scroll-second runtime design
  • recorded the Slate v2 target split: selection import, scroll request, and post-commit visibility

[2026-05-03] maintain | TanStack virtualization source refresh

  • refreshed tanstack-virtual-and-github-large-surface-virtualization.md against the live .tmp/slate-v2 TanStack-backed implementation
  • replaced the stale "dependency absent / fixed segment" gap with the current decoupling gap: virtualized option types, render branch, materialization, metrics, shell fallback, and keyboard classification are still spread through shared shell/staged rendering files

[2026-04-04] bootstrap | initialize docs/research

  • moved the agent-reference-wiki pattern from docs/plans/ to README.md
  • established docs/research as the compiled layer
  • established ../raw as the expected private raw evidence layer
  • created the initial research directory scaffold

[2026-04-04] ingest | Typora corpus bootstrap

  • copied the cached Typora corpus into ../raw/typora
  • created the first compiled Typora pages:
  • generated 123 one-to-one Typora source cards plus ../raw/typora/catalog.md
  • promoted the highest-value Typora pages into themed source-cluster syntheses and a system map
  • promoted the strongest recurring Typora ideas into concept pages, decision pages, and one explicit open-question page
  • compared the new research-layer output against the older repo-safe Typora reference subtree before pruning it

[2026-04-04] ingest | Milkdown corpus bootstrap

[2026-04-04] ingest | Obsidian corpus bootstrap

[2026-04-09] maintain | date and media expansion follow-up

[2026-04-09] maintain | math delimiter trigger surface

[2026-04-09] maintain | Obsidian math trigger authority correction

[2026-04-09] maintain | Obsidian math trigger rerun with local-raw exhaustiveness

  • reran the Obsidian side under the tightened research-wiki full rule
  • recorded the official source entrypoints checked plus the direct raw files actually read
  • confirmed the current law still stands: Obsidian is explicit for selection-wrap and block detection / preview, while Typora and Milkdown still own the more aggressive pair-on-type / promotion rows

[2026-04-09] full | inline and block autoformat surface

[2026-04-10] maintain | autoformat authority closure follow-up

[2026-04-14] full | editor architecture overlay corpus ingest

  • created a new compiled source-family lane for the Slate v2 decorations / annotations architecture work: sources/editor-architecture/README.md and decorations-annotations-overlay-corpus.md
  • created a new cross-corpus system map: editor-architecture-landscape.md
  • created a normalized decision page for the overlay-plan cuts: slate-v2-overlay-architecture-cuts.md
  • added entity pages for the core candidate set actually used in the overlay research: ProseMirror, Lexical, Tiptap, Premirror, Pretext, Slate, edix, use-editable, rich-textarea, VS Code, TanStack DB, and EditContext
  • recorded the current structure gap honestly: most evidence for this lane exists in official local repo clones under ../, but has not yet been normalized into dedicated ../raw/<corpus> families

[2026-04-14] maintain | decompact overlay research lane

[2026-04-15] maintain | overlay superiority and field-position read

[2026-04-15] full | perf-architecture lane vs ProseMirror, Lexical, VS Code, and React 19.2

  • deepened the editor-architecture research lane on the direct perf-architecture compare set: ProseMirror, Lexical, VS Code, local Slate v2, and React 19.2
  • added a dedicated React 19.2 source page: react-19-2-external-store-and-background-ui.md
  • strengthened the ProseMirror, Lexical, and VS Code source summaries with update/invalidation details instead of only overlay-lane summaries
  • updated the landscape/system pages to state the sharper verdict: React 19.2 makes Slate v2 a first-class React-native perf architecture, but does not by itself prove blanket superiority over ProseMirror, Lexical, or VS Code
  • added the explicit decision page: slate-v2-react-19-2-perf-architecture-vs-field.md

[2026-04-15] full | source-scoped overlay invalidation extension

  • deepened the overlay perf-architecture lane into the concrete next reshape: source-scoped invalidation, source dirtiness declarations, and indexed projection recompute below the React layer
  • added the concept page: source-scoped-overlay-invalidation.md
  • added the decision page: slate-v2-source-scoped-overlay-invalidation.md
  • extended the decoration roadmap with Waves 9-11 as the active next-step perfection tranche rather than another examples/docs polish pass

[2026-04-21] maintain | data-model-first React-perfect runtime synthesis

  • deepened the editor architecture lane against the current Slate v2 huge-document perf work and Ian's data-model-first feedback
  • inspected strongest local clone evidence across ProseMirror, Lexical, VS Code, Pretext/Premirror, TanStack DB, EditContext, and local Slate v2
  • added the decision page: slate-v2-data-model-first-react-perfect-runtime.md
  • accepted the revised target: data-model-first core, operation/collaboration-friendly model, transaction-first local execution, renderer-optimized live read APIs, and React-optimized slate-react
  • recorded the main risk: the huge-doc perf win is real, but direct DOM text sync, shell activation, shell-backed paste, and shell accessibility must be hardened before calling the runtime "perfect"

[2026-04-24] maintain | Slate v2 post-closure architecture review

  • added a post-closure architecture decision: slate-v2-post-closure-architecture-review.md
  • accepted that the architecture direction remains right: Slate model + operations, editor.read / editor.update, transaction and DOM-selection authority, extension methods, React 19.2 live-read runtime, and generated browser gauntlets
  • recorded the remaining non-absolute gaps: compatibility auto-transactions, internal Transforms.* lanes, read-only public mirrors, explicit kernel bridges, scoped mobile proof, and the accepted huge-document middle-shell caveat

[2026-04-30] maintain | Lexical API surface refresh for Slate v2 steal review

  • refreshed the Lexical read/update source summary against local /Users/zbeyens/git/lexical
  • added focused evidence for listener partitions, prioritized command handlers, update tags, dirty transform scheduling, extension lifecycle/dependencies, extension signals, NodeState, and DecoratorNode policy hooks
  • narrowed the Slate v2 takeaway: steal lifecycle/runtime ideas, not Lexical's class-node model, $ public helpers, or dispatch-command app API

[2026-04-15] full | plugin input rules documentation pattern landscape

[2026-04-23] maintain | editor architecture raw availability check

  • checked whether Lexical, ProseMirror, Tiptap, and Tiptap docs have normalized raw evidence families under ../raw
  • confirmed no normalized ../raw/lexical, ../raw/prosemirror, ../raw/tiptap, or ../raw/tiptap/docs family currently exists
  • confirmed strongest local evidence exists as official local clones under: ../lexical, ../prosemirror, ../tiptap, and the sibling ../tiptap-docs docs clone that later moved under ../raw/tiptap/docs
  • updated sources/editor-architecture/README.md with the explicit raw availability / structure-gap status

[2026-04-23] full | read/update runtime architecture raw ingest

[2026-04-23] full | deeper steal reject defer architecture analysis

[2026-04-23] maintain | Slate v2 perfect architecture pause review

  • rechecked the active perfect architecture plan against the compiled Lexical / ProseMirror / Tiptap research lane after the browser proof substrate exposed more cursor and selection regressions
  • kept the accepted architecture direction unchanged: Slate model + operations, Lexical-style read/update, ProseMirror-style transaction and DOM-selection discipline, Tiptap-style extension ergonomics, and React 19.2 optimized runtime APIs
  • recorded the remaining risk as proof-discipline risk, not a reason to pivot into a different editor model: fixture honesty, generated browser gauntlets, cross-browser closure, and model + DOM + commit assertions still decide whether the plan is battle-tested

[2026-04-26] maintain | Slate v2 architecture verdict after human stress sweep

  • rechecked the accepted Slate v2 architecture lane against the latest human-like browser editing sweep
  • kept the architecture direction unchanged: Slate model + operations, editor.read / editor.update, transaction-owned primitive methods, EditorCommit, extension methods, React 19.2 live reads, and generated browser proof
  • recorded the sharper verdict: current Slate v2 is the right architecture bet, but not regression-free or battle-tested yet because the sweep still found a multiline paste regression, a route-map crash, and an unfixed mentions invalid DOM nesting warning
  • added: slate-v2-architecture-verdict-after-human-stress-sweep.md

[2026-04-27] full | node text mark render DX architecture

[2026-04-27] maintain | Slate v2 architecture verdict after item 4/5/6 closure

  • refreshed the accepted Slate v2 architecture verdict after the item 4/5/6 hard-cut lane completed
  • recorded the stronger current proof: public write/read escape hatches cut or fenced, compatibility aliases guarded by release discipline, generated browser contracts covering reported operation families, and bun check:full passing
  • kept the harsh verdict unchanged at the top level: the architecture direction is right and stronger than before, but not yet absolute, regression-free, or battle-tested without runtime ownership extraction, Plate/Yjs migration proof, longer soak, and real-device coverage
  • updated: slate-v2-architecture-verdict-after-human-stress-sweep.md

[2026-04-27] maintain | Slate v2 architecture verdict after selector/live-read hard cut

  • refreshed the accepted Slate v2 architecture verdict after the selector and live-read runtime hard-cut lane completed
  • recorded the stronger current proof: public node/text selectors are model-truth-only, synced-text render skipping is internal to mounted render selector hooks, direct slate/internal live reads in slate-react/src are limited to runtime facade modules, focused browser regression rows pass, and bun check:full passes with one recorded retry that passed alone without retries
  • kept the harsh verdict unchanged: Slate v2 remains the right architecture bet, but still not absolute or battle-tested until hot selection/repair/composition policy leaves Editable, broad hot React subscriptions shrink further, Plate/Yjs adapter rows exist, and raw-device proof covers mobile claims
  • updated: slate-v2-architecture-verdict-after-human-stress-sweep.md

[2026-04-27] maintain | Slate v2 architecture verdict after live runtime review

  • rechecked the live .tmp/slate-v2 runtime and proof surface against the React 19.2, DX, legacy-regression, and Lexical/ProseMirror/Tiptap criteria
  • recorded the stronger current fact: Editable and EditableTextBlocks no longer carry generic useSlateSelector hot paths, direct kernel/selection/repair calls moved into runtime modules, root selector reads are named in editable/root-selector-sources.ts, and generated stress rows include render budget assertions
  • kept the harsh verdict unchanged: Slate v2 is the right architecture bet, but not absolute until event-runtime ownership shrinks Editable further and generated browser parity runs the same operation-family scenarios against legacy ../slate and v2 examples
  • updated: slate-v2-architecture-verdict-after-human-stress-sweep.md

[2026-04-28] maintain | Slate v2 root-runtime verdict refresh

  • refreshed the Slate v2 architecture verdict after the root runtime selector guard lane completed
  • updated slate-v2-architecture-verdict-after-human-stress-sweep.md so it no longer treats EditableDOMRoot root policy ownership as the top current blocker
  • recorded the new remaining priority: runtime-owned public void shells, generated legacy browser parity, Plate/Yjs migration proof, and real-device soak

[2026-04-28] maintain | Slate v2 state/tx API naming and extension namespaces

  • refreshed the read/update architecture lane for the sharper public naming question around state, tx, api, tf, extension groups, and schema predicate placement
  • checked the local official Lexical, ProseMirror, and Tiptap clones plus the compiled read/update evidence pages
  • accepted the API decision: slate-v2-state-tx-public-api-and-extension-namespaces.md
  • updated index.md with the new decision page

[2026-04-28] maintain | Slate v2 React 19.2 evidence refresh

  • refreshed the React 19.2 evidence used by the Slate v2 architecture review against the official React 19.2 release page
  • accepted react-19-2-external-store-and-background-ui.md as current enough for the review lane
  • confirmed the same conclusion: React 19.2 helps the projection layer and non-urgent UI, but Slate still needs editor-owned dirty commits and node-scoped subscriptions for hot editing paths

[2026-04-28] maintain | Slate v2 state/tx decision drift cleanup

[2026-04-28] maintain | Slate v2 state/tx live-source refresh

  • refreshed slate-v2-state-tx-public-api-and-extension-namespaces.md against live .tmp/slate-v2 source, tests, docs, and examples
  • recorded the current split: state / tx exists and is tested, but author-facing docs/examples still teach primitive editor.* writes inside editor.update
  • kept the accepted decision unchanged: editor.update((tx) => tx.*) is the normal public write target; primitive editor writes need either advanced/internal classification or docs/examples migration before the API can be called final

[2026-04-28] maintain | Slate v2 node-DX command example cleanup

  • refreshed editor-node-dx-should-use-runtime-owned-shells-and-spec-first-renderers.md during the whole-rewrite review Pass 2
  • updated its extension command example to use editor.update((tx) => tx.nodes.insert(...))
  • kept the decision unchanged: runtime-owned shells and spec-first renderers are still accepted, but public command examples must follow the newer state / tx naming decision

[2026-04-28] maintain | Slate v2 overlay local proof refresh

  • refreshed slate-v2-local-proof-substrate.md against current .tmp/slate-v2 projection, annotation, widget, hook, test, and benchmark files during the decoration/annotation rewrite review
  • removed stale decoration-sources.ts source references because live source still routes decoration sources through projection-store.ts
  • kept the conclusion unchanged: Slate v2 has strong runtime-id subscription proof, but source-scoped recompute and annotation/widget perf still need lower-level runtime work

[2026-04-29] maintain | Slate v2 Editor namespace hard-cut review

[2026-04-29] maintain | Slate v2 Editor namespace Pass 3 refresh

[2026-04-30] maintain | collaborative annotation channel decision

  • added a Slate v2 annotation-channel decision: slate-v2-collaborative-annotation-channels.md
  • accepted external annotation channels as the raw Slate default for comment-only collaboration, with document-embedded ids left as an adapter or product choice

[2026-05-01] maintain | Slate v2 large-document perf claim correction

  • corrected the Slate v2 perf claim after fresh 5000/10000-block shell-island-vs-legacy-chunking benchmarks showed current shell islands win ready/full-document lanes but lose steady typing/select lanes to legacy chunking-on
  • updated the live Slate v2 docs and affected research decisions to point at the accepted next owner: DOM-present auto by default, stronger commit dirtiness, and explicit shell mode behind browser/native proof

[2026-05-03] maintain | TanStack Virtual / GitHub large-surface virtualization evidence

  • added tanstack-virtual-and-github-large-surface-virtualization.md for the Slate v2 virtualization ralplan
  • recorded the current conclusion: TanStack Virtual is a good viewport range engine for an experimental virtualized mode, but Slate must keep DOM coverage, selection, copy/paste, IME, mobile, browser-find, and a11y policy in Slate-owned code

[2026-05-17] maintain | Slate v2 Plate-fit API hard-cut ecosystem refresh

  • refreshed the Plate-fit API hard-cut ralplan against existing compiled editor-architecture research plus live local Tiptap, ProseMirror, Lexical, and Plate source
  • kept the compiled conclusion unchanged: Tiptap/Plate-style feature packaging belongs in Plate; raw Slate should keep read/update, state/tx, transform/query/normalizer middleware, typed DOM ingress facets, and raw React escape hatches
  • no new source page was added because existing compiled research plus local source lines were sufficient for this pass

[2026-05-20] maintain | Slate v2 non-node document state ecosystem refresh

  • refreshed the non-node editor state ralplan against existing compiled editor-architecture research, local raw ProseMirror/Lexical/Tiptap evidence, current .tmp/slate-v2 source, and Context7 official-doc checks
  • kept the architecture conclusion unchanged: document title/settings should be transaction-owned document stores beside children, not hidden nodes, RootNode metadata, or React controlled value
  • tightened the ecosystem comparison: ProseMirror strengthens serializable state-field descriptors and transaction history metadata; Lexical strengthens read/update tags and NodeState ergonomics but not Slate's storage location; Tiptap strengthens namespaced storage, commands, and selector subscription DX
  • no new source page was added because existing compiled research plus local raw/current-source lines were sufficient for this pass

[2026-05-25] maintain | Slate v2 Pretext pagination virtualization refresh

  • added pretext-pagination-page-virtualization.md for the Slate v2 pagination / virtualization planning lane
  • recorded the current conclusion: Pretext is the right layout engine, but prepare() still depends on canvas measurement; paged mode should virtualize pages/spreads first; strict collaboration/export should use optional profile-aware authoritative page-break snapshots
  • recorded Tiptap Pages evidence that pagination failure lives in split policy, table/media boxes, page content rects, and oversized non-splittable blocks, not just text measurement